i-school - アニメーションイベントの実装例

ステージを作成する


 キャラクター用のモデルを配置するための、適宜なサイズのステージを作成してください。

 アセットを利用してもよいですし、Plane ゲームオブジェクトを作成してステージに代用しても構いません。


アセットストアからアセットをダウンロードしてインポートする


 アセットストアへ移動し、利用したいアセットをダウンロードして Unity にインポートします。
 
 ここでは参考に Gambler Cat アセットを紹介します。
AnimationClip ファイルの含まれている3Dのキャラクターモデルであれば、他のアセットでも問題ありません。

Gambler Cat






 インポートまでの方法は、先ほどまでの手順と同じです。
PackageManager からダウンロードしてインポートを行ってください。


Gambler Cat




 無事にインポートできたら、フォルダを確認してください。

 アセットの名称がそのままフォルダ名にはなりませんので、インポート時にフォルダの構成と名称を確認しておくか、
アセットストアの詳細ページにある PackageContent タブを選択するとファイルの構成が確認できます。
 

インポート確認ウインドウ



インポート後のフォルダ



アセットストアの詳細画面内にある PackageContent での確認



 今後は1人でアセットをインポートする機会が増えますので、インポートしたアセットがどのような名称であるか確認する方法を覚えておきましょう。


Sceneビューに GamblerCat ゲームオブジェクトを配置する


 インポートした GamblerCat アセットに含まれている GamblerCat のプレファブ・ゲームオブジェクトを利用して
プレイヤー用のキャラクターとします。

 以下のパスにあるプレファブのゲームオブジェクトをドラッグアンドドロップして Sceneビューかヒエラルキーにドラッグアンドドロップして配置してください。

 配置後、ヒエラルキーにある GamblerCat ゲームオブジェクトを選択し、インスペクターの Transform コンポーネントから
Positon の値を原点位置 (0,0,0) に設定してください。右上の歯車アイコンから Reset コマンドを選択しても初期値に戻ります。


インスペクター画像




 Sceneビューと Game ビューにもゲームオブジェクトが見えていることを確認してください。
以下の画像は参考画像です。


Sceneビュー



Game ビュー



 以上で配置は完了です。


Gambler Cat Import Settings よりモデルのサイズを調整する


 ゲームオブジェクトのサイズを変更する方法と、インポートしたファイルの元のサイズを変更する方法があります。
今回は、ゲーム内の Scale については (1,1,1) のままで利用したいので、GamblerCat のモデルの情報を修正してサイズを変更します。

 以下のパスにある、GamblerCat の FBX モデルのファイルを選択します。

FBX モデルのパス
Assets/SiuniaevCharacters/01_GamblerCat/Models/FBX/GamblerCat.fbx



 上記のパスにある GamblerCat.fbx ファイルを選択すると、インスペクターの情報が 〜 ImportSettings という名前の FBX モデル用の内容に切り替わります。
今回は Gambler Cat Import Settings と表示されます。

 インスペクターの一番上部にある Scale Factor の値を 15 に変更し、インスペクターの右下にある Apply ボタンを押してください。
値を変更していても Apply を押さない限りは変更は反映されません。


ImportSettings



 設定を変更すると、Sceneビュー内の GamblerCat のサイズが変更されます。
今回は調整している値が決まっていますが、本来は自分で数字を入れ替えながら調整を行ってください。

 以下は参考画像です。モデルが画面の床と比較して問題のないサイズ感になることを意識してください。


Sceneビュー



Game ビュー



 以上で調整は完了です。
この手法を利用することで、ゲームオブジェクトの Scale を変更せずにサイズの調整を行うことが出来ます。


AnimatorController の設定


 Animator ビューを開いて AnimatorController の設定を行います。

 AnimatorController については最初から用意されているものを利用しても構いませんが、
AnyState を利用し、Hit ステートへのトランジションを作成してください。





AnimationEvent の設定

スクリプト







AnimationClip の設定


 この例では、下記のフォルダにある hit というアニメーションクリップを選択しています。





 hit を選択するとインスペクターの表示がアニメーションクリップ専用のものに切り替わるので、
インスペクターの右上にある Edit… ボタンを押してください。





 インスペクターの内容が Import Settings に切り替わるので、Animation タブを選択します。





 下の方へスクロールして、Events の矢印をクリックするとタイムライン項目が表示されます。

 Events のすぐ下にある 白い縦棒 + を押すと、新しいアニメーションイベントを作成できます。
すでにある場合には、それを利用しても構いません。

 選択しているアニメーションイベントの縦棒は青くなります。。





 この例では、時間軸を 0:33 より少し右側くらいにすると、ちょうど手が伸びた状態になるので、
ここまで白い縦棒を移動させて、Function に Hit というメソッド名を登録します。

 もしも、アニメーションイベント(白い縦棒)が複数ある場合には、1つだけにしてください。
他にもアニメーションイベントがあった場合、それらにすべて設定が行われていない(実行できない)とエラーが発生するためです。


ゲームを実行して動作を確認する


 これで、アニメーションイベントと PlayerController クラス内に記述した Hit メソッドが同期し、
アニメーションの再生時に、アニメーションイベントの時間になったタイミングで Hit メソッドが実行されるようになります。

 アニメーションイベントは Animator コンポーネントがアタッチされているゲームオブジェクトにも紐づいていますので、
実行したいメソッドが書いてあるクラスは必ず、Animator コンポーネントがアタッチされているゲームオブジェクトにしてください。

 以上になります。