目前,我正在编写Unity 2D游戏。游戏运行时,汽车开始移动并不断重生。球将被用于将球扔向赛车。我使用Box Collider来为赛车提供基础,但是现在球无法到达底部的车道,因为它被上车道挡住了。
我想禁用我的球与其他游戏对象之间的碰撞,以使可能的车道有所不同,但我不知道该怎么做?我希望我可以使用图层来区分它,但是我无法解决我的问题。有谁想知道如何解决我的问题。我将附上图片,以增进您对我的问题的理解。 Example of the scene
答案 0 :(得分:0)
将球放在不同的图层(例如,名为“ Ball”的图层)上,将球道放在不同的图层(例如,名为“ Lanes”的图层)上。然后转到“编辑”->“项目设置”,单击“ Physics 2D”,然后取消选中将“球”层与“车道”层相交的复选框。这样可以防止两个图层上的项目之间发生冲突。
答案 1 :(得分:0)
在描述中,您声明对象正在使用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);
其中ignore
是bool
。