脱力駆動開発記

ゲームアプリを作るエンジニアの技術メモ

MENU

【Unity】Timelineで特定のフレームにスキップ

Unityのタイムラインで特定のフレームにスキップしたい

特定の再生時間に移動したい場合はPlayableDirectorのtimeプロパティに時間をつっこんであげればOK

docs.unity3d.com

ただこれは経過時間なので、フレーム数ではない。

タイムラインエディタ上のフレーム表示(下の画像の赤枠)に移動したいときは、タイムラインのFPSで割ったものを代入してあげる必要がある。 f:id:cocokyoro:20191013182733p:plain

フレーム数はここから確認 f:id:cocokyoro:20191013183000p:plain

var frame = 643; //飛びたいフレーム
var directorFps = ((TimelineAsset) director.playableAsset).editorSettings.fps;
director.time = frame / directorFps;

こんな感じで指定すればOK

余談

ただこの方法で移動した場合、移動後のフレームまでにMessageMarkerで呼び出そうとしているメソッドがあると、全てまとめて呼ばれてしまう。
SEをMessageMarkerで呼び出していたので、スキップするとまとめて音がなるという現象が。。
再生する処理側で修正しましたが、今後のアニメーション実装次第ではスキップ時に呼ぶかどうかっていうフラグをもたせた拡張が必要かも。

MessageMarkerはタイムライン上でメソッドを簡単に呼び出せるやつ
github.com

Signalを使えばよかったのかな?
そこはまだ検証してないです。
blogs.unity3d.com

参考: https://forum.unity.com/threads/jump-to-frame.500709/