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

Unity中敌人预制体因FOV碰撞体触发双倍伤害的原因排查

问题原因及解决方法

核心原因

  • Unity 2D物理的父子碰撞传递机制:FOV作为敌人预制体的子物体,而敌人父物体挂载了Rigidbody2D。在Unity的2D物理系统中,子物体的Collider2D与子弹碰撞时,碰撞事件会自动传递给拥有Rigidbody2D的父物体。哪怕FOV没有挂载检测脚本,敌人身上的伤害检测脚本依然会接收到来自FOV Collider的碰撞事件,导致同一颗子弹触发两次伤害判定(敌人自身Collider+FOV Collider各触发一次)。
  • 碰撞矩阵未做隔离:如果FOV所在Layer与子弹Layer的碰撞规则未限制,就会触发上述的事件传递逻辑。

可行解决方案

  • 将FOV的Collider设为触发器:给FOV的Box Collider2D勾选Is Trigger,同时确保敌人的伤害脚本只响应非触发碰撞(比如用OnCollisionEnter2D而非OnTriggerEnter2D)。如果FOV仅用于视野检测,设置为触发器完全不影响其功能。
  • Layer隔离碰撞:给FOV单独分配一个专属Layer,打开Project Settings > Physics2D面板,在碰撞矩阵中取消FOV Layer与子弹Layer的碰撞勾选,从物理层面阻止两者产生碰撞事件。
  • 脚本内过滤碰撞源:在敌人的伤害检测脚本中添加判断逻辑,仅当碰撞的Collider属于敌人自身时才执行伤害逻辑,示例代码如下:
void OnCollisionEnter2D(Collision2D other)
{
    if (other.collider.gameObject != this.gameObject) return;
    // 处理伤害逻辑
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 05:53:19