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

非激活脚本是否会执行OnTriggerEnter?触发逻辑重复执行排查

问题解答

未激活(SetActive(false))的MonoBehaviour脚本不会自动执行OnTriggerEnter这类生命周期回调方法,Unity明确会禁用这类脚本的所有常规事件触发,所以你怀疑的“未激活脚本执行代码”情况不可能发生。

触发两次的可能原因及排查方向

  1. 多Collider触发
    检查挂载脚本的游戏对象或触发对象上,是否存在多个勾选了IsTrigger的Collider组件。每个符合条件的Collider都会独立触发一次OnTriggerEnter,导致代码执行两次。

  2. 脚本重复挂载
    确认当前游戏对象上是否意外挂载了多个NPC/Player脚本实例(比如误拖了两次)。即使你以为只启用了一个,若存在多个启用的实例,就会各自执行一次回调。

  3. 日志与实例绑定排查
    临时修改基类中的日志代码,添加实例标识:

    Debug.Log($"interacted from {this.GetType().Name} - 实例ID: {GetInstanceID()}");
    

    运行后查看日志,若两次日志的实例ID相同,说明是同一个脚本被触发两次;若ID不同,则说明有多个脚本实例在运行(此时需检查脚本启用状态是否真的只有一个激活)。

  4. Tag判断逻辑的潜在问题
    基类代码中先判断other.gameObject.CompareTag(gameObject.tag),再判断other的具体颜色Tag。若当前游戏对象的Tag与触发对象的颜色Tag一致,逻辑没问题,但如果触发对象快速进出触发区域,也可能导致两次回调,但这种情况概率较低。

快速验证步骤

  • 选中挂载脚本的游戏对象,在Inspector面板中确认只有一个NPC/Player脚本处于Enabled状态,另一个为灰色禁用状态。
  • 临时移除触发对象或当前对象上的多余Collider,测试是否还会触发两次。

内容的提问来源于stack exchange,提问作者New One

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 13:05:23