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

Commentsこの記事についたコメント

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です