Files
gold_dolphin/unity/Assets/UI/GameOverScreen.cs
T
2026-06-30 09:46:59 +08:00

92 lines
2.4 KiB
C#

using UnityEngine;
using UnityEngine.UI;
namespace GameFramework
{
/// <summary>
/// 游戏结束画面。
/// 监听 GameManager.onGameOver 事件,显示结束 Canvas 并暂停游戏。
/// 玩家按确认键或点击按钮后跳转到排行榜场景。
/// </summary>
public class GameOverScreen : MonoBehaviour
{
[Header("Canvas")]
[SerializeField] Canvas gameOverCanvas;
[Header("Button")]
[SerializeField] Button confirmButton;
[Header("Audio")]
[SerializeField] AudioData gameOverSFX;
[Header("Input")]
[SerializeField] KeyCode confirmKey = KeyCode.Return;
void OnEnable()
{
GameManager.onGameOver += ShowGameOver;
}
void OnDisable()
{
GameManager.onGameOver -= ShowGameOver;
}
void Start()
{
// 初始隐藏
if (gameOverCanvas != null)
gameOverCanvas.enabled = false;
if (confirmButton != null)
confirmButton.onClick.AddListener(OnConfirmClick);
}
void ShowGameOver()
{
// 显示结束画面
if (gameOverCanvas != null)
gameOverCanvas.enabled = true;
// 暂停游戏
if (TimeController.Instance != null)
TimeController.Instance.Pause();
// 显示鼠标
Cursor.visible = true;
Cursor.lockState = CursorLockMode.None;
// 选中确认按钮
if (confirmButton != null)
confirmButton.Select();
// 播放音效
if (AudioManager.Instance != null && gameOverSFX != null)
AudioManager.Instance.PlaySFX(gameOverSFX);
}
void Update()
{
// 游戏结束画面可见时,按确认键跳转
if (gameOverCanvas != null && gameOverCanvas.enabled)
{
if (Input.GetKeyDown(confirmKey) || Input.GetKeyDown(KeyCode.Space))
{
OnConfirmClick();
}
}
}
void OnConfirmClick()
{
// 先解除暂停
if (TimeController.Instance != null)
TimeController.Instance.Unpause();
// 跳转到排行榜场景
if (SceneLoader.Instance != null)
SceneLoader.Instance.LoadScoringScene();
}
}
}