【Unity】ITimeControlで、Timelineから"コンポーネント"を操作する
今回はTimelineのクリップからMonobehaviourを継承したコンポーネントを手軽に操作する方法について紹介します。
Timelineで手軽に動かしたい
Timelineでキャラクターを動かす時、大抵の場合はAnimationで物を作っていく訳ですが、それでは色々と面倒なケースが多々あります。例えばUVスクロールする背景や、単純にキャラクターを回転させたいようなケースです。
こういった項目はPlayableを自分で作れば簡単に回避出来るには出来るのですが、その為だけにPlayableを作るのは割と面倒です。またTimelineの有無に関わらず動かしたいといったケースも考えられます。
そういった時にITimeControlは便利です。
ITimeControlインターフェースはTimelineから呼ばれる
インターフェースの一つにItimeControlという物があります。これはControl Playableで設定していた場合、ヘッドがクリップを通過中に呼び出される…という物です。
コンポーネントにインターフェースを付けるだけで良いので、Playableを云々するよりもかなり簡単に実装できるのは中々に良いです。
但し、インターフェースから受けられるのは「実時間」で、クリップ全体の長さは受けられない点には注意が必要です。そっちはPlayableを頑張る感じで。
実際に回転させる
実際にITimeControlを使ってみます。
このサンプルでは上のGifにあるように、対象を回転させます。
コードの準備
まず、iTImeControlを継承したコンポーネントを用意します。
内容は単純に、Speedの速度かつAxisの軸で回転させる…という物です。
出来たらコンポーネントを適当なGameObjectに追加します。
ここで個人的に思うポイントは、毎フレーム加算するのではなく、時間で再現出来るようにする事です。加算する場合は巻き戻しても進んでも常に時間が進んでしまいますので。
ただ、振動とか、そういった物は別に可逆でなくとも良いかも。
Timelineにコンポーネントの付いたオブジェクトを登録する
次にオブジェクトをTimelineに登録します。
この時使用するのはControl Trackです。
次にAdd Control Playable Asset Clipを追加して、作成したClipのSource Objectに先程ITimeControlを追加したオブジェクトを登録します。
これでControl Playable Asset Clip上を通る際、ITimeControlのコールバックが呼び出されるようになり、ゲームを再生しなくともコンポーネント側の動きを再現したり出来るようになります。
補足
ちなみに、Animationや他の項目と異なり、プレビューを解除しても元の位置に戻らないので、イベントで開始時の位置を覚えておいて終了時に戻すのオススメ。Tweenとかする場合。