Unity新手求助:如何在接球游戏中调用已制作的Game Over界面?
解决Unity接球游戏Game Over界面调用问题
第一步:编写GameManager脚本
把GameManager做成全局可访问的单例,方便其他脚本调用,同时在脚本里关联你的Game Over界面元素:
using UnityEngine; using TMPro; public class GameManager : MonoBehaviour { // 全局单例实例 public static GameManager Instance; // 关联Game Over界面的面板(把你的Game Over面板拖到这里) public GameObject gameOverPanel; // 关联Game Over界面里的最终分数文本 public TMP_Text finalScoreText; void Awake() { // 单例初始化 if (Instance == null) Instance = this; else Destroy(gameObject); } void Start() { // 游戏启动时隐藏Game Over界面 gameOverPanel.SetActive(false); } // 显示Game Over界面的方法 public void ShowGameOver(int finalScore) { // 更新最终分数显示 finalScoreText.text = "Final Score: " + finalScore.ToString(); // 显示Game Over面板 gameOverPanel.SetActive(true); // 暂停游戏 Time.timeScale = 0; } // 重启游戏方法(给重启按钮绑定点击事件) public void RestartGame() { // 恢复游戏时间流速 Time.timeScale = 1; // 重新加载当前场景 UnityEngine.SceneManagement.SceneManager.LoadScene(UnityEngine.SceneManagement.SceneManager.GetActiveScene().buildIndex); } }
第二步:配置GameManager对象
- 在场景中创建空对象,命名为
GameManager - 将上面的脚本拖到该对象上
- 在Inspector面板中,把你的Game Over面板(Canvas下的对应面板)拖到
gameOverPanel字段 - 把Game Over界面里显示分数的TMP_Text拖到
finalScoreText字段 - 给Game Over界面的重启按钮绑定点击事件:选择GameManager对象,再选择
GameManager -> RestartGame()方法
第三步:修改Score脚本
把原来直接重启场景的逻辑,替换为调用GameManager的Game Over方法:
using UnityEngine; using TMPro; public class Score : MonoBehaviour { public TMP_Text scoreText; int score = 0; void Update() { scoreText.text = "Score: " + score.ToString(); } void OnTriggerEnter2D(Collider2D target) { if (target.tag == "tomato") { // 触发Game Over界面,传入当前分数 GameManager.Instance.ShowGameOver(score); Destroy(target.gameObject); } else if (target.tag == "bag") { score++; Destroy(target.gameObject); } } // 删除原来的WaitTillRestart协程,重启逻辑交给GameManager处理 }
注意事项
- 确保Game Over面板初始状态为隐藏(取消Inspector里的Active勾选)
- 检查
tomato和bag标签是否正确设置在对应对象上 - 当前场景已添加到Build Settings中(File -> Build Settings,将场景拖入列表)
内容的提问来源于stack exchange,提问作者Colmilo
相关产品推荐
相关产品推荐

