2019-05-12に投稿

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

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

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

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

Animationを作る

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

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

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

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

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

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

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

以上で設定は終わり。

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

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

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

応用

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

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

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

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

コメント

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

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

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

Originally published at questgames.hatenablog.com

QuestGames

全ては5年前に始まった。 QuestGamesはゲームを作る3人組です。 僕らの物語は現在執筆中です。ブログをご覧ください。

Crieitは個人で開発中です。 興味がある方は是非記事の投稿をお願いします! どんな軽い内容でも嬉しいです。
なぜCrieitを作ろうと思ったか

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください!

ボードとは?

関連記事

コメント