同时攻击多个敌人时,只有1个敌人的HP会减少

目前调查并掌握的情况是:当玩家的 AttackCollision 与敌人的 [有效] HitCollision [同时] 接触时会发生此问题。
AttackCollision 与 HitCollision 的碰撞检测在多个敌人身上均能正常判定,但并未执行 HP 扣减处理。
此外,HP 未减少的敌人其 taken_damage 也被赋值为 0。
HP 正常减少的敌人则取决于节点顺序:在同时被击中的敌人对象中,只有节点顺序靠上的那个敌人能正常减少 HP。

另外,如果 HP 归零的敌人位于节点最上方,且其 HitCollision 仍保持有效状态,则同时被击中的其他敌人的 HP 将永远无法减少。

所属的对象组,以及 AttackCollision 和 HitCollision 各自的图层/掩码设置、攻击目标组、对象的攻击判定接触组

通过这些组合,会出现以下情况:

  • 未命中攻击判定,但 HP 却减少了
  • 命中了攻击判定,但 HP 没有减少

除了同时接触的情况外,上述行为叠加导致 HP 和接触判定出现异常。

调查结果

条件

  • player 对象
    • 攻击命中的组:Enemy
    • AttackArea:第 2 层 掩码 3
    • 组:Player
  • slime 对象
    • HitArea:第 3 层 掩码 2
    • 组:Enemy
  • 从 slime 的 AnyState 建立的链接
    • 接触对象的攻击判定 全方向
    • Ignore Owner:ON
    • 类型:对象组
    • 目标:Player 组
  • 结果
    • 接触攻击判定
    • HP 减少

条件

  • player 对象
    • 攻击命中的组:Enemy
    • AttackArea:第 2 层 掩码 1(只要不是 3 即可)
    • 组:Player
  • slime 对象
    • HitArea:第 3 层 掩码 2
    • 组:Enemy
  • 从 slime 的 AnyState 建立的链接
    • 接触对象的攻击判定 全方向
    • Ignore Owner:ON
    • 类型:对象组
    • 目标:Player 组
  • 结果
    • 接触攻击判定!!!
    • HP 不减少
    • ※AttackArea 的掩码难道没有意义吗?
    • ※即使 Attack 的掩码和 Hit 的掩码不匹配,也会发生接触吗?

条件

  • player 对象
    • 攻击命中的组:Enemy
    • AttackArea:第 2 层 掩码 3
    • 组:Player
  • slime 对象
    • HitArea:第 3 层 掩码 1(只要不是 2 即可)
    • 组:Enemy
  • 从 slime 的 AnyState 建立的链接
    • 接触对象的攻击判定 全方向
    • Ignore Owner:ON
    • 类型:对象组
    • 目标:Player 组
  • 结果
    • 不接触攻击判定
    • HP 减少!!!
    • ※这是什么情况……

条件

  • player 对象
    • 攻击命中的组:Enemy
    • AttackArea:第 4 层 掩码 5
    • 组:Player
  • slime 对象
    • HitArea:第 6 层 掩码 7
    • 组:Enemy
  • 从 slime 的 AnyState 建立的链接
    • 接触对象的攻击判定 全方向
    • Ignore Owner:ON
    • 类型:对象组
    • 目标:Player 组
  • 结果
    • 不接触攻击判定
    • HP 不减少
    • ※理所当然

条件

  • player 对象
    • 攻击命中的组:Enemy
    • AttackArea:第 2 层 掩码 3
    • 组:test1
  • slime 对象
    • HitArea:第 3 层 掩码 2
    • 组:Enemy
  • 从 slime 的 AnyState 建立的链接
    • 接触对象的攻击判定 全方向
    • Ignore Owner:ON
    • 类型:对象组
    • 目标:Player 组
  • 结果
    • 不接触攻击判定
    • HP 减少!!!
    • ※为什么啊!!!!!

条件

  • player 对象
    • 攻击命中的组:Enemy
    • AttackArea:第 1 层 掩码 1
    • 组:test1
  • slime 对象
    • HitArea:第 1 层 掩码 1
    • 组:Enemy
  • 从 slime 的 AnyState 建立的链接
    • 接触对象的攻击判定 全方向
    • Ignore Owner:ON
    • 类型:对象组
    • 目标:Player 组
  • 结果
    • 不接触攻击判定
    • HP 减少!!!
    • ※为什么啊!!!!!

条件

  • player 对象
    • 攻击命中的组:test1
    • AttackArea:第 1 层 掩码 1
    • 组:player
  • slime 对象
    • HitArea:第 1 层 掩码 1
    • 组:Enemy
  • 从 slime 的 AnyState 建立的链接
    • 接触对象的攻击判定 全方向
    • Ignore Owner:ON
    • 类型:对象组
    • 目标:Player 组
  • 结果
    • 接触攻击判定!!!
    • HP 减少!!!
    • ※所谓“攻击命中的组”是指……

条件

  • player 对象
    • 攻击命中的组:Enemy
    • AttackArea:第 1 层 掩码 1
    • 组:player
  • slime 对象
    • HitArea:第 1 层 掩码 1
    • 组:Enemy
  • 从 slime 的 AnyState 建立的链接
    • 接触对象的攻击判定 全方向
    • Ignore Owner:ON
    • 类型:对象组
    • 目标:test1
  • 结果
    • 不接触攻击判定
    • HP 减少!!!
    • ※所以说为什么还会减少!!!

攻击命中
A:玩家攻击命中敌人
B:敌人受到玩家攻击的判定接触

减少敌人HP的是A
从敌人的AnyState到攻击判定接触的是B

攻击判定接触与HP减少并不相同
这似乎是当前的规格设定。

1 个赞