Spriteの簡単なアニメーションはスクリプトで!

複雑なアニメーションをするにはAnimatorとAnimationを使えばいいのですが、スプライトを次々入れ替えていくような単純なアニメーションの場合だと、わざわざAnimatorを使うほどではない気がします。

Animatorって結構重たい処理らしいし、このぐらいならスクリプトで制御した方が絶対良いはず。

ということで、スクリプト版Animatorを作ってみました。


using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SpriteAnimation : MonoBehaviour {

	[SerializeField] Sprite[] sprites;  //アニメーションに使うスプライト
	[SerializeField] int frame;  //何フレームでスプライトを切り替えるか(=アニメーションの速さ)
	[SerializeField] int offset;  //何個目のスプライトから始めるか(通常は0でいいはず)
	[SerializeField] bool loop;  //アニメーションをループさせるか
	[SerializeField] bool playOnAwake;  //起動時からアニメーションさせるか

	SpriteRenderer myRenderer;  //SpriteRendererをキャッシュ
	int count;  //フレームのカウント用
	int spriteCount;  //スプライトの数
	int nowSprite;  //現在のスプライト番号
	[System.NonSerialized] public bool active;  //外部からアニメーションの再生・停止するための変数

	void Awake(){
		myRenderer = GetComponent ();
		spriteCount = sprites.Length;
		nowSprite = offset;
		active = playOnAwake;
		count = 0;
		myRenderer.sprite = sprites [nowSprite];
	}

	void Update(){
		if (active) {
			count++;
			if (count == frame) {
				count = 0;
				NextSprite ();
			}
		}
	}

	void NextSprite(){
		if (!loop && nowSprite == spriteCount - 1) {
			active = false;
		} else {
			nowSprite = (nowSprite + 1) % spriteCount;
			myRenderer.sprite = sprites [nowSprite];
		}
	}
}

コメント