You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 19:50:35