Unity开发点击销毁单个方块时全部方块被销毁的问题如何解决
问题根因
- 你将该脚本挂载到了每一个可销毁方块上,现有逻辑会让所有方块的Update函数同步监听鼠标点击事件:只要射线检测到任意碰撞体存在,所有挂载了该脚本的方块都会直接隐藏自身,因此会出现单次点击销毁多个方块的异常。
修复方案
仅需在射线命中判断中增加校验,确认命中的碰撞体属于当前脚本挂载的方块时,再执行隐藏逻辑即可,修正后代码如下:
using UnityEngine; public class DestroyObjectOnClick : MonoBehaviour { void Update() { if (Input.GetMouseButtonDown(0)) { Vector3 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition); Vector2 mousePos2D = new Vector2(mousePos.x, mousePos.y); RaycastHit2D hit = Physics2D.Raycast(mousePos2D, Vector2.zero); if (hit.collider != null && hit.collider.gameObject == gameObject) { gameObject.SetActive(false); } } } }
优化建议
- 若场景中方块数量较多,每个方块单独执行Update检测会产生不必要的性能开销,可以将该脚本统一挂载到全局管理对象上,点击时直接销毁射线命中的方块即可,无需为每个方块单独挂载脚本。
- 销毁逻辑可以根据需求替换为
Destroy(gameObject),如果后续不需要复用该方块对象的话。
内容的提问来源于stack exchange,提问作者Josh_Stigzelius
相关产品推荐
相关产品推荐

