Я использую физику пули в своем движке, и это было не так сложно, чтобы интегрировать ее. Проблема, с которой я сталкиваюсь, заключается в том, что система столкновения, похоже, не распознает мою плиту пола. Я создаю физическую систему следующим образом:
var collisionConfig = new BulletSharp.DefaultCollisionConfiguration();
PhysicsWorld = new BulletSharp.DiscreteDynamicsWorld(
new BulletSharp.CollisionDispatcher(collisionConfig),
new BulletSharp.DbvtBroadphase(),
new BulletSharp.SequentialImpulseConstraintSolver(),
collisionConfig);
Теперь я добавляю жесткие тела с кубическими коллизионными сетками (предоставленными пулей):
public void SetCollisionBox(Vector3 center, Vector3 scale)
{
SetBody(new BoxShape(0.5f), center, scale);
}
private void SetBody(CollisionShape shape, Vector3 center, Vector3 scale)
{
Center = center;
ClearBody();
RigidBodyConstructionInfo info = new RigidBodyConstructionInfo(1, new DefaultMotionState(Matrix4.CreateTranslation(Transform.Position) + Transform.Rotation.ToMatrix4()), shape);
Body = new RigidBody(info);
Body.CollisionShape.LocalScaling = scale;
GameObject.App.PhysicsWorld.AddRigidBody(Body);
}
Я делаю напольную пластину такой:
public void MakeStatic()
{
if (Body != null)
Body.SetMassProps(0, Vector3.Zero);
}
К сожалению, никакие предметы не сталкиваются с напольной плитой. Они просто проваливаются. Где моя ошибка?
благодаря
Моя ошибка заключалась в добавлении матриц. Я должен был их умножить. Добавление привело к тому, что матрицы были в странном состоянии, запутывая физический движок.