首页/ 第 10 章 · UI 界面系统/ 第 163 课
LESSON 163 · UI 界面系统

游戏结束画面(胜负界面)

结束画面已实现。下一课做对话框系统。

⏱ 约 14 分钟📊 难度:入门🗂 第 10 章 · UI 界面系统📍 第 163 / 300 课
课程进度
163 / 300

🎯本节学习目标

  • 实现结束判定
  • 实现结束面板
  • 实现重开与返回

🚀课程导读

“你赢了/你输了”的画面是游戏的“收官”。本课实现完整的结束流程。

结束判定

何时触发结束。

  1. 【胜利条件】例如:消灭所有敌人、到达终点、收集全部金币。
  2. 【失败条件】例如:玩家血量归零、掉落深渊。
  3. 【判定代码示例】
  4. 在 GameManager 里:
  5. public void PlayerDead() { ShowEnd(false); } // 失败
  6. public void PlayerWin() { ShowEnd(true); } // 胜利
  7. 【触发点】血量<=0 时调用 PlayerDead()(玩家脚本里);敌人清空/到达终点时调用 PlayerWin()。
  8. 【血量触发】在玩家脚本 TakeDamage 里 if (hp <= 0) GameManager.Instance.PlayerDead();
  9. 【掉落触发】玩家 y < -10 时触发。
  10. 【注意】触发一次即可,加个 isGameOver 标记防重复触发。
  11. 【结束状态】结束时可暂停游戏(Time.timeScale=0 或禁用输入)。
💡
结束判定 = “条件 + 防重复 + 通知管理器”。三小步。

结束面板

显示结果与按钮。

  1. 创建结束面板(默认隐藏):半透明遮罩 + 标题(胜利/失败)+ 两个按钮(重新开始/返回主菜单)。
  2. 【两种标题】胜利面板与失败面板:可做两个 Panel(WinPanel/LosePanel)分别显示,或一个面板改文字颜色。
  3. 【显示】
  4. public GameObject winPanel; public GameObject losePanel;
  5. void ShowEnd(bool win) {
  6. winPanel.SetActive(win);
  7. losePanel.SetActive(!win);
  8. Time.timeScale = 0f; // 结束暂停
  9. Cursor.lockState = CursorLockMode.None;
  10. }
  11. 【重新开始】public void Restart() { Time.timeScale = 1f; SceneManager.LoadScene(SceneManager.GetActiveScene().name); }
  12. 【返回主菜单】Time.timeScale = 1f; SceneManager.LoadScene("MainMenu");
  13. 【淡入】面板用 CanvasGroup 淡入(第 159 课)更精致。
  14. 【完成】死亡/胜利时弹出对应面板,可重开可返回。
  15. 【注意】重新加载场景会重置一切,注意存档需求(第 232 课)。
结束流程 = 判定触发 → 显示面板 → 暂停 → 重开/返回。

常见错误与排查

错误:重复弹出结束面板?
原因:没加 isGameOver 防重复标记
解决:加 bool isGameOver,触发一次后置 true 并禁用后续触发。

动手练习

课后小任务(做出来才算真的学会)

  • 实现玩家死亡触发失败面板
  • 实现消灭全部敌人触发胜利面板
  • 实现重新开始与返回主菜单

本节小结

结束画面已实现。下一课做对话框系统。

完成打卡后,主站会实时更新你的学习进度 🎯

← 上一课暂停菜单与游戏暂停