初めに
独自トラックの実装をする際に、任意のPlayableAssetをクリップに持たせることができます
これの指定は独自トラックのクラスを宣言する際にTrackClipTypeAttributeを設定することで利用することができます
using UnityEngine.Timeline;
[TrackClipType(typeof(SamplePlayableAsset))] // これによりTimelineClipが持つPlayableAssetを指定できる
public class SampleTrack : TrackAsset
{
// 省略
}
// 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を指定できるようになっているみたいなので、独自で機能を拡張する際にはここらへんを操れるようになっていると幅が広がりそうです
実はTrackAssetにinternalで上記と似たようなメソッドが定義されているのですが、なぜpublicにしないのか