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