12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- using UnityEngine.Playables;
- namespace UnityEngine.Timeline
- {
- /// <summary>
- /// A PlayableBehaviour that manages a component that implements the ITimeControl interface
- /// </summary>
- public class TimeControlPlayable : PlayableBehaviour
- {
- ITimeControl m_timeControl;
- bool m_started;
- /// <summary>
- /// Creates a Playable with a TimeControlPlayable behaviour attached
- /// </summary>
- /// <param name="graph">The PlayableGraph to inject the Playable into.</param>
- /// <param name="timeControl"></param>
- /// <returns></returns>
- public static ScriptPlayable<TimeControlPlayable> Create(PlayableGraph graph, ITimeControl timeControl)
- {
- if (timeControl == null)
- return ScriptPlayable<TimeControlPlayable>.Null;
- var handle = ScriptPlayable<TimeControlPlayable>.Create(graph);
- handle.GetBehaviour().Initialize(timeControl);
- return handle;
- }
- /// <summary>
- /// Initializes the behaviour
- /// </summary>
- /// <param name="timeControl">Component that implements the ITimeControl interface</param>
- public void Initialize(ITimeControl timeControl)
- {
- m_timeControl = timeControl;
- }
- /// <summary>
- /// This function is called during the PrepareFrame phase of the PlayableGraph.
- /// </summary>
- /// <param name="playable">The Playable that owns the current PlayableBehaviour.</param>
- /// <param name="info">A FrameData structure that contains information about the current frame context.</param>
- public override void PrepareFrame(Playable playable, FrameData info)
- {
- Debug.Assert(m_started, "PrepareFrame has been called without OnControlTimeStart being called first.");
- if (m_timeControl != null)
- m_timeControl.SetTime(playable.GetTime());
- }
- /// <summary>
- /// This function is called when the Playable play state is changed to Playables.PlayState.Playing.
- /// </summary>
- /// <param name="playable">The Playable that owns the current PlayableBehaviour.</param>
- /// <param name="info">A FrameData structure that contains information about the current frame context.</param>
- public override void OnBehaviourPlay(Playable playable, FrameData info)
- {
- if (m_timeControl == null)
- return;
- if (!m_started)
- {
- m_timeControl.OnControlTimeStart();
- m_started = true;
- }
- }
- /// <summary>
- /// This function is called when the Playable play state is changed to PlayState.Paused.
- /// </summary>
- /// <param name="playable">The playable this behaviour is attached to.</param>
- /// <param name="info">A FrameData structure that contains information about the current frame context.</param>
- public override void OnBehaviourPause(Playable playable, FrameData info)
- {
- if (m_timeControl == null)
- return;
- if (m_started)
- {
- m_timeControl.OnControlTimeStop();
- m_started = false;
- }
- }
- }
- }
|