增加怪物功能,调整灵灯参数

This commit is contained in:
2026-07-03 16:06:18 +08:00
parent e75868832f
commit 6e414a3022
46 changed files with 5907 additions and 300 deletions
+142
View File
@@ -0,0 +1,142 @@
using UnityEngine;
using UnityEngine.UI;
namespace GameFramework
{
/// <summary>
/// 游戏结果类型。
/// </summary>
public enum GameResult { Win, Lose }
/// <summary>
/// 游戏结果界面(支持胜利/失败)。
/// 监听 GameManager.onGameOver 和 onGameWin 事件,
/// 显示对应面板并暂停游戏。确认后跳转到排行榜场景。
/// </summary>
public class GameResultScreen : MonoBehaviour
{
[Header("Canvas")]
[SerializeField] private Canvas resultCanvas;
[Header("胜利面板")]
[SerializeField] private GameObject winPanel;
[SerializeField] private Button winConfirmButton;
[SerializeField] private Text winTitleText;
[SerializeField] private Text winScoreText;
[Header("失败面板")]
[SerializeField] private GameObject losePanel;
[SerializeField] private Button loseConfirmButton;
[SerializeField] private Text loseTitleText;
[SerializeField] private Text loseScoreText;
[Header("Audio")]
[SerializeField] private AudioData winSFX;
[SerializeField] private AudioData loseSFX;
[Header("Input")]
[SerializeField] private KeyCode confirmKey = KeyCode.Return;
private bool _isVisible;
void OnEnable()
{
GameManager.onGameOver += OnGameOver;
GameManager.onGameWin += OnGameWin;
}
void OnDisable()
{
GameManager.onGameOver -= OnGameOver;
GameManager.onGameWin -= OnGameWin;
}
void OnGameOver() => ShowResult(GameResult.Lose);
void OnGameWin() => ShowResult(GameResult.Win);
void Start()
{
// 初始隐藏
if (resultCanvas != null)
resultCanvas.enabled = false;
// 绑定按钮
if (winConfirmButton != null)
winConfirmButton.onClick.AddListener(OnConfirmClick);
if (loseConfirmButton != null)
loseConfirmButton.onClick.AddListener(OnConfirmClick);
}
/// <summary>
/// 显示游戏结果界面。
/// </summary>
public void ShowResult(GameResult result)
{
_isVisible = true;
// 显示 Canvas
if (resultCanvas != null)
resultCanvas.enabled = true;
// 更新分数显示
int score = ScoreManager.Instance != null ? ScoreManager.Instance.CurrentScore : 0;
if (result == GameResult.Win)
{
// 显示胜利面板,隐藏失败面板
if (winPanel != null) winPanel.SetActive(true);
if (losePanel != null) losePanel.SetActive(false);
if (winScoreText != null) winScoreText.text = $"分数: {score}";
if (winConfirmButton != null) winConfirmButton.Select();
if (AudioManager.Instance != null && winSFX != null)
AudioManager.Instance.PlaySFX(winSFX);
}
else
{
// 显示失败面板,隐藏胜利面板
if (winPanel != null) winPanel.SetActive(false);
if (losePanel != null) losePanel.SetActive(true);
if (loseScoreText != null) loseScoreText.text = $"分数: {score}";
if (loseConfirmButton != null) loseConfirmButton.Select();
if (AudioManager.Instance != null && loseSFX != null)
AudioManager.Instance.PlaySFX(loseSFX);
}
// 暂停游戏
if (TimeController.Instance != null)
TimeController.Instance.Pause();
// 显示鼠标
Cursor.visible = true;
Cursor.lockState = CursorLockMode.None;
}
void Update()
{
if (!_isVisible) return;
// 按确认键跳转
if (Input.GetKeyDown(confirmKey) || Input.GetKeyDown(KeyCode.Space))
{
OnConfirmClick();
}
}
void OnConfirmClick()
{
_isVisible = false;
// 解除暂停
if (TimeController.Instance != null)
TimeController.Instance.Unpause();
// 跳转到排行榜
if (SceneLoader.Instance != null)
SceneLoader.Instance.LoadScoringScene();
}
}
}