当ArticulationBody对象被放置在场景中时,它在传送带上移动正常。但是,禁用并重新启用会改变其行为。看起来质量被改变了,所以平台不能移动除非移除板子和寿司。我的传送带使用刚性来移动与其接触的物体。它将接触对象的速度设置为Inspector中设置的固定速度。这使我能够控制我想要的物体在传送带上的移动速度,不管其质量如何。

负责在传送带上应用速度的代码如下:
foreach (ArticulationBody body in touchingBodies)
{
if (!body) continue;
if (wakeTouchingBodies) body.WakeUp();
Vector3 velocity = body.velocity;
// 移除传送带方向上的任何现有速度。
velocity -= Vector3.Project(velocity, dir);
// 替换它为传送带速度。
velocity += dir * conveyorSpeed;
if (applyNewBodyLiftAssist && pendingLiftAssistBodies.Contains(body))
{
float upSpeed = Vector3.Dot(velocity, transform.up);
if (upSpeed < newBodyLiftSpeed) velocity += transform.up * (newBodyLiftSpeed - upSpeed);
pendingLiftAssistBodies.Remove(body);
}
body.velocity = velocity;
}

我了解ArticulationBody在其父子结构改变或禁用并重新启用的情况下会内部重建。我无法完全理解它,并且一直在尝试修补以使其在传送带上正常工作。我的最终目标是创建一个物体生成器,它可以生成ArticulationBody预设,正常移动在传送带上。因为ArticulationBody预设由生成器生成不移动,所以我怀疑这是为什么禁用并重新启用ArticulationBody会打破物理的相同问题。如果有人理解这个问题,请告诉我。任何信息都会有所帮助。要在我告诉你使用Rigidbody之前,请理解我已经考虑过它。如果我不能使用ArticulationBody,使用Rigidbody将是我的最后选择。