Я пытаюсь реализовать простую дверь, которая просто исчезает, когда игрок приближается. Проблема в том, что дверь все еще блокирует плеер даже после того, как беринг удалился из мира.Жесткое тело, все еще сталкивающееся после удаления из мира в Bullet Physics
На каждом кадре, я делаю следующее:
Tick моделирования
перебирать все столкновения
Если происходит столкновение между игроком и объектом датчика размещен рядом с дверью, снять дверь, используя этот метод:
self.dynamicsWorld->removeCollisionObject(object.collisionBody);
Странная вещь, это прекрасно работает для удаления снарядов в моей сцене, которые удаляются, когда они контактируют с любым другим телом.
Вот как мир настроен:
btDefaultCollisionConfiguration* collisionConfiguration;
btCollisionDispatcher* dispatcher;
btBroadphaseInterface* overlappingPairCache;
btSequentialImpulseConstraintSolver* solver;
btDiscreteDynamicsWorld* dynamicsWorld;
collisionConfiguration = new btDefaultCollisionConfiguration();
dispatcher = new btCollisionDispatcher(collisionConfiguration);
overlappingPairCache = new btDbvtBroadphase();
solver = new btSequentialImpulseConstraintSolver;
dynamicsWorld = new btDiscreteDynamicsWorld(dispatcher, overlappingPairCache, solver, collisionConfiguration);
dynamicsWorld->setGravity(btVector3(0, 0, gravity));
А вот как дверь установлена:
float mass = 0;
bool isDynamic = false;
btBoxShape* shape = new btBoxShape(size);
btTransform transform;
transform.setIdentity();
btVector3 localInertia(0, 0, 0);
if (isDynamic) {
shape->calculateLocalInertia(mass, localInertia);
}else{
mass = 0;
}
btDefaultMotionState* motionState = new btDefaultMotionState(transform);
btRigidBody::btRigidBodyConstructionInfo cInfo(mass, motionState, shape, localInertia);
btRigidBody* body = new btRigidBody(cInfo);
btTransform transform;
body->getMotionState()->getWorldTransform(transform);
transform.setOrigin(position);
body->getMotionState()->setWorldTransform(transform);
self.dynamicsWorld->addRigidBody(body);
Я уже пытался отключить дезактивацию на этом объекте, и делает его аа динамический объект без массы, но результат тот же.
Как удалить статический объект из мира и заставить его работать?