CrossRoad

AR、MR、VR、Babylon.jsを中心とした技術ブログ。 If you're non-Japanese native guys, check "English" category.

【Unity2018.2.14f1で更新中】Timelineの基本機能とCinema Directorとの違い



Unity2018での変更点を更新中です
2018/11/21 「3.準備」のTimelineの開き方、「4-2. Animation Track」の使い方を加筆修正しました

Unity2017になってタイムライン機能が追加されました。通常のUnityの処理ではソースコードベースでシーンを制御するのに対して、タイムラインを使うとシーケンスベースでシーンを制御できます。

便利なのですが、ざっと試した感じではタイムラインには色々癖があります。また、Unityのバージョン変化に伴う仕様変更が多く、公開されている情報と異なっている場合もありました。

そこで、今回はUnity2017.2.0f3時点でのタイムラインの概要と、類似機能で有名なアセット「Cinema Director」との違いを整理してみました。

また、タイムラインを使った例を下記に書きましたので、こちらもよろしければご参考ください。
UnityのTimelineで逃げ恥OP風シーンを作りました - CrossRoad



1. タイムラインの概要

公式ページにはこのように書かれています。

Unity公式HPでのタイムライン機能の紹介

タイムライン - Unity マニュアル

Unity公式HPでのタイムラインの概要

2つめの画像のように、右方向が時間で、各Gameobjectに実行させたい処理を並べていきます。もしスクリプトだけで作る場合、3秒経過したら敵を表示し、4.58秒後に爆発、、のようなことを全部書いてくことになります。不可能ではないですが、とても時間がかかります。

タイムラインを使えば、原則必要な処理をタイミングに合わせて並べていけばよいので、複雑な処理を作りたいときにとても効果的です。従来のスクリプト処理も混ぜられるので、「このタイミングでこのメソッドを呼ぶ」ができます。

2. 楽にできること、できるけど少し面倒なこと、できないこと

タイムラインがどんなものかを早期把握するため、タイトルのような観点で整理しました。

楽にできること

  • 任意のタイミング、期間でこれらが可能
  • Gameobjectを表示/非表示
  • Prefabを表示/非表示
  • 既存のAnimation Clipを再生
  • Audioを再生、停止

できるけど少し面倒なこと(慣れが必要)

  • 任意のタイミングで自分の作ったスクリプトのメソッドを呼ぶ
  • GameobjectのPosition(x,y,z)、Rotation(x,y,z)、Scale(x,y,z)を変化させてオリジナルのAnimationClipを作る
  • タイムラインの開始そのものをスクリプトから実行(例えば、キーボード入力をしたらタイムラインが開始する)

できないこと

  • 完成したシーンを動画出力する



(2018/11/21追記)
Timeline機能ではできませんが、Unity公式アセットの「Recorder」を併用することで動画出力が可能になりました。

Recorderの使い方はすでにいくつか公開されているのでここでの説明は省略します。Quick Time Player、PremiereなどAdobe系製品を使う場合と異なる便利さがありそうであれば、別途調査結果をまとめようと思います。


できることのやり方については後述します。


3. 準備

まずは空のGameObjectを生成し、Timeline など、あとでわかりやすい名前をつけ、Window / Sequencing / Timelineを選択します。

表示されたタブをタイムラインエディタと呼びます。次に、先ほど作った"Timeline"という空のGameobjectを選択した状態で(①)Createをクリックします(②)。

Unityタイムラインのcreate

すると、playableという拡張子のファイルが新規生成されます。保存場所を聞かれるので、ファイルの名前と保存場所を指定します。

ここでは、TimelineTimeline.playableというファイルを、Assets/MyWork/Timelineというフォルダに保存しました。

Unityタイムライン機能で生成したplayableファイルの保存画面

ここまで進めると、先ほど作った空の"Timeline" GameobjectにPlayable DirectorとAnimator コンポーネントが追加されます。
Unityタイムライン機能で生成されたPlayable DirectorとAnimator コンポーネント
今回調べた範囲ではこれらを変更することはありませんでした。

また、このようにタイムラインエディタが表示されます。赤枠のTimelineオブジェクトは右クリックで削除します。

Unityタイムラインエディタ

以上の準備により、"Timeline"という名前のGameobjectを起点としてタイムライン制御ができる状態になりました。以後、タイムラインエディタウインドウは、Hierarchy Viewで"Timeline"Objectを選択したときだけ表示されます。

4. 代表的な5つの機能と使い方

タイムラインエディタを表示させると、5種類のトラックを選択できるようになります。

