【问题标题】:Dissable Collisions for a Unity 2D Object禁用 Unity 2D 对象的碰撞
【发布时间】:2020-04-21 12:12:05
【问题描述】:

目前我正在编写 Unity 2D 游戏。当游戏运行时,汽车开始移动并不断重生。球将用于将其扔向汽车。我使用 Box Collider 为汽车提供了一个可以继续行驶的基础,但现在球无法到达底部的车道,因为它被上车道挡住了。

我想禁用我的球和其他游戏对象之间的碰撞,以启用不同车道之间的可能性,但我不知道怎么做?我希望我可以使用图层来区分它,但我无法解决我的问题。有没有人有想法,如何解决我的问题。我将附上一张图片,以提高您对我的问题的理解。 Example of the scene

【问题讨论】:

  • 第一。当您尝试图层时,您是否还修改了图层碰撞矩阵?第二。你能“标记”球并在碰撞时测试标记吗?

标签: unity3d collision layer


【解决方案1】:

将球放在不同的层(比如名为“Ball”的层),将球道放在不同的层(比如名为“Lanes”的层)。然后进入 Edit->Project Settings,点击 Physics 2D 并取消选中与 Ball 层和 Lanes 层相交的复选框。这将防止 2 层上的项目之间发生冲突。

【讨论】:

    【解决方案2】:

    在描述中,您声明您的对象正在使用 Box Collider ... 对于 2D,您宁愿使用 BoxCollider2D

    如前所述,您可以通过 Edit → 禁用两个特定层之间的碰撞。 Project Settings → Physics 2D → Layer Collision Matrix

    您还可以(这对您来说也可能很有趣)在此处禁用同一层的对象之间的碰撞。

    也许不是你的确切用例,但这样你也可以例如忽略所有敌人之间的碰撞,但仍然允许每个敌人与地板和用户对象发生碰撞。


    或者,您也可以在运行时使用 Physics2D.IgnoreLayerCollision 和例如还可以临时启用和禁用这些冲突

    Physics2D.IgnoreLayerCollision(layer1Index, layer2Index, ignore);
    

    甚至只使用Physics2D.IgnoreCollision忽略两个特定碰撞器之间的碰撞

     Physics2D.IgnoreCollision(objectA.GetComponent<Collider2D>(), objectB.GetComponent<Collider2D>(), ignore);
    

    其中ignorebool

    【讨论】:

    • 感谢您非常详细的描述。帮了我很多
    猜你喜欢
    • 2018-02-18
    • 2015-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-31
    • 2021-08-12
    • 1970-01-01
    相关资源
    最近更新 更多