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