unity入门:控制游戏的开始和暂停
unity入门:控制游戏的开始和暂停
·
unity入门:控制游戏的开始和暂停
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、音效等)。
更多推荐
所有评论(0)