我想知道是否有一种方法可以使用Unity的RigidBody2D而不是普通的RigidBody来模拟以下代码。

rigidbody.constraints = RigidbodyConstraints.FreezePositionX;


我希望我的玩家x位置与某些物体碰撞时冻结。虽然可以使用上面的方法,但它要求我重新处理所有2D碰撞才能使用3D碰撞。我宁愿避免这种痛苦。

最佳答案

这是由于使用Box2D引擎进行了模拟。它不直接对刚体本身提供约束。但是,它确实提供了接头。

您要查看的是a Slider Joint 2D。这将允许您限制在特定方向上的移动。

默认情况下,它将冻结/约束X位置(即您可以向上或向下移动)。通过修改角度,可以更改允许对象移动的线。

假设您要垂直限制运动。在这种情况下,您将添加一个如下所示的滑块关节:



这将允许特定的2D刚体仅向上或向下移动。这里有几件事要注意。关节相对于其他刚体起作用,通常将其添加到“连接的刚体”中。如果不这样做,它将隐式在原点(0,0)处设置一个。当您可能不希望出现这种情况时,这将有可能将受约束的身体捕捉到那里。可以通过适当地更改“连接锚”设置来修改。

如果您希望水平约束刚体,则可以像以前一样做,但要增加角度。将其设置为90度即可解决问题。



这如何适合您的特定设置和代码,您必须尝试弄清楚。但是为了帮助您,我在over on Github创建了一个小型演示场景。



它不会做很多事情,但是通过与场景视图中的两个正方形交互(尝试沿轴平移),您可以了解它在做什么。

关于c# - RigidBody2D卡住X位置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22579017/

10-09 01:40