Unityで2DSpriteを扱ってみよう(第2回)
AnimationとAnimationControllerの役割
まさか前回はpivotの設定だけで終わると思ってませんでした。今回はいよいよ実際にアニメーションデータを作成して、動かしてみましょう。
まず、Unityでアニメーション制御をしようとした場合、「Animation Controller(Animator)」と、「Animation」のふたつのモジュール(って呼んでいいのかな)が存在します。キャラクターの「待機」や「ジャンプ」、「移動」など、アニメーションのデータそのものを指すのが「Animation」データで、これら様々な「Animation」をツリー構造で管理して状況によってアニメーションを遷移させる仕組みが「Animation Controller(Animator)」です。
上図のように、コマアニメを成立させるための画像素材ひとまとまりを、ひとつのAnimationファイルと捉えます。Animationでは、個々の静止画の「順番」や次の絵に移行するまでの「時間」を設定できます。
今回は2Dアニメーションのケースを紹介していますが、このAnimationは3Dのボーンアニメーションにも使われていますので「階層化されたゲームオブジェクトをタイムラインによってアニメーション制御する仕組み」と言えると思います。
AnimationController(Animator)では、上記で作成した複数のアニメーションファイルを管理するために使用します。ここではアニメーションの遷移や条件分岐などを設定でき、ゲーム内でのキャラクターの動作と操作を一致させることができます。モーションツリーなどと呼ぶツールもあると思います。
ただし、遷移が複雑なアクションゲームなどでは、このAnimationControllerの部分をカスタム化しているメーカーさんも多いと聞きます。
また、このAnimationController(Animator)は、このコンポーネントが設定されたオブジェクトをアニメートさせるためにも必要なものとなります…というか、こっちの方が重要かもですね(後述します)。
実際の設定
さっそく始めましょう。まず最初に、シーンにキャラクターの(この場合は画像)を何か配置します。コンポーネントに「Sprite Renderer」が設定されていれば何でも大丈夫です。Sprite Rendererコンポーネントにはいくつか設定があるのですが、詳細については次の機会に。
シーンにキャラクターを配置すると上図のようになります。前項でpivotの設定が正しくされていたら、シーンに配置した時点で原点Grid(地面と仮定する)の上に乗ったような形で表示されていると思います。
次に、実際にアニメーションを設定していきます。上部メニュー「Window」→「Animation」→「Animation」と選択し、Animationウィンドウを呼び出します。
最初にAnimationウィンドウを呼び出したとき、下図のように、何も設定されていない状態になっているかと思います。
では、シーン上に配置したキャラクターを選択した状態で、このAnimationウィンドウ内の「To begin animating "画像名", create an Animator and an Animation Clip.」というメッセージの下にある「Create」ボタンを押してください。
これは、簡単に言うとシーン上に配置された画像を動かすための、AnimationとAnimationController(Animator)」を作成する、という意味です。
作成するAnimationとAnimationController(Animator)をどこに保存するか聞いてくるので、適当な場所に適当な名前をつけて保存します。
で、どういう状態になったかというと、シーン上にある画像(この場合はpl_idle01)にAnimator(Animation Controller)が設定され、アニメーションによって動かせますよ、となりました。Animator(Animation Controller)は、ゲームオブジェクトと、アニメーションデータを”橋渡し”するコンポーネントであり、これがないとオブジェクトを動かすことができません。
Animator(Animation Controller)の中を除いてみますと、Entryから「New Animation(先ほど保存したAnimationファイル)が結びつけられています。これは、このオブジェクトが「New Animation」を参照して、そこで設定されている通りに動きますよ、ということを示しています。
では次に、実際にアニメーションを設定していきましょう。シーン上に配置された画像(この場合はpl_idle01)を選択した状態で、Animationウィンドウを確認すると、下図のような状態になっているかと思います。
ゲームオブジェクトに対してアニメートできるパラメータはとても沢山あります。移動、回転、スケーリングなどのトランスフォーム系に留まらず、マテリアルや表示優先順位、左右のフリップなど様々なものが扱えます。それらのパラメータを扱うために、プロパティを追加していきます。
ウィンドウ左上部の「Add Property」を押下してください。
上図のように、アニメート可能なプロパティがプルダウンメニューに表示されます。今回はコマアニメを作成したいので、この中から「Sprite」を選択します。
すると「Sprite」プロパティが追加されて、タイムライン上にキャラクターの画像が表示されました。このタイムライン上に、Project内にあるアニメパターン画像を直接ドラッグ&ドロップして、経過時間によってコマが変化しているアニメーションを作成していきます。
配置し終わったら、Animationウィンドウ内、左上の再生ボタンを押してください。するとシーン上のキャラクターが動き出します。
これでAnimationがひとつ完成しました。キャラクターの行動毎に同じ操作をして、行動数ぶんだけAnimationを制作していきましょう。
さて、勘の良いひとはお気づきかと思いますが、上記の方法をたどって量産すると、Animationの数だけAnimationController(Animatior)が作られてしまいます。が、AnimationController(Animatior)は複数のAnimationファイルを管理する仕組みなので、キャラクターに対してひとつあれば十分なのです。
なので一番シンプルな作業スタイルとして、既存のAnimationファイルを複製(Ctrl+d)して、その中身を改造して量産するのが良いかと思います。
さて、多少ややこしいのですが、これでUnityでのSpriteAnimation制御について解説いたしました。次回以降はアニメーションカーブを使ったキャラクターの制御方法とか、Spriteを1枚の画像にパッキングするSpriteAtlasについて解説したいと思います。