1. 使用 Unity 内置的 Time 时间缩放(全局暂停)

代码如下:

using UnityEngine;

public class GameController : MonoBehaviour
{
    // 开始/继续游戏
    public void PlayGame()
    {
        Time.timeScale = 1f; // 恢复正常时间
    }

    // 暂停游戏
    public void PauseGame()
    {
        Time.timeScale = 0f; // 时间停止
    }
}

效果:

Time.timeScale = 0:所有 Update()、FixedUpdate() 停止,物理、动画、粒子等都会暂停。

Time.timeScale = 1:恢复正常游戏速度。

适用场景:

适用于 全局暂停(如游戏暂停菜单)。

不影响 UI 和音频(Time.timeScale 不影响 UnscaledDeltaTime 相关逻辑)。

2. 使用 bool 变量控制逻辑(部分暂停)

代码如下:

using UnityEngine;

public class PlayerController : MonoBehaviour
{
    private bool isPaused = false;

    void Update()
    {
        if (isPaused) return; // 暂停时直接跳过逻辑

        // 正常游戏逻辑
        if (Input.GetKeyDown(KeyCode.Space))
        {
            Debug.Log("游戏运行中...");
        }
    }

    public void PauseGame()
    {
        isPaused = true;
    }

    public void ResumeGame()
    {
        isPaused = false;
    }
}

适用场景:

适用于 部分逻辑暂停(如玩家控制暂停,但背景动画继续)。

3. 使用 Pause 和 Resume 事件(事件触发暂停)

代码如下:

using UnityEngine;
using System;

public class GameManager : MonoBehaviour
{
    public static event Action OnGamePaused;
    public static event Action OnGameResumed;

    public void PauseGame()
    {
        Time.timeScale = 0f;
        OnGamePaused?.Invoke(); // 触发暂停事件
    }

    public void ResumeGame()
    {
        Time.timeScale = 1f;
        OnGameResumed?.Invoke(); // 触发继续事件
    }
}

// 其他脚本监听暂停事件
public class EnemyAI : MonoBehaviour
{
    private void OnEnable()
    {
        GameManager.OnGamePaused += HandlePause;
        GameManager.OnGameResumed += HandleResume;
    }

    private void OnDisable()
    {
        GameManager.OnGamePaused -= HandlePause;
        GameManager.OnGameResumed -= HandleResume;
    }

    private void HandlePause()
    {
        Debug.Log("敌人 AI 暂停");
    }

    private void HandleResume()
    {
        Debug.Log("敌人 AI 恢复");
    }
}

适用场景:

适用于 多个脚本需要响应暂停/恢复(如 UI、AI、音效等)。

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