我想知道是否有一种方法可以使用 Unity 的 RigidBody2D 来模拟以下代码行,而不是使用普通的 RigidBody。
rigidbody.constraints = RigidbodyConstraints.FreezePositionX;
我希望我的玩家 x 位置在与某物碰撞时卡住。虽然我可以使用上面的方法,但它需要我重新处理所有 2D 碰撞才能处理 3D 碰撞。我宁愿避免的痛苦。
最佳答案
这是由于使用 Box2D 引擎进行模拟。它不直接对刚体本身提供约束。但是它确实提供关节。
你要查的是a Slider Joint 2D .这将允许您限制特定方向的移动。
默认情况下,它会卡住/限制 X 位置(即您只能向上或向下移动)。通过修改角度,您可以更改允许对象移动的线。
假设您想要限制垂直方向的移动。在这种情况下,您添加一个如下所示的 slider 关节:
这将允许特定的 2D 刚体仅向上或向下移动。这里有几件事需要注意。关节与其他刚体相关,您通常会将其添加到“连接的刚体”中。如果不这样做,它会在原点 (0,0) 隐式设置一个。这将产生将受约束的 body 卡在那里的效果,而这可能是您意想不到的。这可以通过适当更改“连接的 anchor ”设置来修改。
如果你想水平约束你的刚体,你可以像以前一样做,增加一个角度。将其设置为 90 度即可。
这如何适合您必须尝试弄清楚的特定设置和代码。但为了帮助您,我在 over on Github 创建了一个小型演示场景。 .
它不会做太多事情,但通过与场景 View 中的两个正方形交互(尝试沿轴平移它们),您就会知道它在做什么。
关于c# - RigidBody2D 卡住 X 位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22579017/