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

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

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

◆Timeline全体

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

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

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

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

この記事の内容

手っ取り早くTimelineを始める

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

残り4種のTrack

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

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

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

1.ActivationTrack

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

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

2.AudioTrack

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

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

3.ControllTrack

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

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

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

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

4.PlayableTrack

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

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

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

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

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

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

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

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

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

👉 年収UP率93.8% / 平均年収UP額126万円のエンジニア転職サイト【転職ドラフト】

まとめ

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

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

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

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

オススメ記事
検証環境