Timelineのバインドを解除
タイムラインで WrapMode を Hold にした際に、その後 Animator でアニメーションが制御できなくなってしまう。例えばオープニングアニメーションのあとにスタートボタンだけボタンを押されたときに Animator でボタンのアニメを再生させたいとかそんな場合、ボタンを包む GameObject でコンテナを作って、Timeline ではそっちを制御するなんかの工夫が必要になってくる。
Timeline を流した後、別の Timeline を流す分には問題なくアニメーションが流れるけど、Animator での制御が効かない。

こんな感じでスクリプトから Timeline のトラックに紐づいているオブジェクトをなくしてあげると、Timeline のアニメーションは動かなり、 Animator での制御ができるようになった。

同じような処理で、再度バインドし直してあげたり、別のオブジェクトをバインドすることも可能。

スクリプトで動かしてあげたい場合にはそもそも Animator の方をオフにしてあげないといけない。

using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Playables;
using UnityEngine.Timeline;
using UnityEngine.UI;
public class ClearTimelineBindings : MonoBehaviour
{
[SerializeField]
private PlayableDirector timeline01;
[SerializeField]
private PlayableDirector timeline02;
[SerializeField]
private Transform imageTrans;
[SerializeField]
private Text animationEnableTxt;
[SerializeField]
private GameObject bindGO;
private Animator animator;
private void Start()
{
this.animator = this.imageTrans.GetComponent<Animator>();
}
public void PlayTimeline01()
{
this.timeline01.time = 0f;
this.timeline01.Play();
}
public void PlayTimeline02()
{
this.timeline02.time = 0f;
this.timeline02.Play();
}
public void SetTriggerAnimator01()
{
this.animator.SetTrigger("Animation01");
}
public void SetTriggerAnimator02()
{
this.animator.SetTrigger("Animation02");
}
public void SwitchAnimator()
{
this.animator.enabled = !this.animator.enabled;
this.animationEnableTxt.text = "Animator\n" + (this.animator.enabled ? "ON" : "OFF");
}
public void ScaleByScript()
{
this.imageTrans.localScale *= 1.1f;
}
public void ClearBinds()
{
this.BindToTimelines(null);
}
public void BindGameObject()
{
this.BindToTimelines(this.bindGO);
}
public void BindToTimelines(GameObject go)
{
foreach (PlayableDirector timeline in new []{this.timeline01, this.timeline02})
{
IEnumerable<TrackAsset> tracks = (timeline.playableAsset as TimelineAsset).GetOutputTracks();
foreach (TrackAsset track in tracks)
{
timeline.SetGenericBinding(track, go);
}
}
}
}
特定の名前のトラックだけオフにしたいのであれば
(timeline.playableAsset as TimelineAsset)
.GetOutputTracks()
.First(t => t.name == "****");
こんな感じで名前で取れる。
本当はアニメーション(制御)しているオブジェクトを取りたかったんだけどそれは取れない??
ちなみにトラック名の設定は

トラックを選択したインスペクターから。
追記) 2019.04.01
Activation Trackでは解除してもうまく動作しないことがあった…
状況にもよるけどControl Track とか使ってあげるとうまくいくかも。
もしくはこちらの記事参照。
[…] ているので、毎フレームエミットしようとしては消えてを繰り返しておかしくなる… 以前の記事みたいにバインドを外せば直るはず。もしくは、WrapMode を None にしてあげても問題ない […]