Unity开发:如何销毁已存在的物体克隆 保证场景仅存1个方块克隆体
单实例方块生成功能实现方案
核心实现逻辑
要保证场景中始终最多存在1个对应方块的克隆体,无需做复杂的全场景遍历查找,只需要在按钮脚本中维护一个当前已生成克隆体的引用字段:每次点击触发生成流程时,先判断这个引用对应的对象是否有效,若存在就先完成销毁,再生成新的实例并更新引用即可。
这个方案的特点:
- 完全兼容现有按钮按下、弹起的位置视觉反馈逻辑,不会改动原有交互手感
- 直接持有对象引用的方式性能开销极低,不需要每次点击都遍历全场景匹配目标物体,哪怕场景内物体数量变多也不会出现性能卡顿
- 适配克隆体被其他逻辑(比如掉出世界边界、被碰撞击碎)自动销毁的场景:Unity中被销毁的对象引用会自动变为null,下次点击时可以正常生成新实例,不会出现逻辑卡死
调整后的完整代码
保留原有全部交互逻辑,仅新增引用维护和旧对象销毁判断:
public class Button : MonoBehaviour { // 原有公开字段:拖拽赋值的方块预制体 public Rigidbody box; // 新增字段:存储当前已生成的方块克隆体引用 private Rigidbody currentBoxClone; void OnMouseDown() { // 原有逻辑:按钮按下的位置视觉反馈 transform.position = new Vector3(-3.5f, 1.45f, 7.0f); // 新增判断:如果存在未销毁的旧克隆体,先执行销毁 if (currentBoxClone != null) { Destroy(currentBoxClone.gameObject); } // 原有生成逻辑,同时将新生成的克隆体引用存入字段 currentBoxClone = Instantiate(box, new Vector3(0f, 10f, 11f), transform.rotation); } void OnMouseUp() { // 原有逻辑:按钮弹起的位置视觉反馈 transform.position = new Vector3(-3.5f, 1.5f, 7.0f); } }
注意:销毁操作需要传入
currentBoxClone.gameObject,不能直接传Rigidbody组件,否则只会移除组件,不会删除整个方块游戏对象,依然会残留多余的方块实体。
内容的提问来源于stack exchange,提问作者Thomas
相关产品推荐
相关产品推荐

