12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- 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);
- }
- }
- }
|