初めに
独自トラックの実装をする際に、任意の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
を指定できるようになっているみたいなので、独自で機能を拡張する際にはここらへんを操れるようになっていると幅が広がりそうです
実はTrackAsset
にinternal
で上記と似たようなメソッドが定義されているのですが、なぜpublic
にしないのか