using UnityEngine; using System.Collections; /// /// 支持暂停的 MonoBehaviour 基类. /// 游戏中需要暂停功能的逻辑都应该继承该类并将逻辑写到 OnUpdate 及 OnLateUpdate 方法中, 这两个方法在设置为暂停时不会被调用. /// public class PausingBehaviour : MonoBehaviour { /// /// 是否暂停逻辑处理. /// public static bool pause { get; set; } static PausingBehaviour() { pause = false; } private bool _isPaused; //没加:protected virtual void OnEnable() { _isPaused = pause; } /// /// 没加:protected virtual /// protected virtual void Update() { if (!pause) { if (_isPaused) { _isPaused = false; this.OnPauseExit(); } this.OnUpdate(); } else { if (!_isPaused) { _isPaused = true; this.OnPauseEnter(); } } } /// /// 可暂停的逻辑更新方法. /// protected virtual void OnUpdate() { //Debug.Log("{OnUpdate} pause = " + PausingBehaviour.pause); } //没加:protected virtual void LateUpdate() { if (!pause) { this.OnLateUpdate(); } } /// /// 可暂停的逻辑更新方法. /// protected virtual void OnLateUpdate() { } /// /// 暂停开始时会调用该方法. /// protected virtual void OnPauseEnter() { Debug.Log("Enter"); } /// /// 暂停结束时会调用该方法. /// protected virtual void OnPauseExit() { Debug.Log("Exit"); } }