こんにちは「DOTweenの教科書」執筆者のオオバです。
Unity2017.1.0で正式リリースを迎えたTimelineをそろそろちゃんと理解しようと思います。
最初に大雑把な概念図を作ってみました。
◆Timeline全体
![そろそろUnity2017のTimelineの基礎を押さえておこう_0](https://cdn-ak.f.st-hatena.com/images/fotolife/e/esakun/20170726/20170726171521.png#750__426)
◆各種Trackの中
![そろそろUnity2017のTimelineの基礎を押さえておこう_1](https://cdn-ak.f.st-hatena.com/images/fotolife/e/esakun/20170726/20170726193715.png#601__203)
- TimelineはPlayableDirectorコンポーネント、Playableオブジェクト、各種Trackで構成されている
- PlayableDirectorコンポーネントはPlayableオブジェクトの再生処理をコントロールする
- Playableオブジェクトにタイムライン自体のデータが格納されている
- 単一、複数のTrackがPlayableオブジェクトに格納され、タイムラインを構成している
- スクリプトからPlayableDirectorコンポーネントにアクセスして再生処理命令を行う
![そろそろUnity2017のTimelineの基礎を押さえておこう_2](https://cdn-ak.f.st-hatena.com/images/fotolife/e/esakun/20170726/20170726194933.png#750__251)
- 各種Track内のアセットがタイムラインを構成している
まずは手っ取り早く始める方法から。
👉DOTweenの教科書を読んでUnityアニメーションをプログラミングしてみよう!
手っ取り早くTimelineを始める
メニュー Window Timeline EditorでTimelineエディタを開きます。
ヒエラルキーの任意のGameObject (ここではTimelineRoot) を選択します。
![そろそろUnity2017のTimelineの基礎を押さえておこう_3](https://cdn-ak.f.st-hatena.com/images/fotolife/e/esakun/20170726/20170726151710.png#533__199)
するとCreateボタンが表示されるのでクリックします。
ダイアログが開き、Playableオブジェクトの命名を求められるので命名します (ここではTl.playable)。
![そろそろUnity2017のTimelineの基礎を押さえておこう_4](https://cdn-ak.f.st-hatena.com/images/fotolife/e/esakun/20170726/20170726152112.png#476__356)
ヒエラルキー上で選択済みのGameObject : TimelineRootにPlayableDirectorコンポーネントとAnimatorコンポーネントがアタッチされ、PlayableDirectorのPlayable変数にPlayableオブジェクトがアタッチされます。
これは先の概念説明時に紹介した、各種Trackの中の1つAnimationTrackをPlayableオブジェクトに追加したことになります。
![そろそろUnity2017のTimelineの基礎を押さえておこう_5](https://cdn-ak.f.st-hatena.com/images/fotolife/e/esakun/20170726/20170726172704.png#542__123)
TimelineRootの子階層に球を追加します。
![そろそろUnity2017のTimelineの基礎を押さえておこう_6](https://cdn-ak.f.st-hatena.com/images/fotolife/e/esakun/20170726/20170726173013.png#149__46)
再度TimelineRootを選択し、AnimationTrackのRecordボタンをクリックしてアニメーションを追加してみます。
![そろそろUnity2017のTimelineの基礎を押さえておこう_7](https://cdn-ak.f.st-hatena.com/images/fotolife/e/esakun/20170726/20170726173229.png#333__71)
![そろそろUnity2017のTimelineの基礎を押さえておこう_8](https://cdn-ak.f.st-hatena.com/images/fotolife/e/esakun/20170726/20170726173604.gif)
時間をシークして、球の位置を変更し、タイムラインを作っていきます。
![そろそろUnity2017のTimelineの基礎を押さえておこう_9](https://cdn-ak.f.st-hatena.com/images/fotolife/e/esakun/20170726/20170726180606.gif)
Timelineの再生ボタンでアニメーションを確認できます。
また、AnimationTrackには別途AnimationClipをドラッグアンドドロップすることも可能です。
以上がオオバなりの手っ取り早くTimelineを使う方法です。
残り4種のTrack
AnimationTrack以外のTrackを使うことで表現の幅を増やしていきます。
![そろそろUnity2017のTimelineの基礎を押さえておこう_10](https://cdn-ak.f.st-hatena.com/images/fotolife/e/esakun/20170726/20170726181309.png#202__206)
TrackはAddボタンで追加できます。
- 1.ActivationTrack
- 2.AudioTrack
- 3.ControllTrack
- 4.PlayableTrack
1.ActivationTrack
![そろそろUnity2017のTimelineの基礎を押さえておこう_11](https://cdn-ak.f.st-hatena.com/images/fotolife/e/esakun/20170726/20170726181754.png#748__34)
指定のGameObjectのActiveを切り替えるTrackです。
Activeの時にアクティブになります。
2.AudioTrack
![そろそろUnity2017のTimelineの基礎を押さえておこう_12](https://cdn-ak.f.st-hatena.com/images/fotolife/e/esakun/20170726/20170726181631.png#750__37)
名前の通りAudioClipをタイムラインに乗せて再生します。
再生確認するためには再生モードにする必要があります。エディットモード中Timelineの再生では鳴りません。
3.ControllTrack
PrefabをInstantiateしてくれるTrackです。
![そろそろUnity2017のTimelineの基礎を押さえておこう_13](https://cdn-ak.f.st-hatena.com/images/fotolife/e/esakun/20170726/20170726182027.png#448__222)
![そろそろUnity2017のTimelineの基礎を押さえておこう_14](https://cdn-ak.f.st-hatena.com/images/fotolife/e/esakun/20170726/20170726182121.png#269__212)
ControllPlayableAssetを選択肢し、ParentObjectとPrefabを設定すると、タイムラインの実行タイミングで生成され、ControllTrackが実行されたタイミングでオブジェクトはアクティブになり、ControllTrackが終了したタイミングで非アクティブになります。
Trackの再生タイミングでインスタンシエイトされるわけではありません。
![](https://i.gyazo.com/66049516dfe6467cdd6acc6a69214c4d.jpg#1920.0__1280.0)
【Unity】Prefabを生成する方法徹底解説
Prefabとは再利用可能なGameObject。Prefabは生成することで価値を発揮します。本記事ではPrefabの生成方法について徹底解説します。
4.PlayableTrack
PlayableTrackはスクリプトを実行させるTrackです。
![そろそろUnity2017のTimelineの基礎を押さえておこう_15](https://cdn-ak.f.st-hatena.com/images/fotolife/e/esakun/20170726/20170726190904.png#673__289)
PlayableBehaviourクラスとPlayableAssetクラスのサブクラスを使って実装します。
PlayableBehaviourクラスはPlayableTrackの特定タイミングにおけるイベント関数が以下のように定義されています。
- OnGraphStart・・・タイムライン開始時実行
- OnGraphStop・・・タイムライン停止時実行
- OnBehaviourPlay・・・PlayableTrack再生時実行
- OnBehaviourPause・・・PlayableTrack停止時実行
- PrepareFrame・・・PlayableTrack再生時毎フレーム実行
この関数内に任意の処理を書くことが出来ます。
特定のタイミングにおけるオブジェクトの操作、挙動を処理させるクラスです。
![そろそろUnity2017のTimelineの基礎を押さえておこう_16](https://cdn-ak.f.st-hatena.com/images/fotolife/e/esakun/20170726/20170726195735.gif)
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の基礎を押さえておこう_17](https://cdn-ak.f.st-hatena.com/images/fotolife/e/esakun/20170726/20170726202354.gif)
このようにシーン上のオブジェクト参照をアセットに渡すことが出来るようになりました。
PlayableTrackのサンプルコードを残しておきます。
PlayableTrackサンプル https://www.shibuya24.info/entry/unity-timeline · GitHub
以上の5種類のTrackがUnity2017.1.0では提供されています。
まとめ
一通り触ってみて基本機能は把握できました。
実際どう表現につなげていくか、試行錯誤シていく必要がありそうですが、今までより断然アニメーションが作りやすくなったと思います。
【Unite 2017 Tokyo】Ultimate Bowl 2017 -Timeline機能を活用したリアルタイムデモのメイキング-
↑Unite2017 Timelineを使って制作したUltimate Bowlのスライドです。
Unite 2017 Tokyoの後から見ておきたいスライドまとめ
![](https://i.gyazo.com/0a49a2c4b19dbf171e72fb186699cb3e.jpg#1920.0__1280.0)
この記事が気に入ったらフォローしよう
- Unity2017.1.0f1