Unity中如何实现碰撞发生后才弹出Game Over UI界面?
问题修复方案
1. 启动直接显示Game Over界面的解决方法
GameOverScreen默认处于激活状态导致启动直接显示,只需要在Unity编辑器Inspector面板中,找到挂载了GameOverScreen脚本的UI根对象,取消勾选对象名称左侧的激活复选框即可,Setup方法执行时会自动将该对象激活显示。
2. 碰撞后无法触发Game Over界面的解决方法
你当前的CatcherDestroy脚本存在两处逻辑错误:
- 碰撞触发后仅写了
GameOverScreen;,属于无效代码,没有调用负责显示结束界面的Setup方法 Setup方法要求传入分数参数,你需要补全游戏分数的传递逻辑- 额外注意:如果
CatcherDestroy脚本是挂载在Catcher对象本身的,当前的Tag判断逻辑是反向的,需要调整为判断碰撞到的物体是你设定的障碍物/掉落物Tag
修改后的CatcherDestroy参考代码:
using System.Collections; using System.Collections.Generic; using UnityEngine; public class CatcherDestroy : MonoBehaviour { public GameOverScreen GameOverScreen; // 此处替换为你实际获取游戏分数的逻辑,比如从全局GameManager获取 public int currentScore; private void OnCollisionEnter2D(Collision2D collision) { // 若脚本挂载在Catcher对象上,此处改为判断碰撞对象的Tag为障碍物即可 if (collision.gameObject.CompareTag("Catcher")) { Destroy(collision.gameObject); // 调用显示Game Over界面的方法,传入当前游戏分数 GameOverScreen.Setup(currentScore); } } }
额外检查项
- 确认参与碰撞的两个对象都挂载了对应形状的Collider2D组件,且其中至少一个对象挂载了Rigidbody2D组件,否则
OnCollisionEnter2D回调不会触发。
内容的提问来源于stack exchange,提问作者Charles Conklin
相关产品推荐
相关产品推荐

