playtest-unity/playtest/Library/PackageCache/com.unity.timeline@1.7.4/Runtime/Activation/ActivationTrack.cs

95 lines
2.8 KiB
C#
Raw Normal View History

2023-06-19 23:21:21 -04:00
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);
}
}
}