I use two Ghostobject(KinematicCharacter) for Player and enemy(zombie etc...whatever) in my project.
The problem is when Player walk to enemy, just go through. Nothing hanppen.
I still don't fully understand Bullet, so I just took Bullet sample code.
Of course I was testing Bullet sample code in Character_Demo.cpp.
Code: Select all
btTransform startTransform;
startTransform.setIdentity ();
//startTransform.setOrigin (btVector3(0.0, 4.0, 0.0));
startTransform.setOrigin (btVector3(10.210098,-1.6433364,16.453260));
m_ghostObject = new btPairCachingGhostObject();//
m_ghostObject->setWorldTransform(startTransform);///
sweepBP->getOverlappingPairCache()->setInternalGhostPairCallback(new btGhostPairCallback());
btScalar characterHeight=1.75;
btScalar characterWidth =1.75;
btConvexShape* capsule = new btCapsuleShape(characterWidth,characterHeight);
m_ghostObject->setCollisionShape (capsule);
m_ghostObject->setCollisionFlags (btCollisionObject::CF_CHARACTER_OBJECT);
btScalar stepHeight = btScalar(0.35);
m_character = new btKinematicCharacterController (m_ghostObject,capsule,stepHeight);
//another character
btPairCachingGhostObject *ghostObject;
ghostObject = new btPairCachingGhostObject();//
ghostObject->setWorldTransform(startTransform);///
sweepBP->getOverlappingPairCache()->setInternalGhostPairCallback(new btGhostPairCallback());
ghostObject->setCollisionShape (capsule);
ghostObject->setCollisionFlags (btCollisionObject::CF_CHARACTER_OBJECT);
btKinematicCharacterController *character;
character = new btKinematicCharacterController (ghostObject,capsule,stepHeight);
Code: Select all
ghostObject= new btPairCachingGhostObject();
btConvexShape* characterShape = new btCapsuleShape(characterWidth*physicsWorldScaling,characterHeight*physicsWorldScaling);
sweepBP->getOverlappingPairCache()->setInternalGhostPairCallback(new btGhostPairCallback());
btTransform trans;
trans.setIdentity();
trans.setOrigin(btPosition*physicsWorldScaling);
ghostObject->setWorldTransform(trans);
ghostObject->setCollisionShape(characterShape);
ghostObject->setCollisionFlags (btCollisionObject::CF_CHARACTER_OBJECT);
btScalar stepHeight = 20*physicsWorldScaling;
int upAxis = 1;
character = new btKinematicCharacterController(ghostObject,characterShape,stepHeight, upAxis);
m_dynamicsWorld->addCollisionObject(ghostObject,btBroadphaseProxy::CharacterFilter, btBroadphaseProxy::StaticFilter|btBroadphaseProxy::DefaultFilter);
m_dynamicsWorld->addCharacter(character);Code: Select all
btVector3 worldMin(-1000,-1000,-1000);
btVector3 worldMax(1000,1000,1000);
btAxisSweep3* sweepBP = new btAxisSweep3(worldMin,worldMax);
pairCache = sweepBP;
btSequentialImpulseConstraintSolver* sol = new btSequentialImpulseConstraintSolver();
constraintSolver=sol;
m_dynamicsWorld = new btDiscreteDynamicsWorld(dispatcher,pairCache,constraintSolver,collisionConfiguration);
ICollisionEvents::SetInstance(this,m_dynamicsWorld);
m_dynamicsWorld->setGravity(btVector3(0,-100*physicsWorldScaling,0));
btOverlappingPairCallback* ghostPairCallback = new btGhostPairCallback();
m_dynamicsWorld->getBroadphase()->getOverlappingPairCache()->setInternalGhostPairCallback(ghostPairCallback);