QUEST LAB

十二支 × 協力 × リアルタイムバトル『Play The Fox』を作っています。

UnityでSpriteアニメーションを画像差し替え可能な実装をする

そろそろアニメーションをつけてかっこよくしたいという事で、その辺の機能を作った。

でもUnityでSpriteアニメーションを行う機能が充実していなかった。

色んな記事を見ても汎用性が低そうな実装が多い。

 

そこで今回はAnimationからスクリプトの関数を呼び出し、Animatorで管理する方法で実装してみた。

 

利点は2つ。

  • 通常通りアニメーターが利用できるのでGUIでステート管理が可能。

  • 似たアニメーションを違うキャラクター用にスプライトの差し替えが可能。  

本当に簡単で申し訳ないが、作成方法を書いておこう。

 

スプライトの切り替えをするスクリプトを作成する

スプライトの切り替えを行うスクリプトを用意する。

今後UnityのAnimationからAnimationSpriteNextの関数を呼ぶことになる。

public Sprite[] animationSprites;

private int animation_index;
void AnimationSpriteNext(){
    GetComponent<SpriteRenderer>().sprite = animationSprites[animation_index];
    animation_index = (animation_index + 1) % (animationSprites.Length);
}

こんな感じの内容が書かれたスクリプトを書く。

スクリプトを作成したら、アニメーションさせたいオブジェクトにアタッチしてスクリプトは終わり。

Animationを作る

アニメーションさせたいオブジェクトに新規AnimatorとAniamationを作成してコンポーネントに。

Animationウィンドウで、右クリック → Add Animation Event

追加したAnimation Eventをクリックして、Inspectorで先ほど作成したAnimationSpriteNext関数を選択

必要なコマ数イベントを作成して、AnimationSpriteNextを呼ぶ事でアニメーションになる。

インスペクターでアニメーションさせるスプライトを設定

上記のスクリプトを付けたオブジェクトのInspectorを見る。

InspectorでこのスクリプトanimationSpritesにアニメーションに必要なスプライトを設定する。

以上で設定は終わり。

これで再生して無事動けば完成だ。


僕が実際に利用する際は、animationSpritesはデータベースから参照している。

ちなみに、データベースにはScriptableObjectを使用した。

応用

UnityのAnimationを使うので、追加でα値を変えるアニメーションが簡単に追加出来る。

また、通常のアニメーションとしてアニメーターで管理出来る。

その為移動ステート、スキルステート、待機ステートなどを作って遷移規則を作ってしまえばいい感じに動く。

Animation Eventは何も関数を呼ばないとエラーになるので、僕はEndAnimation()という空の関数を作って最後に呼ぶことにしている。


コメント

正直悪くはないが、これじゃない感もある。

特に、後から見直した時にどうなってんのか分からなくなりそうなのが怖い。

一度アニメーション全部を管理するスクリプトを書こうと思ったけど、 結局アニメーターみたいなGUIが欲しい!ってなって詰んだ。orz