こんにちわ、Unityエンジニアのオオバです。

Unity2017.1.0で正式リリースを迎えたTimelineをそろそろちゃんと理解しようと思います。

最初に大雑把な概念図を作ってみました。

◆Timeline全体

そろそろUnity2017のTimelineの基礎を押さえておこう_22

◆各種Trackの中
そろそろUnity2017のTimelineの基礎を押さえておこう_24

そろそろUnity2017のTimelineの基礎を押さえておこう_32

まずは手っ取り早く始める方法から。

📝 目次

手っ取り早くTimelineを始める

メニュー Window Timeline EditorでTimelineエディタを開きます。
ヒエラルキーの任意のGameObject (ここではTimelineRoot) を選択します。

そろそろUnity2017のTimelineの基礎を押さえておこう_45

するとCreateボタンが表示されるのでクリックします。
ダイアログが開き、Playableオブジェクトの命名を求められるので命名します (ここではTl.playable)。

そろそろUnity2017のTimelineの基礎を押さえておこう_50

ヒエラルキー上で選択済みのGameObject : TimelineRootにPlayableDirectorコンポーネントとAnimatorコンポーネントがアタッチされ、PlayableDirectorのPlayable変数にPlayableオブジェクトがアタッチされます。

これは先の概念説明時に紹介した、各種Trackの中の1つAnimationTrackをPlayableオブジェクトに追加したことになります。

そろそろUnity2017のTimelineの基礎を押さえておこう_56

TimelineRootの子階層に球を追加します。

そろそろUnity2017のTimelineの基礎を押さえておこう_59

再度TimelineRootを選択し、AnimationTrackのRecordボタンをクリックしてアニメーションを追加してみます。

そろそろUnity2017のTimelineの基礎を押さえておこう_63

そろそろUnity2017のTimelineの基礎を押さえておこう_66

時間をシークして、球の位置を変更し、タイムラインを作っていきます。

そろそろUnity2017のTimelineの基礎を押さえておこう_70

Timelineの再生ボタンでアニメーションを確認できます。

また、AnimationTrackには別途AnimationClipをドラッグアンドドロップすることも可能です。

以上がオオバなりの手っ取り早くTimelineを使う方法です。

残り4種のTrack

AnimationTrack以外のTrackを使うことで表現の幅を増やしていきます。

そろそろUnity2017のTimelineの基礎を押さえておこう_85

TrackはAddボタンで追加できます。

1.ActivationTrack

そろそろUnity2017のTimelineの基礎を押さえておこう_98

指定のGameObjectのActiveを切り替えるTrackです。
Activeの時にアクティブになります。

2.AudioTrack

そろそろUnity2017のTimelineの基礎を押さえておこう_105

名前の通りAudioClipをタイムラインに乗せて再生します。
再生確認するためには再生モードにする必要があります。エディットモード中Timelineの再生では鳴りません。

3.ControllTrack

PrefabをInstantiateしてくれるTrackです。

そろそろUnity2017のTimelineの基礎を押さえておこう_114

そろそろUnity2017のTimelineの基礎を押さえておこう_116

ControllPlayableAssetを選択肢し、ParentObjectとPrefabを設定すると、タイムラインの実行タイミングで生成され、ControllTrackが実行されたタイミングでオブジェクトはアクティブになり、ControllTrackが終了したタイミングで非アクティブになります。
Trackの再生タイミングでインスタンシエイトされるわけではありません。

4.PlayableTrack

PlayableTrackはスクリプトを実行させるTrackです。

そろそろUnity2017のTimelineの基礎を押さえておこう_125

PlayableBehaviourクラスとPlayableAssetクラスのサブクラスを使って実装します。
PlayableBehaviourクラスはPlayableTrackの特定タイミングにおけるイベント関数が以下のように定義されています。

この関数内に任意の処理を書くことが出来ます。
特定のタイミングにおけるオブジェクトの操作、挙動を処理させるクラスです。

そろそろUnity2017のTimelineの基礎を押さえておこう_139

PlayableAssetクラスが、PlayableTrackのアセットになるため、PlayableAssetクラスのサブクラスをPlayableTrackにドラッグアンドドロップすることでアセットが生成されます。

スクリプト制御するオブジェクト参照を渡す

事前準備としてPlayableAssetにPlayableTrackで扱うオブジェクト参照を保持させておきます。

Timeline再生開始時にPlayableAssetが生成され、そのタイミングでPlayableAssetクラスのCreatePlayable関数が1度呼ばれます。
その関数内で、PlayableBehaviourをnewで生成し、オブジェクトの参照を渡すというフローになります。

渡すオブジェクトが、シーン上のオブジェクトなのか、Project内のオブジェクトなのかで処理が分岐します。
Project内のオブジェクトの場合は以下のようなシリアライズ可能な状態変数を定義で実装可能です。

public GameObject projectObj;  
[SerializeField]  
GameObject projectObj2;  

シーン上のオブジェクトの場合は、Project内に存在するPlayableAssetに参照をもたせることが出来ません。
Unity5.6から追加されたExposedReferenceクラスを使って解決します。

public ExposedReference sceneObj;  

このように定義することでシーン上のオブジェクト参照を保持させることが出来ます。

Unity - Scripting API: ExposedReference

var behaviour = new TestPlayableBehaviour ();  
behaviour.sceneObj = sceneObj.Resolve (graph.GetResolver ());  

また参照をPlayableBehaviourに渡す際はこのような書式で解決します。

そろそろUnity2017のTimelineの基礎を押さえておこう_176

このようにシーン上のオブジェクト参照をアセットに渡すことが出来るようになりました。

PlayableTrackのサンプルコードを残しておきます。
PlayableTrackサンプル https://www.shibuya24.info/entry/timeline_basis · GitHub

以上の5種類のTrackがUnity2017.1.0では提供されています。

まとめ

一通り触ってみて基本機能は把握できました。
実際どう表現につなげていくか、試行錯誤シていく必要がありそうですが、今までより断然アニメーションが作りやすくなったと思います。

【Unite 2017 Tokyo】Ultimate Bowl 2017 -Timeline機能を活用したリアルタイムデモのメイキング-

↑Unite2017 Timelineを使って制作したUltimate Bowlのスライドです。

Unite 2017 Tokyoの後から見ておきたいスライドまとめ

👉 オススメ記事

2021秋 Asset Refreshセール
100以上のアセットがなんと50%OFF!!オオバもいくつか買いました!
期間 : 10月2日午後3時59分まで

👩‍💻 検証環境