Bard は楽して暮らしたい

ゲームを作って思うこと、ゲームを遊んで思うこと

Unity

【Unity】Timeline 機能 Playable Track 用のスクリプトを書く際の基礎

投稿日:

最近 Unity の Timeline 機能について触れる機会が多く、基礎的な部分について社内 Wiki に情報を書いたりしていたので、コピペ的に再利用してまとめておきます。

 

試行環境:Unity 2017.4.10f1

 

参考リンク

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

Playable Track の使い方についても、詳しく解説されています。

身もふたもない話ですが、だいたいこのページを見ておけば最初の一歩はわかると思います。

Track の種類

Timeline の Track

  • Activation Track (対象オブジェクトの アクティブ化/非アクティブ化)
  • Animation Track (対象オブジェクトの モーション制御/移動/回転など)
  • Audio Track (オーディオ制御)
  • Control Track (オブジェクトの生成)
  • Playable Track (スクリプト処理)

グラフィック方面の人が扱うような、配置したオブジェクトに対する直感的な操作に関しては、主に上3つを使用することになるかと思います。

プログラマが書いたコードを使用するのは、主に『Playable Track』です。

Playable Track』で使用できるスクリプトを記述するためには、『PlayableAsset』と『PlayableBehaviour』というクラスを継承したクラスを作成するのが良いです。

PlayableAsset

PlayableAsset – Unity スクリプトリファレンス

PlayableAssetを継承したクラスの cs ファイルを、Timeline ウインドウに ドラッグ&ドロップ することで、このクリップを持った『Playable Track』を作成することができます。

(既に存在する『PlayableTrack』内に持っていった場合は、トラック内にクリップが追加されます)。

クリップをクリックすることで、『Inspector ビュー』 にはこのクラスの情報が表示され、[SerializeFIeld] 指定の変数の設定などが可能です。

注意しなければいけない点として、 シーン内(Hierarchy 上)に存在するGameObjectを変数に格納したい場合は、入れ物となる変数を『GameObjectではなくExposedReference<GameObject>として定義しなければなりません。

PlayableBehaviour

Unity – Scripting API: PlayableBehaviour

クリップに関する、時間経過に応じた挙動を制御するクラスで、様々な既定の関数を持ちます。

  • OnGraphStart(タイムライン全体の開始時に走る処理)
  • OnGraphStop(タイムライン全体の終了時に走る処理)
  • OnBehaviourPlay (クリップに入った時に走る処理)
  • OnBehaviour (クリップを抜ける時に走る処理)
  • ProcessFrame (クリップ内で毎フレーム走る処理)

継承先クラスでこれらの中身を埋めることで、適切なタイミングで処理を走らせてくれます

このクラスに『Inspector ビュー』で指定した[SerializeField]変数を持っていきたい場合、 『PlayableAsset継承クラスを経由して受け渡しする形になります。

具体的には、このような形で『PlayableAsset』『PlayableBehaviourそれぞれの継承クラスを作成することで、受け渡しが可能です。


using UnityEngine;
using UnityEngine.Playables; // 宣言しておくと便利.

public class PlayableAssetSample : PlayableAsset
{
    [SerializeField]
    public int mIntSample; // クリップをクリックした際に, Inspector ビューで指定可能.
    [SerializeField]
    public ExposedReference mGameObjectSample; // シーン中のオブジェクトを指定する際は, この形.

    // PlayableAsset を継承した場合, この関数を定義する.
    public override Playable CreatePlayable(PlayableGraph graph, GameObject game_object)
    {
        // PlayableBehaviour に, 入力値を引き渡す.
        PlayableBehaviourSample behaviour = new PlayableBehaviourSample();
        behaviour.IntSample = mIntSample;
        behaviour.GameObjectSample = mGameObjectSample.Resolve(graph.GetResolver());

        return ScriptPlayable.Create(graph, behaviour);
    }

}

using UnityEngine;
using UnityEngine.Playables; // 宣言しておくと便利.

public class PlayableBehaviourSample : PlayableBehaviour
{
    // PlayableAsset から引き渡す.
    private int mIntSample;
    public int IntSample { set { mIntSample = value; } }
    private GameObject mGameObjectSample;
    public GameObject GameObjectSample { set { mGameObjectSample = value; } }

    public override void OnGraphStart(Playable playable)
    {
        // Timeline 全体の開始時に走らせる処理.
    }

    public override void OnGraphStop(Playable playable)
    {
        // Timeline 全体の終了時に走らせる処理.
    }

    public override void OnBehaviourPlay(Playable playable, FrameData info)
    {
        // クリップに入った時に走らせる処理.
    }

    public override void OnBehaviourPause(Playable playable, FrameData info)
    {
        // クリップを抜ける際に走らせる処理.
    }

    public override void PrepareFrame(Playable playable, FrameData info)
    {
        // クリップ内で毎フレーム走らせる処理.
    }

}

 

 

© Unity Technologies Japan/UCL

-Unity

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

関連記事

BitSummit Vol.6

【ゲーム雑記】BitSummit Vol.6 を経て、期待のインディーゲーム一覧 前編

少し間が空いてしまいましたが、先月、京都で開催された BitSummit Vol.6 へ行ってきました。 その中で、プレイしたタイトルの感想や、未プレイながら目を引いたタイトルの紹介をしていきたいと思 …

Playmaker

【Unity】講演紹介:2017年の注目アセット100連発 by 常名 隆司 さん(ユニティ・テクノロジーズ・ジャパン合同会社)

今回は、Unite 2017 の講演紹介です。 注目アセットを紹介する講演を紹介する記事です。 目次講演動画スライド内容紹介006: Playmaker015: Behavior Designer09 …

BitSummit Vol.6

【ゲーム雑記】BitSummit Vol.6 を経て、期待のインディーゲーム一覧 後編

少し間が空いてしまいましたが、先月、京都で開催された BitSummit Vol.6 へ行ってきました。 その中で、プレイしたタイトルの感想や、未プレイながら目を引いたタイトルの紹介をしていきたいと思 …

【Unity】Rigidbody や Collider の設定により変化する、当たり判定の性質 前編

Unity の機能の中でも、基礎中の基礎とも言える Collision。 参考書の通りにやれば、物理演算に基づいたそれらしい挙動は作れるのですが、実際のところ『Rigidbody』や『Collider …

【Unity】Unity 2017 で TextMesh Pro を使って作成したプロジェクトを Unity 2018 へ移行する際のエラー対策リンクまとめ

Unity 2017 で作成したプロジェクトを Unity 2018 へ移行すると、TextMesh Pro まわりでいろいろとエラーが出たので、そのときに参考にさせていただいた記事のリンク集です。 …