c# - RigidBody2D 卡住 X 位置

标签 c# unity3d collision-detection rigid-bodies

我想知道是否有一种方法可以使用 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/

相关文章:

c# - 从本地文本文件读取到 C#?

c# - 优化 C# 中的 if 语句 (a > 0 && b > 0 && a + b == c)

c# - Unity 3D异步轮询Unity中的外部硬件

c# - 将 Unity texture2d 转换为 ffmpeg 的 YUV420P

c# - 统一: GameObject repeated instantiation issue

python - 乒乓克隆碰撞检测

c# - 使用 Roslyn 向 C# 类添加自定义属性

c# - 在数据集中添加新行时检查重复项的最佳方法?

JavaScript:如果检测到碰撞则更改对象路径

swift - spritekit 快速碰撞检测不起作用