はじめに
- 今担当しているプロジェクトで Timeline を使う機会があったので、色々と調べてみた。
- かなり便利な機能なので、積極的に使っていきたい所存。
- だが、ちょっと気になる点があるので、纏めてみる。
- Timeline の使い方とかを纏めた記事ではないので悪しからず。
現状の理解
- 元々 Timeline は Animator の上位に位置する概念だと理解している。
- Animator だけでは不可能な複数の GameObject に跨がるシーケンシャルな操作ができる。
UnityEngine.Timeline.ITimeControl
というインタフェースを実装することで、Timeline からのイベントを受け取れる。- Control Track を追加して、そこに Clip として
Control Playable Asset
を追加すれば送られてくる。
- Control Track を追加して、そこに Clip として
気になる点
Animator との共存
- Animation Track による個別のアニメーションについては、あくまで AnimationClip を再生するモノなので Animator が居ないと再生できない。
- じゃあ、 Animation Track により再生されるアニメーションと、Animator 自身により再生されるアニメーションはどちらが強いのか?
- 軽く実験してみたところ、並列で動かせるっぽいが果たして仕様だと信じて良いものか…?
- 「Sprite 差し替えでコマアニメを行うループアニメーション」を Animator の Default State にセットし、「フェードインするアニメーション」を Timeline から発火させたところ、問題無く動きはした。
ITimeControl
のイベント登録タイミング
- はじめから Control Playable Asset の Source Game Object のコンポーネントとしてアタッチ済のスクリプトに
ITimeControl
を実装したところ問題無く動いた。 - が、「よーし、じゃあオヂサン UniRx 用の Wrapper 作っちゃうぞー」とか思って「
OnControlTimeStartAsObservable()
的なメソッドが呼び出されたときにはじめてITimeControl
なスクリプトを AddComponent する」といった実装をしたところ、一切イベントが発火しなかった。 - これがバグなのか仕様なのか…?
- メンドイので、まだ Issue Tracker は調べてない。
ITimeControl
の OnControlTimeStop()
が呼ばれないことがある
- Timeline 自体の終端フレームと Clip の終端フレームが一致している場合に、
OnControlTimeStop()
が呼ばれない。 - Clip の終端を1フレーム手前に動かしたところ、問題無く動いた。
- これは…バグ…だよね…?
- メンドイので、まだ Issue Tracker は調べてない。
所感
- まぁ、まだリリースされて日が浅いので、多少のバグはあるのかな?という感想。
- それを差し置いても、とても便利なので、社内に展開してみんなが使いこなせるようになりたい!
- 表現の幅がメッチャ広がる!!!
- 何か情報お持ちの方は教えてくださいませ。