我试着用铰链约束来模拟子弹物理中的一扇门。下面的代码如预期的那样工作,因为立方体在Y轴的拐角处枢转,有效地像一扇门一样打开,但是一旦我把物体放在地上,它就开始失控地飞行。
RigidBody body = physics.LocalCreateRigidBody(mass, Matrix4.CreateTranslation(new Vector3(0, 0.5f, 0)), new BoxShape(1, 1, 1));
body.UserObject = "Door";
Vector3 pivotInA = new Vector3(1, 1, 1);
Vector3 axisInA = new Vector3(0, 1, 0);
var hinge = new HingeConstraint(body, pivotInA, axisInA);
const float targetVelocity = 1.0f;
const float maxMotorImpulse = 1.0f;
hinge.EnableAngularMotor(true, targetVelocity, maxMotorImpulse);
physics.World.AddConstraint(hinge);
禁用门和地面之间的碰撞可以解决问题,但我也在努力实现这一点。文档中说,您可以为主体设置冲突类型和掩码,但只能为
World.AddRigidBody()
构造函数出现
以这样的参数和我所能告诉我的门是作为一个铰链添加到世界和地面是自动添加时,调用
LocalCreateRigidBody()
,如下所示。
CollisionShape groundShape = new BoxShape(10, 1, 10);
CollisionObject ground = LocalCreateRigidBody(0, Matrix4.CreateTranslation(0, -1, 0), groundShape);
ground.UserObject = "Ground";
我怎么能阻止门在地上旋转呢?