95 lines
2.8 KiB
C#
95 lines
2.8 KiB
C#
|
using System;
|
||
|
using UnityEngine.Playables;
|
||
|
|
||
|
namespace UnityEngine.Timeline
|
||
|
{
|
||
|
/// <summary>
|
||
|
/// Track that can be used to control the active state of a GameObject.
|
||
|
/// </summary>
|
||
|
[Serializable]
|
||
|
[TrackClipType(typeof(ActivationPlayableAsset))]
|
||
|
[TrackBindingType(typeof(GameObject))]
|
||
|
[ExcludeFromPreset]
|
||
|
[TimelineHelpURL(typeof(ActivationTrack))]
|
||
|
public class ActivationTrack : TrackAsset
|
||
|
{
|
||
|
[SerializeField]
|
||
|
PostPlaybackState m_PostPlaybackState = PostPlaybackState.LeaveAsIs;
|
||
|
ActivationMixerPlayable m_ActivationMixer;
|
||
|
|
||
|
/// <summary>
|
||
|
/// Specify what state to leave the GameObject in after the Timeline has finished playing.
|
||
|
/// </summary>
|
||
|
public enum PostPlaybackState
|
||
|
{
|
||
|
/// <summary>
|
||
|
/// Set the GameObject to active.
|
||
|
/// </summary>
|
||
|
Active,
|
||
|
|
||
|
/// <summary>
|
||
|
/// Set the GameObject to Inactive.
|
||
|
/// </summary>
|
||
|
Inactive,
|
||
|
|
||
|
/// <summary>
|
||
|
/// Revert the GameObject to the state in was in before the Timeline was playing.
|
||
|
/// </summary>
|
||
|
Revert,
|
||
|
|
||
|
/// <summary>
|
||
|
/// Leave the GameObject in the state it was when the Timeline was stopped.
|
||
|
/// </summary>
|
||
|
LeaveAsIs
|
||
|
}
|
||
|
|
||
|
internal override bool CanCompileClips()
|
||
|
{
|
||
|
return !hasClips || base.CanCompileClips();
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// Specifies what state to leave the GameObject in after the Timeline has finished playing.
|
||
|
/// </summary>
|
||
|
public PostPlaybackState postPlaybackState
|
||
|
{
|
||
|
get { return m_PostPlaybackState; }
|
||
|
set { m_PostPlaybackState = value; UpdateTrackMode(); }
|
||
|
}
|
||
|
|
||
|
/// <inheritdoc/>
|
||
|
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;
|
||
|
}
|
||
|
|
||
|
/// <inheritdoc/>
|
||
|
public override void GatherProperties(PlayableDirector director, IPropertyCollector driver)
|
||
|
{
|
||
|
var gameObject = GetGameObjectBinding(director);
|
||
|
if (gameObject != null)
|
||
|
{
|
||
|
driver.AddFromName(gameObject, "m_IsActive");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/// <inheritdoc/>
|
||
|
protected override void OnCreateClip(TimelineClip clip)
|
||
|
{
|
||
|
clip.displayName = "Active";
|
||
|
base.OnCreateClip(clip);
|
||
|
}
|
||
|
}
|
||
|
}
|