Я пытаюсь реализовать простую дверь, которая просто исчезает, когда игрок приближается. Проблема в том, что дверь все еще блокирует игрока даже после того, как беринг был удален из мира.
В каждом кадре я делаю следующее:
Отметьте симуляцию
Проходить все столкновения
Если есть столкновение между игроком и сенсорным объектом, размещенным близко к двери, удалите дверь, используя этот метод:
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);
Я уже пробовал отключить деактивацию этого объекта и сделать его динамическим без массы, но результат тот же.
Итак, как мне удалить статический объект из мира и заставить его работать?