using System;
using UnityEngine.Playables;
namespace UnityEngine.Timeline
{
///
/// Track that can be used to control the active state of a GameObject.
///
[Serializable]
[TrackClipType(typeof(ActivationPlayableAsset))]
[TrackBindingType(typeof(GameObject))]
[ExcludeFromPreset]
public class ActivationTrack : TrackAsset
{
[SerializeField]
PostPlaybackState m_PostPlaybackState = PostPlaybackState.LeaveAsIs;
ActivationMixerPlayable m_ActivationMixer;
///
/// Specify what state to leave the GameObject in after the Timeline has finished playing.
///
public enum PostPlaybackState
{
///
/// Set the GameObject to active.
///
Active,
///
/// Set the GameObject to Inactive.
///
Inactive,
///
/// Revert the GameObject to the state in was in before the Timeline was playing.
///
Revert,
///
/// Leave the GameObject in the state it was when the Timeline was stopped.
///
LeaveAsIs
}
internal override bool CanCompileClips()
{
return !hasClips || base.CanCompileClips();
}
///
/// Specifies what state to leave the GameObject in after the Timeline has finished playing.
///
public PostPlaybackState postPlaybackState
{
get { return m_PostPlaybackState; }
set { m_PostPlaybackState = value; UpdateTrackMode(); }
}
///
public override Playable CreateTrackMixer(PlayableGraph graph, GameObject go, int inputCount)
{
var mixer = ActivationMixerPlayable.Create(graph, inputCount);
m_ActivationMixer = mixer.GetBehaviour();
UpdateTrackMode();
return mixer;
}
internal void UpdateTrackMode()
{
if (m_ActivationMixer != null)
m_ActivationMixer.postPlaybackState = m_PostPlaybackState;
}
///
public override void GatherProperties(PlayableDirector director, IPropertyCollector driver)
{
var gameObject = GetGameObjectBinding(director);
if (gameObject != null)
{
driver.AddFromName(gameObject, "m_IsActive");
}
}
///
protected override void OnCreateClip(TimelineClip clip)
{
clip.displayName = "Active";
base.OnCreateClip(clip);
}
}
}