如何限制触发哪些碰撞器?

How to restrict which colliders are triggered?

抱歉,如果已经有人问过类似的问题。

我有一个角色可以举起盾牌来阻挡即将到来的伤害。该角色的 body space 有一个圆形碰撞器。盾牌有一个盒子碰撞器,可以阻挡玩家面向的任何方向的一部分,并且只有在玩家按住按钮时才会启用。我的敌人的武器被触发的盒式碰撞器包围,当他们决定攻击时这些碰撞器就会启用。

所以,我的问题是,当我的角色在屏蔽时受到攻击时,有时会检测到他的 body 对撞机,有时会检测到他的盾牌对撞机。无论我尝试什么,我都找不到任何一致性。

[截图] (http://i.imgur.com/VHujbcG.png)

[代码]https://gist.github.com/siketh/2401454977d10ed7699b

我整天都在为此苦苦挣扎,需要另一双眼睛。这不是一个严肃的项目,所以如果您需要查看其他内容,我很乐意 post 更多代码或解释更多我的设计。

可能是因为武器同时与角色和盾牌相交。如果您想查看情况是否如此,Unity 中有很棒的工具。

  1. 请注意,Unity 在顶部有 "Play"、"Pause" 和 "Play one step" 按钮编辑 window。您可以在玩家开火或挥动武器时立即使用 Debug.Break(); 暂停游戏。然后你可以一步一步地观察发生了什么。 Select 角色、盾牌和武器,以便您可以看到它们的碰撞器在运行。这样你就可以一步一步地看到什么和什么发生了冲突。
  2. 同样,您可以通过调整时间刻度来查看慢动作的动作。像 Time.timeScale = 0.1f;

为了防止这种情况,

  1. 你可能想看看continuous collision虽然我一直没能在Unity中正确使用它。
  2. 您可能想要利用更多的物理层。 http://docs.unity3d.com/Manual/LayerBasedCollision.html
  3. 您可能希望使用光线投射来检测碰撞。
  4. 可以放大护盾,降低武器挥动速度或子弹速度。以至于无法穿透护盾
  5. 您可以减少 FixedUpdate 计算的周期,这样武器移动会更顺畅,穿透更少。 http://docs.unity3d.com/Manual/class-TimeManager.html
  6. 您很有可能同时检测到武器与盾牌和武器与玩家的碰撞。那么为什么不推迟一个 FixedUpdate 的决定呢。这样您就可以检查是否只有武器与玩家的碰撞或两者都发生了碰撞。如果在之前的更新中检测到武器与盾牌的碰撞,那么无论武器是否穿过盾牌,你都知道玩家击中了盾牌。
  7. 假设您无法检测武器是击中盾牌还是击中玩家。通过使用一些简单的几何图形,您可以检查攻击是否来自盾牌的方向。

祝你好运:)