はじめに
今回はAnimationからメソッドを呼ぶ方法についての記事になります!
Unityに標準で備わっている馴染み深いアニメーションですが、Animation Event
という機能があることをご存じでしょうか。
かく言う私も最近知ったのですが、どうやらAnimation Event
を用いることでAnimation
内から対象のゲームオブジェクトにアタッチされたスクリプトのメソッドを呼ぶことができるみたいです。
というわけで詳しくみていきましょう!
Animation Eventとは
Unityの公式リファレンスにはこのように書かれていました。
アニメーションイベントは、オブジェクトのスクリプト内の関数をタイムラインの特定のタイミングで呼び出すことができます。
これでアニメーションに合わせたメソッドの実行が可能になります。
使ってみる
サンプルとしてこのようなAnimation
を用意してみました。
ここにAnimation Event
を追加するには、下の画像のような イベントボタン をクリックします。
ただし、現在の再生位置に登録されることに注意してください。(白いラインがある時間)
作成したAnimation Event
を選択した状態ではインスペクター上でこのように表示されているはずです。
このFunction
に実行したいメソッドを選ぶことで決まったタイミングでメソッドを呼ぶことができるようになります。
ただし、Animation
コンポーネントがアタッチされているゲームオブジェクトにアタッチされたスクリプトのメソッドしか呼び出せないことに注意しましょう。
サンプルとしてこのようなスクリプトを用意してみました。これをAnimation
コンポーネントがアタッチされているゲームオブジェクトにアタッチします。
Sample.cs
using UnityEngine; public class Sample : MonoBehaviour { private void PrivateMethod() { Debug.Log("PrivateMethod"); } public void PublicMethod() { Debug.Log("PublicMethod"); } }
そしてもう一度Animation Event
を選択してみると先程のメソッドがあるはずです。
また自分で作成したメソッドは一番下に表示されていたので、左下の矢印から一番下まで移動する必要がありました。
PrivateMethod
とPrivateMethod
の両方が表示されていたので、private
もpublic
のメソッドも実行できるようです。
パラメータを付ける
これらのメソッドには一つまで引数をつけることができます。
公式のリファレンスにもこのように表記されていました。
関数はアニメーションイベントにより呼び出され、オプションとしてパラメーターをひとつ付加することができます。パラメーターは float、string、int、オブジェクト 参照、あるいは AnimationEvent オブジェクトです。AnimationEvent オブジェクトはメンバー変数を持ち、float、string、int、オブジェクト参照をすべて一緒に、関数呼び出しをトリガーしたイベントに関する情報とともに、関数に受け渡すことができます。
AnimationEvent
オブジェクトも引数として選べるのは結構面白いですが、多くの場合はint
,float
,string
ではないでしょうか。
今回はサンプルとしてstring
で試してみたいと思います。
using UnityEngine; public class Sample : MonoBehaviour { public void SampleMethod(string str) { Debug.Log("str: " + str); } }
さいごに
タイミングを実際に視覚的に見ながら設定するのは結構便利ですね。
ただAnimationEvent
のメソッドを登録するときに、自作のメソッドが一番下にあるのはやや移動が面倒な気がしました。。。