前書き:
タイムラインを使用すると、オブジェクト、サウンド、パーティクル、アニメーション、特殊効果、カスタムPlayable、サブタイムラインなどのシーンアニメーションを簡単に作成および変更して統合できるため、効果の高いシーンアニメーションをより便利に生成できます。
カットシーンにタイムラインを使用する場合、シーンに新しいタイムラインを作成した後、アニメーション化する指定のオブジェクトをトラックにドラッグして、実行中にトラックを再生できるようにする必要がある場合がありますが、多くの場合、コードが必要ですトラックHを動的に設定します。たとえば、次の図では、ゲームの実行時にキューブをオブジェクトとして設定するためのコードが必要です。このとき、オブジェクトは現在のTrack1トラック情報を使用して対応するアクションを実行できます。
UnityのPlayableDirectorクラスでは、現在のタイムラインリソースのすべてのトラック情報とトラック内のすべてのクリップ情報を取得し、対応するAPIを使用してトラックを動的に設定する操作を実装できます。
1. Start関数で、Dictionaryを使用して現在のすべてのバインディングトラック情報を取得します。キーはトラック名:Animation Trackを使用し、値は現在のトラックであるため、すべてのトラック情報が現在の辞書に記録されます。
private PlayableDirector playableDirector;
private readonly Dictionary<string, PlayableBinding> bindingDict = new Dictionary<string, PlayableBinding>();
private void Start()
{
playableDirector = GetComponent<PlayableDirector>();
//开始的时候,储存所有轨道信息,轨道名称作为key,Track作为value,用于动态设置
foreach (var bind in playableDirector.playableAsset.outputs)
{
if (!bindingDict.ContainsKey(bind.streamName))
{
bindingDict.Add(bind.streamName, bind);
}
}
}
2. SetGenericBindingメソッドを使用して、バインディングトラックを動的に設定します
/// <summary>
/// 动态设置轨道
/// </summary>
/// <param name="trackName"></param>
/// <param name="gameObject"></param>
public void SetTrackDynamic(string trackName, GameObject gameObject)
{
if (bindingDict.TryGetValue(trackName, out PlayableBinding pb))
{
playableDirector.SetGenericBinding(pb.sourceObject, gameObject);
}
}
3.このようにして、コードがSetTrackDynamicメソッドを使用した後、シーン内のオブジェクトを指定されたトラックに動的に設定できます。