添加场景、对应场景代码

This commit is contained in:
JA
2026-06-30 09:46:59 +08:00
parent eeb1907247
commit 1489f33d9d
41 changed files with 3685 additions and 9 deletions
+160
View File
@@ -0,0 +1,160 @@
using UnityEngine;
using UnityEngine.UI;
namespace GameFramework
{
/// <summary>
/// 暂停菜单控制器。
/// 按 ESC 切换暂停/继续。
/// 暂停时显示菜单 Canvas,提供继续/设置/返回主菜单三个按钮。
/// 使用 old Input ManagerInput.GetKeyDown)。
/// </summary>
public class PauseMenu : MonoBehaviour
{
[Header("Input")]
[SerializeField] KeyCode pauseKey = KeyCode.Escape;
[Header("Canvas")]
[SerializeField] Canvas hudCanvas;
[SerializeField] Canvas pauseMenuCanvas;
[Header("Buttons")]
[SerializeField] Button resumeButton;
[SerializeField] Button settingsButton;
[SerializeField] Button mainMenuButton;
[Header("Settings Panel (placeholder)")]
[SerializeField] GameObject settingsPanel;
[SerializeField] Button settingsBackButton;
[Header("Audio")]
[SerializeField] AudioData pauseSFX;
[SerializeField] AudioData unpauseSFX;
bool isPaused = false;
void Start()
{
// 绑定按钮
if (resumeButton != null)
resumeButton.onClick.AddListener(OnResumeClick);
if (settingsButton != null)
settingsButton.onClick.AddListener(OnSettingsClick);
if (mainMenuButton != null)
mainMenuButton.onClick.AddListener(OnMainMenuClick);
if (settingsBackButton != null)
settingsBackButton.onClick.AddListener(OnSettingsBackClick);
// 初始状态
if (pauseMenuCanvas != null)
pauseMenuCanvas.enabled = false;
if (settingsPanel != null)
settingsPanel.SetActive(false);
// 确保游戏开始时是运行状态
if (TimeController.Instance != null)
TimeController.Instance.Unpause();
if (GameManager.Instance != null)
GameManager.GameState = GameState.Playing;
}
void Update()
{
// 游戏结束时不允许暂停
if (GameManager.Instance != null && GameManager.GameState == GameState.GameOver)
return;
if (Input.GetKeyDown(pauseKey))
{
if (isPaused)
Resume();
else
Pause();
}
}
void Pause()
{
isPaused = true;
if (TimeController.Instance != null)
TimeController.Instance.Pause();
if (GameManager.Instance != null)
GameManager.GameState = GameState.Paused;
if (hudCanvas != null)
hudCanvas.enabled = false;
if (pauseMenuCanvas != null)
pauseMenuCanvas.enabled = true;
// 显示鼠标
Cursor.visible = true;
Cursor.lockState = CursorLockMode.None;
// 选中继续按钮(手柄/键盘导航用)
if (resumeButton != null)
resumeButton.Select();
if (AudioManager.Instance != null && pauseSFX != null)
AudioManager.Instance.PlaySFX(pauseSFX);
}
void Resume()
{
isPaused = false;
if (TimeController.Instance != null)
TimeController.Instance.Unpause();
if (GameManager.Instance != null)
GameManager.GameState = GameState.Playing;
if (hudCanvas != null)
hudCanvas.enabled = true;
if (pauseMenuCanvas != null)
pauseMenuCanvas.enabled = false;
// 隐藏鼠标
Cursor.visible = false;
Cursor.lockState = CursorLockMode.Locked;
if (AudioManager.Instance != null && unpauseSFX != null)
AudioManager.Instance.PlaySFX(unpauseSFX);
}
// 只在 Pause 状态下才响应按钮
// Resume 是公开方法因为按钮 onClick 需要调用
public void OnResumeClick()
{
if (isPaused)
Resume();
}
void OnSettingsClick()
{
if (settingsPanel != null)
settingsPanel.SetActive(true);
}
void OnSettingsBackClick()
{
if (settingsPanel != null)
settingsPanel.SetActive(false);
}
void OnMainMenuClick()
{
// 先解除暂停,再加载主菜单
isPaused = false;
if (TimeController.Instance != null)
TimeController.Instance.Unpause();
if (pauseMenuCanvas != null)
pauseMenuCanvas.enabled = false;
if (SceneLoader.Instance != null)
SceneLoader.Instance.LoadMainMenuScene();
}
}
}