2019/3/8
そろそろアニメーションをつけてかっこよくしたいという事で、その辺の機能を作った。
でも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);
}
こんな感じの内容が書かれたスクリプトを書く。
スクリプトを作成したら、アニメーションさせたいオブジェクトにアタッチしてスクリプトは終わり。
アニメーションさせたいオブジェクトに新規AnimatorとAniamationを作成してコンポーネントに。
Animationウィンドウで、右クリック → Add Animation Event
追加したAnimation Eventをクリックして、Inspectorで先ほど作成したAnimationSpriteNext関数を選択。
必要なコマ数イベントを作成して、AnimationSpriteNextを呼ぶ事でアニメーションになる。
上記のスクリプトを付けたオブジェクトのInspectorを見る。
InspectorでこのスクリプトのanimationSpritesにアニメーションに必要なスプライトを設定する。
以上で設定は終わり。
これで再生して無事動けば完成だ。
僕が実際に利用する際は、animationSpritesはデータベースから参照している。
ちなみに、データベースにはScriptableObjectを使用した。
UnityのAnimationを使うので、追加でα値を変えるアニメーションが簡単に追加出来る。
また、通常のアニメーションとしてアニメーターで管理出来る。
その為移動ステート、スキルステート、待機ステートなどを作って遷移規則を作ってしまえばいい感じに動く。
Animation Eventは何も関数を呼ばないとエラーになるので、僕はEndAnimation()という空の関数を作って最後に呼ぶことにしている。
正直悪くはないが、これじゃない感もある。
特に、後から見直した時にどうなってんのか分からなくなりそうなのが怖い。
一度アニメーション全部を管理するスクリプトを書こうと思ったけど、
結局アニメーターみたいなGUIが欲しい!ってなって詰んだ。orz
Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。
また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!
こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?
コメント