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

时间:2015-04-25 21:10:21

标签: unity3d

很抱歉,如果已经提出类似的问题。

我有一个角色可以挡住盾牌来阻挡来袭伤害。角色的身体空间有一个圆形对撞机。盾牌有一个盒子对撞机,挡住了他面对的任何方向的一部分,并且只有在玩家按住按钮时才会启用它。我的敌人拥有被触发的箱子碰撞器包围的武器,当他们决定攻击时启用它们。

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

[Screenshots](http://i.imgur.com/VHujbcG.png

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

我整天都在苦苦挣扎,需要另一双眼睛。这不是一个严肃的项目,所以如果你需要看到其他任何东西,我很乐意发布更多代码或解释更多我的设计。

1 个答案:

答案 0 :(得分:0)

这可能是因为武器同时与角色和盾牌相交。 Unity中有很棒的工具,如果你想看看是不是这样的话。

  1. 请注意Unity已经" Play"," Pause"和 "在编辑器窗口顶部播放一步" 按钮。您可以在玩家开火或挥动武器时立即用Debug.Break();暂停游戏。然后你可以一步一步地看一下发生了什么。选择角色,盾牌和武器,以便你可以看到他们的碰撞者在行动。通过这种方式,您可以逐步查看与确切冲突的内容。
  2. 同样,您可以通过调整时间刻度来查看慢动作。像Time.timeScale = 0.1f;
  3. 之类的东西

    为了防止这种情况,

    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. 让我们说你无法察觉武器是否击中了盾牌或玩家。通过使用一些简单的几何图形,您可以检查攻击是否来自盾牌的方向。
    8. 祝你好运:)