今回はTimelineから特定のメソッドを呼ぶ方法について紹介します。
Unity 2019.1.0a10で追加された、Timelineでメソッドを呼び出すSignalTrackの使い方 #unitytips pic.twitter.com/BEPvS1D6Qb
— 椿 (@tsubaki_t1) 2018年11月29日
この機能はUnity 2019.1 a11から安定して使用出来ます。
これはベータですらないアルファの機能なので、今後変化する可能性があります。
Timelineからメソッドを呼ぶ仕組み
Timelineではアニメーションイベントと区別するためか、「Signal」という新しい概念を追加しました。
Signal
はアセットです。これはScene上のSignal Receiver
とTimelineに登録します。TimelineからSignal
を呼び出すと、シーン上に存在するSignal Receiver
がシグナルを受信し、Signal Receiver
がUnity Eventを呼び出す流れです。
名称 | 機能 |
---|---|
Signal | アセット、マーカーに登録する |
Marker | Timelineに登録するイベント |
Signal Receiver | マーカーからシグナルを識別して、UnityEventを呼び出す |
SignalやSignal Receiver、マーカーを使う流れ
使い方を見てみます。今回は下のような、特定のタイミングでパーティクルを出力してみます。*1
まず最初に、Signal
アセットを作ります。
名前は何でも良いのですが、全体を通してユニークな名称である必要があるので、Signalフォルダとか作って、全てソコに突っ込むのが良さそうです。
今回はEmitというSignal
を作りました。
次にシグナルで反応して欲しいGameObjectにSignal Receiver
を登録します。
今回は、移動する玉(Sphere)オブジェクトのParticle System.Emit(100)
を呼び出してみます。
Timelineのシグナルと関連付ける為、Signalには先程作成したシグナル、Emitを登録します
あとはTimelineのアニメーションクリップ上でAdd Signal Emitterを選択し、マーカーを追加します。
マーカーのシグナルはEmitを選択すると、そのタイミングに呼ばれるイベントが何かを確認出来ます。
Tips
呼び出されるマーカーは、Trackが指定しているオブジェクトのSignal Receiverです。同じSignal
を使用している場合でも、異なるSignal Receiver
の場合、各々のイベントが呼ばれます。
呼び出すSignal Receiver
はTimelineのTrack指定ですが、その他にもSignal Receiver
自体をTrackに登録するSignal Receiver Track
や、Playabel Directorが登録されているオブジェクトに設定されているSignal Receiver
を呼び出す、Marker Track
などがあります。
Signal Receiver
のUnityEventをEditor And Runtime
にすると、動かせるAPIならゲームを再生しなくてもイベントを呼び出す事が出来ます。その場合、当然巻き戻し処理を作っておかないとひどい目になります。
マーカーの挙動を自作する
マーカーを自作することも出来ます。
こちらの方は、Signal
等を用意せずともよく、コードベースで色々な処理を実装可能です。
特にSignalベースだと、マーカーに複数の情報を登録する場合*2にSignal
が増えすぎて不便なので、場合によってはコチラの方が便利かもしれません。
今回はTimelineから文字を切り替える処理を作成してみます。
マーカーに到着したタイミングで文字を切り替えています。
自作するコードには、送信するマーカーと、マーカーを受信するコンポーネントが必要です。
Text Marker Receiver
はSignal Receiver
の代わりに登録します。Timelineからこのクラスが呼ばれる感じです。
次にマーカーを受信するGameObject
を登録するTrackを追加します。Animation等で動かしているなら該当するTrackに足せば良いですが、特に無いのならばMarker Track
が良いです。
あとはMarker Track
にイベントを登録します。上のコードを登録しておくと、登録するマーカー一覧にテキストのマーカー
が追加されているので、登録します。あとはマーカーの中身をInspectorで設定していきます。
これでゲームを再生するとイベントが呼ばれます。今回の場合は、テキストの中身が差し替わります。
感想
Signalが直感的ではない感じがしましたが、複数のTimelineを複数のSceneで使いまわしたり、イベントを沢山配置する用途だと確かに理にかなっている気がします。
関連
Signalについて
New in 2019.1 - Timeline Signals - Unity Forum
マーカーのカスタマイズ
New in 2019.1 - Marker Customization - Unity Forum
AnimationEventのように、特定のメソッドを呼び出す、カスタムマーカーのサンプル
Unity 2019.1未満ならコチラ
わかりやすいスライドが公開されました