Unityタイムラインの5種類のトラック

トラックとは、タイムラインエディタの行に相当するものです。どこまでを機能と呼ぶかは定義が分かれますが、今回、この5つのトラックを代表的な機能と位置づけ、使い方を解説します。

4-1. Activation Track

オブジェクトの表示、非表示に関するものです。タイムラインに表示すると、このようになります。

Unityタイムラインに表示したActivation Track

ここの「Active」をクリップといいます。このクリップはマウス操作で長さや位置を変更できます。トラック部分に任意のGameobjectをアタッチすると、Activeクリップの範囲だけ表示させることができます。

こうなります。ちょうどメタセコイアの練習をしていたので、そこで作ったドーナツの3Dモデルを使っています。

クリップを2つにするには、タイムライン上で右クリックし、「Add Activation Clip」を選択します。



4-2. Animation Track

オブジェクトのAnimationに関するものです。タイムラインに表示すると、このようになります。

Unityタイムラインに表示したAnimation Track

ここでのクリップは、UnityのAnimationClipです。そのため、Animation Clip付きのキャラクターモデルであれば任意のAnimation Clipを簡単に再生できます。

クリップ同士をくっつけるようにドラッグすると、クリップの切り替わりにtransitionを入れることができます。
(動画ではtransitionを入れています)

Animation Clipがないモデル、たとえば今回のドーナツの場合ではPosition、Rotation、Scaleを制御できます。その方法を説明します。

まず、No (Animator)という部分にGameobjectをドラッグします。"Create Animator on donut(オブジェクト名)"という表示が出るのでクリックし、Animator コンポーネントを追加します。この後、自分でAnimation Clipを作ります。

自分でAnimation Clipを作るには、トラックにある赤いボタンを押します。すると、クリップ部分でRecordingという表示が出ます。

UnityタイムラインのAnimation TrackのRecording画面

Recording...の状態のときに、オブジェクトのInspectorを表示します。変化させたいパラメータをマウスドラッグして少し動かしてから、Timelineウインドウの赤いボタンを押してRecording..を止めます。たとえば、Positionのパラメータをドラッグすると、Positionという表示が増えます。

UnityタイムラインのAnimation TrackのPosition

Position.yを例に説明します。 Position.yを選択して、シーケンスと垂直の白色の線を動かします。動きを与えたい秒数(白い線の位置)でダブルクリックします。

Unity2018のtimeline Animation Trackのキーフレーム追加後画面

すると、点が1つ増えます。この点を自由にドラッグすることで、その瞬間のパラメータを調整できます。

(Unity2017では右クリックして「Add Key」というボタンを押すことでキーフレームを生成していました)

上記の操作を繰り返すとタイムラインにグラフができます。この点に沿ってオブジェクトを動かすことができます。

動きをつけたら、Covert To Clipでアニメーションクリップに変換します。

UnityタイムラインのConvert To Clip

Animation Clipにした後はタイムライン上で、クリップの長さや位置を自由に変更できます。

UnityタイムラインでAnimation Clipに変更した後の調整

また、上の赤枠のように、Animation Clipの中で先程のkeyを制御することもできます。




(2018/11/21 追記)

Animation Trackは汎用性が高く、Recording...の間にInspectorでマウスドラッグさせるパラメータは大抵制御できます。
たとえば、従来だとC#で自分で書くか、iTweensが必要だったオブジェクトのフェードイン、アウトも、マテリアルの簡単に設定できます。

以下はsphereをフェードアウトさせる例です。マテリアルのRendering ModeをFadeにして、Recording中にマテリアルのAlbedoの色パレットのパラメータをドラッグします。

Unity2018のマテリアルでRendering modeをfadeに設定する画面

このようにmaterial.colorの調整ができるようになります。

Unity2018 timeline機能でcolor調整をする例

あとはAnimation Trackでキーフレームを設定すると、このようにフェードアウトを実現できます。


4-3. Audio Track

音楽の再生、停止に関するものです。タイムラインに表示すると、このようになります。

UnityタイムラインのAudio Track

タイムラインの時間軸部分に適当なAudio Clip(音楽ファイル)をドラッグすると、4-1 Activation TrackのときのようにAudio Clipをタイムラインで並べることができます。

UnityタイムラインのAutio Clip追加後

オーディオの再生確認ですが、Unity のPlayボタンを押すと確認できます。Timeline Editor上の再生マークを押しても再生されませんでした。
(Audio Source コンポーネントをMain Cameraにアタッチしてみましたが同様です)

