Quantcast
Channel: 初心者タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 21089

【Unity】繰り返しアニメーションさせるだけのコンポーネント

$
0
0

経緯

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);}}

Viewing all articles
Browse latest Browse all 21089

Trending Articles