92 lines
2.4 KiB
C#
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();
|
|
}
|
|
}
|
|
}
|