【Unity】TimelineのTrackAsset周りを調べてみる

TimelineのTrackを自作するときにTrackAssetクラスを使います。 このクラスでは何ができるのかを調べてみました。

f:id:albatrus:20210713111001p:plain:w300
TimelineのTrack

TrackAsset

自作のTrackを作る場合にはTrackAssetクラスを継承します。

public class TestTrack : TrackAsset
{
}

Clip指定する

Trackで指定できるClipをTrackClipType Attributeを使って指定します。

[TrackClipType(typeof(TestClip))]
public class TestTrack : TrackAsset
{
}

対象のオブジェクト指定する

Timelineでアニメーションを行うオブジェクトを指定する場合には、TrackBindingType Attributeを使います。

[TrackClipType(typeof(TestClip))]
[TrackBindingType(typeof(Image))]
public class TestTrack : TrackAsset
{
}

Trackの色を指定する

Trackの判別をするために色を付けることができます。 こちらはTrackColor Attributeを使って指定します。

[TrackClipType(typeof(TestClip))]
[TrackBindingType(typeof(Image))]
[TrackColor(255,0,0)]
public class TestTrack : TrackAsset
{
}

f:id:albatrus:20210713112733p:plain:w450
TrackとClipの色を変更

メソッド

TrackAssetで定義されているメソッドを調べてみました。

docs.unity3d.com

GetClips

Trackで設定されているClipを取得できます。

public IEnumerable<TimelineClip> GetClips()

CreateTrackMixer

このメソッドを継承することでClip同士のブレンド周りの処理を自作できます。

public override Playable CreateTrackMixer(PlayableGraph graph, GameObject go, int inputCount)
{
    var mixer = ScriptPlayable<TestMixer>.Create(graph, inputCount);
    // 各mixerの処理
    return mixer;
}

GatherProperties

TimelineからTrackを削除したときに呼び出されます。 利用方法としては、Trackに設定されているobjectを元に戻すために利用することが多いみたいです。

public override void GatherProperties(PlayableDirector director, IPropertyCollector driver)
{

}
PlayableDirector

PlayableDirectorはTimelineを管理するコンポーネントです。

f:id:albatrus:20210713123240p:plain:w400
PlayableDirector コンポーネント

Trackに設定されているObjectを取得する場合GetGenericBindingを使います。 Imageの色を戻す場合は次のようにGatherPropertiesの記述ができそうです。

var bindingImage = director.GetGenericBinding(this) as Image;
if(bindingImage != null)
{
    // Bindingされたobjectがある場合、元に戻している
    driver.AddFromName<Text>(bindingImage.gameObject, "m_Color");
}

tsubakit1.hateblo.jp