Unity C#:如何将触发对象保存为变量并按键销毁
问题解决:保存碰撞对象并按键销毁
你的脚本存在几个关键问题:
- 重复定义3次
OnTriggerEnter方法,Unity仅会执行最后一个,前面的逻辑全部失效 trigObj变量未声明,且other.gameObject()是语法错误(gameObject是属性而非方法,无需加括号)- 对象保存与触发状态的逻辑未统一,导致变量管理混乱
以下是修正后的完整脚本,实现触发碰撞时保存目标对象,按下A键销毁该对象,离开触发器后清空变量并禁用销毁功能:
using UnityEngine; public class TriggerDestroy : MonoBehaviour { // 保存碰撞到的目标对象 private GameObject _collidedTarget; // 是否处于可销毁状态 private bool _canDestroy; // 触发进入时保存对象、开启可销毁状态 private void OnTriggerEnter(Collider other) { // 仅保存带刚体的对象(与你原逻辑一致) if (other.attachedRigidbody != null) { _collidedTarget = other.gameObject; _canDestroy = true; } } // 触发退出时清空对象、关闭可销毁状态 private void OnTriggerExit(Collider other) { if (other.attachedRigidbody != null) { _collidedTarget = null; _canDestroy = false; } } // 每帧检测按键输入 private void Update() { if (_canDestroy && _collidedTarget != null && Input.GetKeyDown(KeyCode.A)) { Destroy(_collidedTarget); // 销毁后重置状态,避免重复触发 _canDestroy = false; _collidedTarget = null; Debug.Log("目标对象已销毁"); } } }
关键逻辑说明:
- 用私有变量
_collidedTarget保存碰撞对象,避免外部误修改 OnTriggerEnter中同步完成对象保存与状态开启,统一逻辑入口OnTriggerExit中清空变量并关闭状态,防止对象离开后被误销毁Update中同时校验状态、对象有效性与按键输入,确保销毁逻辑安全- 销毁后立即重置状态与变量,避免后续无效操作
内容的提问来源于stack exchange,提问作者jetrldz
相关产品推荐
相关产品推荐

