はなちるのマイノート

Unityをメインとした技術ブログ。自分らしくまったりやっていきたいと思いますー!

【Unity】Timelineで使うPlayable Directorコンポーネントについて

Unityのバージョン Unity2018.3.9f1

はじめに

今回はTimelineで使われるPlayableDirectorコンポーネントのプロパティについての記事になります!

Timelineを再生する上でPlayableDirectorコンポーネントがアタッチされていることが必須です。

f:id:hanaaaaaachiru:20190521215509p:plain

なので、Timelineを上手く操るにはPlayableDirectorの知識は大切といえるででしょう。

ということで、早速みていきましょう!

そもそもPlayableDirectorコンポーネントとは?

公式のドキュメントにはこのように書かれていました。

Playable Director コンポーネントは、タイムラインインスタンスとタイムラインアセットの間のリンクを格納します。Playable Director コンポーネントは、いつタイムラインインスタンスを再生するか、どのようにタイムラインインスタンスがその時計を更新するか、および、タイムラインインスタンスが再生を終了したとき何を発生させるかを制御します。

Playable Director コンポーネント - Unity マニュアル

タイムラインアセットタイムラインインスタンスというのはTimelineにおいて重要な考え方なのですが、とりあえずそれを置いておいて簡単にまとめると、いつ再生を開始するか、いつどの時点で再生を進めるかを制御するということです。

ちなみにタイムラインアセットはProjectビューに表示されているアセットのことで、トラックとクリップの設定を保存します

f:id:hanaaaaaachiru:20190521220128p:plain

タイムラインインスタンスは実際にHierarchyビューに配置されるもののことで、タイムラインアセットを使ってシーンのゲームオブジェクトをアニメーション化する役割を持ちます。

PlayableDirectorコンポーネントはこれら二つを繋ぐ架け橋のようなものといえるかもしれませんね。

プロパティの説明

プロパティというのは、Inspectorビューに表示されるパラメータのことです。

ただUnityの公式でこのように表現されているのですが、正直C#のプロパティとなにか関係があるのかはよく分かっていません・・・。

余談はおいておいて、PlayableDirectorコンポーネントには5つ(7つ)のプロパティを持ちます。

プロパティ名 意味
Playable タイムラインアセットとシーンのゲームオブジェクトを関連づける
Update Method タイムラインインスタンスがそのタイミングを更新するために使用するクロックソースを設定する
Play on Awake ゲームプレイを開始するときにタイムラインインスタンスを再生するかどうか
Wrap Mode タイムラインインスタンスが再生を終了するときの動作
Initial Time タイムラインインスタンスが再生を開始する時間 (秒)

一つ一つみてみましょう。

Playable

PlayableDirectorコンポーネントを手動でアタッチした場合は関連づけたいタイムラインアセットを選択します。

この操作によってただのゲームオブジェクトが選択したタイムラインアセットのタイムラインインスタンスにすることができます。

また、Timeline Edotorから作成した場合は自動的に設定してくれます。

f:id:hanaaaaaachiru:20190521231733p:plain

Update Method

タイムラインインスタンスがそのタイミングを更新するために使用するクロックソースを設定することができます。

クロックソースというのは、なんの時間を基準に再生速度を決めるかを設定するものです。

基本はGame Timeで良いと思います。

クロックソースの種類 意味
DSP 正確なオーディオスケジューリングのサンプルを選択します。これを選択すると、タイムラインインスタンスは、オーディオを処理するのと同じクロックソースを使用します。DSP はデジタル信号処理の略です。
Game Time ゲームクロックと同じクロックソースを使用する場合に選択します。このクロックソースは タイムスケール の影響を受けます。
Unscaled Game Time ゲームクロックと同じクロックソースを使用する場合に選択します。ただし、タイムスケール の影響は受けません。
Manual クロックソースを使用せず、スクリプトを使用してクロック時間を手動で設定する場合に選択します。

Playable Director コンポーネント - Unity マニュアル

f:id:hanaaaaaachiru:20190521234702p:plain

Play on Awake

ゲームプレイを開始した(再生ボタンを押した)ときに自動で再生するかを設定します。

チェックがついていれば、自動で再生されるというわけですね。

f:id:hanaaaaaachiru:20190521234456p:plain

Wrap Mode

Wrap Modeには3つの種類があります。

名前 意味
Hold タイムラインインスタンスを 1 回再生し、再生が中断されるまで最後のフレームを維持します。
Loop 再生が中断されるまで、シーケンスを繰り返し再生します。
None シーケンスを 1 回再生し、アニメーション化したすべてのプロパティーを再生前の値にリセットします。

これらによって再生が終わったときにどうするかを設定できます。

みたかんじPing Pongはないみたいですね。

f:id:hanaaaaaachiru:20190521234543p:plain

Initial Time

再生するのに何秒待ってから再生をするかを設定することができます。

基本は0で良いのではないでしょうか。

f:id:hanaaaaaachiru:20190521234606p:plain

スクリプトから再生する方法

Play On Awake以外にもスクリプトから再生する方法もあります。

こちらの方を用いたい場合も多いと思うので、一応紹介をしてこの記事を終わりたいと思います。

using UnityEngine;
using UnityEngine.Playables;    //これを忘れずに追加する

public class TimelineTest : MonoBehaviour
{
    [SerializeField] private PlayableDirector _director;

    private void Start()
    {
        _director.Play();
    }
}

さいごに

とりあえず主要なプロパティを紹介してみました。

実は条件に応じてCurrent TimeBindingsというプロパティが表示されるのですが、正直さほど重要ではないので割愛させていただきました。

もし気になる方は、是非公式のマニュアルを見てみてください!