Unityのタイムライン上で、各トラック内のクリップが持つパラメーターを、スクリプトから動的に変更する手順まとめです。

処理内容を箇条書きにすると
①タイムライン内のトラック一覧から、指定名称のトラックを取得
②トラック内のクリップ一覧から、指定名称のクリップを取得
③クリップのパラメーターを変更
の順番にやっていきます。

今回はUnity公式がAssetStoreで配布している「Default Playables」に含まれている
「Transform Tween Track」のクリップを書き換えてみます。



「Transform Tween Track」はクリップに指定されている Start Location から End Location まで移動するだけのシンプルなトラックです。
timelime_01
これの End Location を実行時に動的に書き換えて移動先を変更しようと思います。

まず、
①タイムライン内のトラックから、指定名称のトラックを取得
します。
// タイムライン内のトラック一覧を取得
IEnumerable<TrackAsset> tracks = (m_director.playableAsset as TimelineAsset).GetOutputTracks();

// 指定名称のトラックを抜き出す
TrackAsset track = tracks.FirstOrDefault(x => x.name == "TransformTweenTrack01");
ここで指定するトラック名は、Timelineウィンドウでトラックを選択中にInspectorウィンドウで設定できます。
timelime_02

次に、
②トラック内のクリップ一覧から、指定名称のクリップを取得
します。
// トラック内のクリップ一覧を取得
IEnumerable<TimelineClip> clips = track.GetClips();

// 指定名称のクリップを抜き出す
TimelineClip clip = clips.FirstOrDefault(x => x.displayName == "TransformTweenClip01");
ここで指定するクリップ名は、Timelineウィンドウでトラック内のクリップを選択中にInspectorウィンドウで設定できます。
timelime_03

最後に、
③クリップのパラメーターを変更
します。
// クリップのPlayableAssetを対応する型へキャスト
var transTweenClip = clip.asset as TransformTweenClip;

// End Location の値を変更
transTweenClip.endLocation.exposedName = System.Guid.NewGuid().ToString();
m_director.SetReferenceValue(transTweenClip.endLocation.exposedName, newEndLocation);
exposedNameに渡す値は何でも良いのですが、ユニークなキーが必要なので、ここではGUIDを使っています。


実際に使う場合、上記の処理を整理した以下のようなコンポーネントをPlayableDirectorのGameObjectに付与します。
※頻繁に使う場合は tracks や clips はキャッシュしたほうが良いと思います。


そして、下のような呼び出しでパラメーターを変更します。
[SerializeField] private PlayableDirector m_director;
[SerializeField] private TimelineParamSetter m_timelineParamSetter;
[SerializeField] private Transform m_newEndLocation;

public void OnBtnChangeClicked()
{
    // 再生停止
    m_director.Stop();

    // End Locationを変更
    m_timelineParamSetter.SetTransformTweenEndLocation("TransformTweenTrack01", "TransformTweenClip01", m_newEndLocation);

    // 再生開始
    m_director.Play();
}
※タイムライン再生中は変更が適用されないので、再生している場合は事前に停止する必要があります。
timelime_param_04


参考