LoginSignup
3
4

More than 5 years have passed since last update.

[Unity][Timeline] トラックに設定できるPlayableAssetの型情報を取得する

Last updated at Posted at 2018-10-21

初めに

独自トラックの実装をする際に、任意のPlayableAssetをクリップに持たせることができます
これの指定は独自トラックのクラスを宣言する際にTrackClipTypeAttributeを設定することで利用することができます

SampleTrack.cs
using UnityEngine.Timeline;

[TrackClipType(typeof(SamplePlayableAsset))] // これによりTimelineClipが持つPlayableAssetを指定できる
public class SampleTrack : TrackAsset
{
    // 省略
}
SamplePlayableAsset.cs
// TrackClipTypeAttributeで設定されたトラックのクリップにAsset情報として紐付けられるようになる
public class SamplePlayableAsset : PlayableAsset
{
    // 省略
}

今回はこのTrackClipTypeAttributeで指定したPlayableAssetの型情報をトラックの型情報から取り出す方法を紹介します

とは言ってもC#の標準的な機能を使うだけですが…

GetCustomAttributes を使う

System.Reflection の機能としてAttributeの情報を取ってこれるメソッドが用意されているのでそれを使いましょう

public static Type[] GetClipTypes<TTrack>() where TTrack : TrackAsset
{
    return typeof(T).GetCustomAttributes(typeof(TrackClipTypeAttribute), true)
        .Cast<TrackClipTypeAttribute>()
        .Select(attr => attr.inspectedType)
        .ToArray();
}

最後に

ちらっとRelease Noteを見ただけで間違っているかもなのですが、Unity2018.1あたりからこのTrackClipAttributeで複数のPlayableAssetを指定できるようになっているみたいなので、独自で機能を拡張する際にはここらへんを操れるようになっていると幅が広がりそうです

実はTrackAssetinternalで上記と似たようなメソッドが定義されているのですが、なぜpublicにしないのか

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4