渋谷ほととぎす通信

「Unityをわかりやすく」初心者のためのゲーム作りブログ

【Unity】Timeline拡張に必須!3つのアトリビュート

【Unity】Timeline拡張に必須!3つのアトリビュート

こんにちは「DOTweenの教科書」執筆者のオオバです。

Unity Timelineに独自のトラックやクリップを作りたくなるときがあります。ただし Unity Timelineの拡張と聞くと難しく感じる かもしれません。しかしポイントさえ抑えれば意外と簡単です。

そこで本記事では、Unityタイムラインを拡張するときに必須のアトリビュートを3つ紹介します。これらを抑えておくことでスムーズにタイムラインを拡張できます。ぜひ最後まで読んでみてください。

👉DOTweenの教科書を読んでUnityアニメーションをプログラミングしてみよう!

Unity Timeline拡張で覚えておきたい3つのアトリビュート

結論から話すと、Unity Timelineを拡張するときに覚えておきたいアトリビュートは次の3つです。

UnityのTimeline拡張で覚えておきたい3つのアトリビュート

①TrackBindingType

②TrackClipType

③DisplayName

1つずつ詳しく解説してきます。

①「TrackBindingType」バインドの型指定

最初に紹介するのは「TrackBindingType」アトリビュートです。 TrackBindingTypeアトリビュートはTrackにバインドする型を指定できます。

【Unity】Timeline拡張に必須!3つのアトリビュート_0

次のようにTrackBindingTypeアトリビュートが未設定のTrackはオブジェクトをバインドすることができません。

【Unity】Timeline拡張に必須!3つのアトリビュート_1

必要なTrackだけに設定しましょう。

では、TrackBindingTypeの具体的な実装方法を解説します。次のようにカスタムTrackクラスのアトリビュートとして記述します。

[TrackBindingType(typeof(Image))]  
public class CustomTrack : TrackAsset  
{
    // ~~~ 略 ~~~  
}

上記のサンプルコードはImageクラスをバインドする型として指定しました。もし、GameObject型をバインドしたい場合は typeof(Image)typeof(GameObject) に変更してみてください。

バインドしたインスタンスの取得方法

TrackBindingTypeで指定した型のインスタンス(バインドしたインスタンス)は、 カスタムTrackクラス内で取得 できます。以下のソースコードを見てみましょう。

[TrackBindingType(typeof(Image))]  
public class CustomTrack : TrackAsset  
{
    protected override Playable CreatePlayable(PlayableGraph graph, GameObject gameObject, TimelineClip clip)  
    {
        var target = gameObject.GetComponent<PlayableDirector>().GetGenericBinding(this) as Image;  
        if (target != null) {  
            // バインドされたオブジェクトを取得できた場合  
        }else{  
            // バインドされたオブジェクトを取得できなかった場合  
        }
    }
}

TrackAssetの CreatePlayable メソッド内でPlayableDirectorの GetGenericBinding メソッドを使って取得できます。

②「TrackClipType」クリップの型指定

「TrackClipType」アトリビュートはトラックに追加できるクリップの型を指定することができます。

【Unity】Timeline拡張に必須!3つのアトリビュート_2

次のソースコードのようにカスタムTrackクラスのアトリビュートとして設定します。

[TrackClipType(typeof(CustomClip))]  
public class CustomTrack : TrackAsset  
{
    // ~~~ 略 ~~~  
}

このサンプルは CustomClip クラスをクリップとして指定するコードです。クリップをカスタムする場合は PlayableAssetクラスを継承 します。

カスタムClipを作る上で、Clipの挙動を定義するカスタムBehaviourもセットで必要です。カスタムClip、カスタムBehaviourは次のコードになります。

💻ソースコード : CustomClip
using UnityEngine;  
using UnityEngine.Playables;  
// カスタムClipはPlayableAssetを継承する  
public class CustomClip : PlayableAsset  
{
    public override Playable CreatePlayable(PlayableGraph graph, GameObject owner)  
    {
        ScriptPlayable<CustomBehaviour>.Create(graph);  
    }
}

カスタムClipは PlayableAsset クラスを継承して作成します。

💻ソースコード : CustomBehaviour
using UnityEngine;  
using UnityEngine.Playables;  
// カスタムClipはPlayableAssetを継承する  
public class CustomClip : PlayableAsset  
{
    public override Playable CreatePlayable(PlayableGraph graph, GameObject owner)  
    {
        ScriptPlayable<CustomBehaviour>.Create(graph);  
    }
}

カスタムBehaviourは PlayableBehaviour クラスを継承して作成します。カスタムClip、カスタムBehaviour共に最小限の実装です。

このようにTrackClipTypeアトリビュートを使うことでカスタムClipを作れるようになるのです。

③「DisplayName」メニュー名のカスタマイズ

「TrackBindingType」と「TrackClipType」2つのアトリビュートだけでUnity Timelineの拡張は可能です。最後に紹介するアトリビュートはトラックやクリップの表示名を拡張します。

「DisplayName」はTrack作成メニュー名のカスタマイズできます。

[DisplayName("カスタムトラックメニュー")]  
public class CustomTrack : TrackAsset  
{
    // ~~~ 略 ~~~  
}
DisplayName設定DisplayName未設定
【Unity】Timeline拡張に必須!3つのアトリビュート_3
【Unity】Timeline拡張に必須!3つのアトリビュート_3

このようにメニュー内のトラック名を変更できます。

トラックだけではなく、クリップ名もDisplayNameアトリビュートを使って変更できます。具体的には次のコードです。

using UnityEngine.Playables;  

[DisplayName("カスタムクリップメニュー")]  
public class GraphicColorBehaviour : PlayableBehaviour  
{
    // ~~~ 略 ~~~  
}

【Unity】Timeline拡張に必須!3つのアトリビュート_4

すると、このようにメニュー内のクリップ名をカスタマイズすることができるのです。

DisplayNameアトリビュートはTrackクラス名、Clipクラス名では内容が伝わりづらい時に活用しましょう。また、デザイナーやクリエーターに使ってもらうときは日本語で作ることが重要です。英語では分かりづらい、感覚的ではないという理由で ツール自体が使われないリスク があります。

チーム開発するときにはできる限り日本語メニューにすることをおすすめします。そのためにもDisplayNameアトリビュートは活躍するのです。

まとめ

本記事ではUnity Timelineをカスタマイズする上で、覚えておくべき3つのアトリビュートについて解説しました。記事の内容を簡単にまとめます。

UnityのTimeline拡張で覚えておきたい3つのアトリビュートまとめ

①TrackBindingType・・バインドの型指定

②TrackClipType・・Clipの型指定

③DisplayName・・メニュー名のカスタマイズ

こんな感じです。

Unity Timelineでものづくりをしていると、どうしてもトラックやクリップをカスタマイズしたくなります。ゲームをより面白くするためにやりたいことが増えるため仕方ありません。ゲームエンジニアとしてはできる限り要望に的確に答えるべく、Unity Timelineの拡張方法を覚えておくと良いでしょう。

本記事で紹介した内容はUnity Timeline拡張の基礎にあたります。これらのアトリビュートをぜひ使ってみてください。自分でタイムラインを拡張してみることが学びの第一歩です。Unity Timelineのアトリビュートで迷ったときはぜひ、この記事を読み直してみてください。

この記事があなたのゲーム開発に少しでもお役に立てたら嬉しいです。

オススメ記事
検証環境
  • Unity2020.3.31f1