複雑なアニメーションをするには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];
}
}
}
コメント