Unity2018での変更点を更新中です
2018/11/21 「3.準備」のTimelineの開き方、「4-2. Animation Track」の使い方を加筆修正しました
Unity2017になってタイムライン機能が追加されました。通常のUnityの処理ではソースコードベースでシーンを制御するのに対して、タイムラインを使うとシーケンスベースでシーンを制御できます。
便利なのですが、ざっと試した感じではタイムラインには色々癖があります。また、Unityのバージョン変化に伴う仕様変更が多く、公開されている情報と異なっている場合もありました。
そこで、今回はUnity2017.2.0f3時点でのタイムラインの概要と、類似機能で有名なアセット「Cinema Director」との違いを整理してみました。
また、タイムラインを使った例を下記に書きましたので、こちらもよろしければご参考ください。
UnityのTimelineで逃げ恥OP風シーンを作りました - CrossRoad
- 1. タイムラインの概要
- 2. 楽にできること、できるけど少し面倒なこと、できないこと
- 3. 準備
- 4. 代表的な5つの機能と使い方
- 5. Cinema Directorとの違い
- 参考にさせていただいたサイト
- 7. 終わりに
1. タイムラインの概要
公式ページにはこのように書かれています。
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をクリックします(②)。
すると、playableという拡張子のファイルが新規生成されます。保存場所を聞かれるので、ファイルの名前と保存場所を指定します。
ここでは、TimelineTimeline.playableというファイルを、Assets/MyWork/Timelineというフォルダに保存しました。
ここまで進めると、先ほど作った空の"Timeline" GameobjectにPlayable DirectorとAnimator コンポーネントが追加されます。
今回調べた範囲ではこれらを変更することはありませんでした。
また、このようにタイムラインエディタが表示されます。赤枠のTimelineオブジェクトは右クリックで削除します。
以上の準備により、"Timeline"という名前のGameobjectを起点としてタイムライン制御ができる状態になりました。以後、タイムラインエディタウインドウは、Hierarchy Viewで"Timeline"Objectを選択したときだけ表示されます。
4. 代表的な5つの機能と使い方
タイムラインエディタを表示させると、5種類のトラックを選択できるようになります。
トラックとは、タイムラインエディタの行に相当するものです。どこまでを機能と呼ぶかは定義が分かれますが、今回、この5つのトラックを代表的な機能と位置づけ、使い方を解説します。
4-1. Activation Track
オブジェクトの表示、非表示に関するものです。タイムラインに表示すると、このようになります。
ここの「Active」をクリップといいます。このクリップはマウス操作で長さや位置を変更できます。トラック部分に任意のGameobjectをアタッチすると、Activeクリップの範囲だけ表示させることができます。
こうなります。ちょうどメタセコイアの練習をしていたので、そこで作ったドーナツの3Dモデルを使っています。
クリップを2つにするには、タイムライン上で右クリックし、「Add Activation Clip」を選択します。
4-2. Animation Track
オブジェクトのAnimationに関するものです。タイムラインに表示すると、このようになります。
ここでのクリップは、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という表示が出ます。
Recording...の状態のときに、オブジェクトのInspectorを表示します。変化させたいパラメータをマウスドラッグして少し動かしてから、Timelineウインドウの赤いボタンを押してRecording..を止めます。たとえば、Positionのパラメータをドラッグすると、Positionという表示が増えます。
Position.yを例に説明します。 Position.yを選択して、シーケンスと垂直の白色の線を動かします。動きを与えたい秒数(白い線の位置)でダブルクリックします。
すると、点が1つ増えます。この点を自由にドラッグすることで、その瞬間のパラメータを調整できます。
(Unity2017では右クリックして「Add Key」というボタンを押すことでキーフレームを生成していました)
上記の操作を繰り返すとタイムラインにグラフができます。この点に沿ってオブジェクトを動かすことができます。
動きをつけたら、Covert To Clipでアニメーションクリップに変換します。
Animation Clipにした後はタイムライン上で、クリップの長さや位置を自由に変更できます。
また、上の赤枠のように、Animation Clipの中で先程のkeyを制御することもできます。
(2018/11/21 追記)
Animation Trackは汎用性が高く、Recording...の間にInspectorでマウスドラッグさせるパラメータは大抵制御できます。
たとえば、従来だとC#で自分で書くか、iTweensが必要だったオブジェクトのフェードイン、アウトも、マテリアルの簡単に設定できます。
以下はsphereをフェードアウトさせる例です。マテリアルのRendering ModeをFadeにして、Recording中にマテリアルのAlbedoの色パレットのパラメータをドラッグします。
このようにmaterial.colorの調整ができるようになります。
あとはAnimation Trackでキーフレームを設定すると、このようにフェードアウトを実現できます。
4-3. Audio Track
音楽の再生、停止に関するものです。タイムラインに表示すると、このようになります。
タイムラインの時間軸部分に適当なAudio Clip(音楽ファイル)をドラッグすると、4-1 Activation TrackのときのようにAudio Clipをタイムラインで並べることができます。
オーディオの再生確認ですが、Unity のPlayボタンを押すと確認できます。Timeline Editor上の再生マークを押しても再生されませんでした。
(Audio Source コンポーネントをMain Cameraにアタッチしてみましたが同様です)
ちなみに、今回のテストではこちらより音源をダウンロードさせていただきました。
4-4. Control Track
Prefabの表示、非表示に関するものです。タイムラインに表示すると、このようになります。
機能としては4-1. Activation Trackに似ています。ただ、clipの準備手順が少し異なります。右クリックで、Control Playable Assetというクリップを生成します。
このアセットのInspectorに表示したいPrefabをドラッグします。
あとはClipの長さと位置を調整します。右クリックしてDuplicateを選択すれば、Clipを増やすことができます。
4-5. Playable Track
スクリプト制御に関するものです。タイムラインに表示すると、このようになります。
スクリプトの制御をタイムラインに伝えるには、Playable Assetという仕組みを挟む必要があります。簡単化したイメージです。
Playable AssetとPlayable Behaviourはどちらもスクリプトです。また、どちらもテンプレートがあるのでそこから作ると手間が省けます。
まずは上記テンプレートで2つのスクリプトを作ります。ここでは、donut_Asset.csとdonut_behaviour.csを作りました。donut_Asset.csを作ったことで、タイムライン上で右クリックでclipの形で追加できるようになります。
次にスクリプトです。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によって、シーン全体の制御ができる
シーン全体のBGM再生、再生速度などを制御できます。
Cameraオブジェクト専用のTrackがある
Unityのタイムラインでは別のカメラワークに切り替える場合、トラックを別に作る必要があります。カメラを切り替えることが多い場合はCinema Directorの方が便利そうです。
画面全体のトランジションができる
このように、トランジションの設定ができます。
再生中のスクリーンショットを撮れる「Storyboard」という機能がある
このように、タイムライン上に「くさび」を入れるだけです。Assetsフォルダに画像が生成されます。
それ以外の機能は、タイムラインでもCinema Directorでも実現できます。手順は多少異なりますが、あとは好みの問題かと思います。
参考にさせていただいたサイト
■【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