ちなみに、今回のテストではこちらより音源をダウンロードさせていただきました。




4-4. Control Track

Prefabの表示、非表示に関するものです。タイムラインに表示すると、このようになります。
UnityタイムラインのControl Track

機能としては4-1. Activation Trackに似ています。ただ、clipの準備手順が少し異なります。右クリックで、Control Playable Assetというクリップを生成します。

UnityタイムラインのControl Playable Asset

このアセットのInspectorに表示したいPrefabをドラッグします。

UnityタイムラインのControl Playable AssetでPrefabをドラッグ

あとはClipの長さと位置を調整します。右クリックしてDuplicateを選択すれば、Clipを増やすことができます。

4-5. Playable Track

スクリプト制御に関するものです。タイムラインに表示すると、このようになります。

UnityタイムラインのPlayable Track

スクリプトの制御をタイムラインに伝えるには、Playable Assetという仕組みを挟む必要があります。簡単化したイメージです。

UnityタイムラインのPlayable Trackを使うイメージ

Playable AssetとPlayable Behaviourはどちらもスクリプトです。また、どちらもテンプレートがあるのでそこから作ると手間が省けます。

UnityタイムラインのPlayable AssetとPlayable Behaviour生成

まずは上記テンプレートで2つのスクリプトを作ります。ここでは、donut_Asset.csとdonut_behaviour.csを作りました。donut_Asset.csを作ったことで、タイムライン上で右クリックでclipの形で追加できるようになります。

UnityタイムラインのPlayable Trackにdonut_Assetを追加する

UnityタイムラインのPlayable Trackにdonut_Assetを追加した後のタイムライン
次にスクリプトです。donut_asset.csには、ExposedReferenceを入れて、donut_behaviour.csとのつなぎを作ります。

ExposedReferenceについては、下記のブログに説明があります。(ExposedReferenceで検索してみてください)

【Unity】Timelineで字幕を表示する - テラシュールブログ

Playable Assetはこう書きました。


gista3a4b8aa016580f54ed8d6c498860770

次に、Playable Behaviourです。


gist9c95c0aab120cb0c89acffde882cc9aa

実行するとこうなります。



5. Cinema Directorとの違い

以前、Unity Asset Storeで公開されているCinema Directorの使い方をまとめたことがあります。

Unityで動画編集ができるアセットCinema Director の概要とTips紹介 - CrossRoad

そのときの経験から、Cinema Directorとの違いを整理しました。まずはCinema Directorにだけあるものです。

Add Global Trackによって、シーン全体の制御ができる

Cinema DirectorのAdd Global Track

シーン全体のBGM再生、再生速度などを制御できます。

Cameraオブジェクト専用のTrackがある

Cinema DirectorのCameraオブジェクト専用Track

Unityのタイムラインでは別のカメラワークに切り替える場合、トラックを別に作る必要があります。カメラを切り替えることが多い場合はCinema Directorの方が便利そうです。

画面全体のトランジションができる

このように、トランジションの設定ができます。

Cinema Directorのトランジション設定

Cinema Directorのトランジション例

再生中のスクリーンショットを撮れる「Storyboard」という機能がある

Cinema DirectorのStoryboard

このように、タイムライン上に「くさび」を入れるだけです。Assetsフォルダに画像が生成されます。

それ以外の機能は、タイムラインでもCinema Directorでも実現できます。手順は多少異なりますが、あとは好みの問題かと思います。

参考にさせていただいたサイト

タイムライン - Unity マニュアル

【Unity】Timelineで敵の”出現タイミング”や”動き”を制御してみる - テラシュールブログ

Unity2017のTimelineをやってみた – てっくぼっと!

【Unity】Timelineで敵の”出現タイミング”や”動き”を制御してみる - テラシュールブログ

そろそろUnity2017のTimelineの基礎を押さえておこう - 渋谷ほととぎす通信

【Unity】Timelineエディタでムービーを作ってみた - おもちゃラボ

システム音・電子音 -フリー効果音素材 くらげ工匠

Unity5のStandardシェーダのパラメタをスクリプトからいじろうとして丸一日潰れた話 - D.N.A.のおぼえがき
(ここのコードはmaterialsではなく、sharedmaterialsにする必要があります)

Instantiating material due to calling renderer.material during edit mode. - Unity Answers

7. 終わりに

ちょうど動画編集をする予定があったので、少し調べてみました。タイムライン機能を使えば他にも色々なことができそうなので、変わった使い方を見つけたらまた紹介できればと思います。