経緯
Unityで2Dゲームを作る際、繰り返しアニメーションをするだけのオブジェクトや、アニメーションが終わったら消滅するだけのオブジェクトを配置する事はよくありますが、一つひとつUnity標準のAnimatorControllerを使っていてはキリがありません。そこで、繰り返しアニメーションさせるだけのコンポーネントを実装しました。
実装
「SpriteAnimation」というスクリプトを作成し、下記をコピペして使用できます。
SpriteAnimation.cs
usingSystem.Collections.Generic;usingUnityEngine;usingSystem;publicclassSpriteAnimation:MonoBehaviour{[SerializeField]SpriteRendererspriteRenderer;[SerializeField]List<Sprite>sprites;[SerializeField]boolloop,destroy;[SerializeField]floatsecond;intcount;floattime;voidStart(){spriteRenderer.sprite=sprites[0];}voidUpdate(){time+=Time.deltaTime;if(time>second){time-=second;count++;spriteRenderer.sprite=sprites[count];if(count<sprites.Count-1)return;if(loop)count=-1;elseif(destroy)Destroy(gameObject);elsedisposable.Dispose();}}}
インスペクター上の項目説明
- SpriteRenderer : アニメーションさせるSpriteRendererをアタッチ
- Sprites : アニメーションに使用するSpriteを順番にアタッチ
- Loop : Loopさせる場合はチェック
- Destroy : アニメーションの終了後に破壊するならチェック
- Second : アニメーションの速度
UniRX版
こっちの方が低負荷
SpriteAnimation.cs
usingSystem.Collections.Generic;usingUnityEngine;usingUniRx;usingSystem;publicclassSpriteAnimation:MonoBehaviour{[SerializeField]SpriteRendererspriteRenderer;[SerializeField]List<Sprite>sprites;[SerializeField]boolloop,destroy;[SerializeField]floatsecond;intcount;IDisposabledisposable;voidStart(){spriteRenderer.sprite=sprites[0];disposable=Observable.Interval(TimeSpan.FromSeconds(second)).Subscribe(_=>{count++;spriteRenderer.sprite=sprites[count];if(count<sprites.Count-1)return;if(loop)count=-1;elseif(destroy)Destroy(gameObject);elsedisposable.Dispose();}).AddTo(this);}}