U
Unity
星辰学院
首页
课程表
章节导览
第 1 课
返回主站
首页
/
第 10 章 · UI 界面系统
/
第 163 课
LESSON 163 · UI 界面系统
游戏结束画面(胜负界面)
结束画面已实现。下一课做对话框系统。
⏱ 约 14 分钟
📊 难度:
入门
🗂 第 10 章 · UI 界面系统
📍 第 163 / 300 课
课程进度
163 / 300
🎯
本节学习目标
实现结束判定
实现结束面板
实现重开与返回
🚀
课程导读
“你赢了/你输了”的画面是游戏的“收官”。本课实现完整的结束流程。
◆
结束判定
何时触发结束。
【胜利条件】例如:消灭所有敌人、到达终点、收集全部金币。
【失败条件】例如:玩家血量归零、掉落深渊。
【判定代码示例】
在 GameManager 里:
public void PlayerDead() { ShowEnd(false); } // 失败
public void PlayerWin() { ShowEnd(true); } // 胜利
【触发点】血量<=0 时调用 PlayerDead()(玩家脚本里);敌人清空/到达终点时调用 PlayerWin()。
【血量触发】在玩家脚本 TakeDamage 里 if (hp <= 0) GameManager.Instance.PlayerDead();
【掉落触发】玩家 y < -10 时触发。
【注意】触发一次即可,加个 isGameOver 标记防重复触发。
【结束状态】结束时可暂停游戏(Time.timeScale=0 或禁用输入)。
💡
结束判定 = “条件 + 防重复 + 通知管理器”。三小步。
◆
结束面板
显示结果与按钮。
创建结束面板(默认隐藏):半透明遮罩 + 标题(胜利/失败)+ 两个按钮(重新开始/返回主菜单)。
【两种标题】胜利面板与失败面板:可做两个 Panel(WinPanel/LosePanel)分别显示,或一个面板改文字颜色。
【显示】
public GameObject winPanel; public GameObject losePanel;
void ShowEnd(bool win) {
winPanel.SetActive(win);
losePanel.SetActive(!win);
Time.timeScale = 0f; // 结束暂停
Cursor.lockState = CursorLockMode.None;
}
【重新开始】public void Restart() { Time.timeScale = 1f; SceneManager.LoadScene(SceneManager.GetActiveScene().name); }
【返回主菜单】Time.timeScale = 1f; SceneManager.LoadScene("MainMenu");
【淡入】面板用 CanvasGroup 淡入(第 159 课)更精致。
【完成】死亡/胜利时弹出对应面板,可重开可返回。
【注意】重新加载场景会重置一切,注意存档需求(第 232 课)。
✅
结束流程 = 判定触发 → 显示面板 → 暂停 → 重开/返回。
⚠
常见错误与排查
⛔
错误:
重复弹出结束面板?
原因:
没加 isGameOver 防重复标记
解决:
加 bool isGameOver,触发一次后置 true 并禁用后续触发。
★
动手练习
课后小任务(做出来才算真的学会)
实现玩家死亡触发失败面板
实现消灭全部敌人触发胜利面板
实现重新开始与返回主菜单
✓
本节小结
结束画面已实现。下一课做对话框系统。
标记为已完成
完成打卡后,主站会实时更新你的学习进度 🎯
← 上一课
暂停菜单与游戏暂停
下一课 →
对话框系统
↑