【问题标题】:How to restrict which colliders are triggered?如何限制触发哪些碰撞器?
【发布时间】:2015-04-26 06:04:18
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: unity3d


    【解决方案1】:

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

    1. 请注意,Unity 在编辑器窗口顶部有“播放”、“暂停”和“播放一步” 按钮。您可以在玩家开火或挥动武器时立即使用Debug.Break(); 暂停游戏。然后你可以一步一步地观察正在发生的事情。选择角色、盾牌和武器,以便您可以看到它们的对撞机在运行。通过这种方式,您可以逐步查看到底发生了什么冲突。
    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. 假设您无法检测武器是否击中盾牌或玩家。通过使用一些简单的几何图形,您可以检查攻击是否来自盾牌的方向。

    祝你好运:)

    【讨论】:

    • 非常感谢您深思熟虑的回复。对此,我真的非常感激。虽然我还没有完全解决它,但我知道你提到的几种方法会起作用。只是想弄清楚如何做到这一点,而不必返工太多东西并产生新问题:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-01
    • 2015-06-26
    • 1970-01-01
    • 2022-07-23
    • 1970-01-01
    相关资源
    最近更新 更多