1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- using UnityEngine;
- using UnityEngine.Playables;
- using UnityEngine.Timeline;
- namespace Timeline.Samples
- {
-
- public class TimeDilationMixerBehaviour : PlayableBehaviour
- {
- private float m_DefaultTimeScale = 1;
-
- public override void ProcessFrame(Playable playable, FrameData info, object playerData)
- {
- int inputCount = playable.GetInputCount();
- float timeScale = 0f;
- float totalWeight = 0f;
-
- for (int i = 0; i < inputCount; i++)
- {
- float inputWeight = playable.GetInputWeight(i);
- ScriptPlayable<TimeDilationBehaviour> playableInput = (ScriptPlayable<TimeDilationBehaviour>)playable.GetInput(i);
- TimeDilationBehaviour input = playableInput.GetBehaviour();
- timeScale += inputWeight * input.timeScale;
- totalWeight += inputWeight;
- }
-
- Time.timeScale = Mathf.Max(0.0001f, Mathf.Lerp(m_DefaultTimeScale, timeScale, Mathf.Clamp01(totalWeight)));
- }
-
- public override void OnPlayableCreate(Playable playable)
- {
- m_DefaultTimeScale = Time.timeScale;
- }
-
- public override void OnPlayableDestroy(Playable playable)
- {
- Time.timeScale = m_DefaultTimeScale;
- }
- }
- }
|