void OnLevelWasLoaded(int level) { Time.timeScale = 1; while (_stack.Count > 0) { _stack.Pop(); } _currentScaleData = null; }
/// <summary> /// 覆盖当前Scale. /// </summary> /// <param name="scale">Scale.</param> /// <param name="duration">Duration.</param> /// <param name="context">Context.</param> void OverrideCurScale(float scale, float duration, GameTimeScaleContext context, System.Action <TimeScaleContextData> OnUpdate = null) { if (_currentScaleData == null) { _currentScaleData = new TimeScaleContextData(); } _currentScaleData.scale = scale; _currentScaleData.duration = duration; _currentScaleData.context = context; _currentScaleData.beginRealTime = Time.realtimeSinceStartup; _currentScaleData.OnUpdate = OnUpdate; Time.timeScale = scale; }
void BreakCurScale(float scale, float duration, GameTimeScaleContext context, System.Action <TimeScaleContextData> OnUpdate = null) { if (_currentScaleData != null) { _stack.Push(_currentScaleData); } _currentScaleData = new TimeScaleContextData() { scale = scale, duration = duration, context = context, OnUpdate = OnUpdate, }; }
public void Update() { if (_currentScaleData != null) { if (_currentScaleData.duration + _currentScaleData.beginRealTime > Time.realtimeSinceStartup) { // _currentScaleData.duration -= (Time.realtimeSinceStartup - _currentScaleData.beginRealTime); if (_currentScaleData.OnUpdate != null) { _currentScaleData.OnUpdate(_currentScaleData); } if (Time.timeScale != _currentScaleData.scale) { Time.timeScale = _currentScaleData.scale; if (OnTimeScaleChange != null) { OnTimeScaleChange(_currentScaleData.scale); } } } else { Time.timeScale = 1; if (OnTimeScaleChange != null) { OnTimeScaleChange(1); } _currentScaleData = null; } } if (_currentScaleData == null) { if (_stack.Count <= 0) { return; } _currentScaleData = _stack.Pop(); if (_currentScaleData == null) { return; } _currentScaleData.beginRealTime = Time.realtimeSinceStartup; } }
/// <summary> /// 取消当前的TimeScale. /// </summary> /// <returns><c>true</c>是否取消成功 <c>false</c>.</returns> /// <param name="contex">Contex.</param> public bool CancelTimeScale(GameTimeScaleContext contex) { if (_currentScaleData == null) { return(true); } if (_currentScaleData.context == contex) { Time.timeScale = 1; if (OnTimeScaleChange != null) { OnTimeScaleChange(1); } _currentScaleData = null; return(true); } return(false); }