Unity でアニメーションを作成してオブジェクトを動かす時、アニメーションの終了を判定したい時があります。
例えばアニメーション中に操作が行われると不都合が生じる事があります。アニメーションが終了してから操作を再開したいのです。
そんな時、アニメーションイベントという便利な機能があります。アニメーションイベントとは、アニメーション中の指定部分で処理を行える機能です。
便利ですが使い方にはややこしい所もあるので解説していきます。
アニメーションイベントの使い方
これはとあるオブジェクトにアニメーションを設定している画面です。
アニメーションの終了部分を選択しておきます。
続いてピンのようなマークのボタンを押します。
するとインスペクター上にアニメーションイベントの設定が表示されます。
関数の部分にアニメーションの終了時に呼びたい関数名を入力します。
その関数をどこに書くの?という疑問もごもっともです。
アニメーションするオブジェクトにアタッチされたスクリプトに書きます。
アニメーション終了時に呼び出す関数にフラグを変えるなどして、アニメーション中は操作を受け付けないような設定ができます。
アニメーションイベントが呼べない
アニメーションイベントが呼べる時と呼べない時があって困る事があるかもしれません。私もそうでした。
実はアニメーションイベントを使用できる条件があるのです。
最初から設置してあるオブジェクトなら良いですが、Instantiate で動的に生成したオブジェクトをアニメーションする場合、この条件に該当せずアニメーションイベントを使えなかったのです。
動的に生成したオブジェクトにはスクリプトがアタッチされているわけではないためです。
苦し紛れですが対処法はあります。
対処法
画面外に小さなオブジェクトを設置して、同じ長さのアニメーションを設定し、こちらからアニメーションイベントを呼び出すという方法です。
予め設置してあるオブジェクトであれば、アニメーターとスクリプトをアタッチできるのでアニメーションイベントを使用できる条件が揃います。
きっともっとスマートな方法があるのだとは思いますが…。