Unity 2D对象的可禁用碰撞

时间:2020-04-21 12:12:05

标签: unity3d collision layer

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

我想禁用我的球与其他游戏对象之间的碰撞,以使可能的车道有所不同,但我不知道该怎么做?我希望我可以使用图层来区分它,但是我无法解决我的问题。有谁想知道如何解决我的问题。我将附上图片,以增进您对我的问题的理解。 Example of the scene

2 个答案:

答案 0 :(得分:0)

将球放在不同的图层(例如,名为“ Ball”的图层)上,将球道放在不同的图层(例如,名为“ Lanes”的图层)上。然后转到“编辑”->“项目设置”,单击“ Physics 2D”,然后取消选中将“球”层与“车道”层相交的复选框。这样可以防止两个图层上的项目之间发生冲突。

答案 1 :(得分:0)

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

如前所述,您可以通过EditProject SettingsPhysics 2DLayer Collision Matrix

来禁用两个特定层之间的冲突

enter image description here

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

也许不是您的确切用例,但通过这种方式,您也可以例如忽略所有敌人之间的碰撞,但仍允许每个敌人与地板和用户对象碰撞。


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

Physics2D.IgnoreLayerCollision(layer1Index, layer2Index, ignore);

或者甚至只使用Physics2D.IgnoreCollision

忽略两个特定对撞机之间的碰撞
 Physics2D.IgnoreCollision(objectA.GetComponent<Collider2D>(), objectB.GetComponent<Collider2D>(), ignore);

其中ignorebool