2025-10-18 09:13:25 +08:00
|
|
|
|
using UnityEngine;
|
|
|
|
|
using System;
|
|
|
|
|
using Core;
|
|
|
|
|
|
|
|
|
|
namespace Script.Gameplay.Global
|
|
|
|
|
{
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 全局时间暂停管理器。
|
|
|
|
|
/// 单例,挂载到场景里任意常驻 GameObject(如 Managers)。
|
|
|
|
|
/// </summary>
|
|
|
|
|
public class TimePauseManager : MonoSingleton<TimePauseManager>
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
/// <summary> 当前是否处于暂停状态 </summary>
|
|
|
|
|
public bool IsPaused { get; private set; }
|
|
|
|
|
|
|
|
|
|
/// <summary> 暂停/恢复时触发,参数 true=暂停,false=恢复 </summary>
|
|
|
|
|
public event Action<bool> OnPauseStateChanged;
|
|
|
|
|
|
|
|
|
|
[Header("调试按钮")]
|
|
|
|
|
[SerializeField] private bool _pauseToggle;
|
|
|
|
|
|
|
|
|
|
private void OnValidate()
|
|
|
|
|
{
|
|
|
|
|
// Inspector 里打钩立即生效(仅 Editor)
|
2025-10-19 17:21:03 +08:00
|
|
|
|
SetPaused(_pauseToggle);
|
2025-10-18 09:13:25 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 外部调用:设置暂停状态
|
|
|
|
|
/// </summary>
|
|
|
|
|
public void SetPaused(bool pause)
|
|
|
|
|
{
|
|
|
|
|
if (IsPaused == pause) return;
|
|
|
|
|
|
|
|
|
|
IsPaused = pause;
|
|
|
|
|
Time.timeScale = pause ? 0f : 1f;
|
|
|
|
|
OnPauseStateChanged?.Invoke(pause);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 快捷暂停
|
|
|
|
|
/// </summary>
|
|
|
|
|
public static void Pause() => Instance.SetPaused(true);
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 快捷恢复
|
|
|
|
|
/// </summary>
|
|
|
|
|
public static void Resume() => Instance.SetPaused(false);
|
|
|
|
|
}
|
|
|
|
|
}
|