public void RemoveCollisionObject(BCollisionObject co) { if (co is BRigidBody) { RemoveRigidBody((RigidBody)co.GetCollisionObject()); return; } if (co is BSoftBody) { RemoveSoftBody((SoftBody)co.GetCollisionObject()); return; } if (!_isDisposed) { if (co is BCharacterController && world is DynamicsWorld) { RemoveAction(((BCharacterController)co).GetKinematicCharacterController()); } if (debugType >= BDebug.DebugType.Debug) { Debug.LogFormat("Removing collisionObject {0} from world", co); } m_world.RemoveCollisionObject(co.GetCollisionObject()); co.isInWorld = false; } }
private IEnumerator TryToGetCollisionObject() { CollisionObject collisionObject; BCollisionObject co = GetComponent <BCollisionObject>(); if (co == null) { Debug.LogError("BCollisionCallbacksDefault must be attached to an object with a BCollisionObject", this); yield break; } collisionObject = co.GetCollisionObject(); if (collisionObject == null) { if (BPhysicsWorld.Get().debugType >= BulletUnity.Debugging.BDebug.DebugType.Debug) { Debug.Log("Could not recover the collision object from the current BCollisionObject. Will try again.", this); } float currentTime = Time.time; while (collisionObject == null && (Time.time - currentTime) < 5f) { collisionObject = co.GetCollisionObject(); yield return(null); } } if (collisionObject == null) { Debug.LogError("Could not recover the collision object from the current BCollisionObject.", this); yield break; } else { Debug.Log("Finally found the collision object", this); } myCollisionObject = collisionObject; }
public bool AddCollisionObject(BCollisionObject co) { if (co is BRigidBody) { return(AddRigidBody((BRigidBody)co)); } if (co is BSoftBody) { return(AddSoftBody((BSoftBody)co)); } if (!_isDisposed) { if (debugType >= BDebug.DebugType.Debug) { Debug.LogFormat("Adding collision object {0} to world", co); } if (co._BuildCollisionObject()) { m_world.AddCollisionObject(co.GetCollisionObject(), co.groupsIBelongTo, co.collisionMask); co.isInWorld = true; if (ghostPairCallback == null && co is BGhostObject && world is DynamicsWorld) { ghostPairCallback = new GhostPairCallback(); ((DynamicsWorld)world).PairCache.SetInternalGhostPairCallback(ghostPairCallback); } if (co is BCharacterController && world is DynamicsWorld) { AddAction(((BCharacterController)co).GetKinematicCharacterController()); } } return(true); } return(false); }
public void Start() { BCollisionObject co = GetComponent <BCollisionObject>(); if (co == null) { Debug.LogError("BCollisionCallbacksDefault must be attached to an object with a BCollisionObject."); return; } myCollisionObject = co.GetCollisionObject(); }
public bool AddCollisionObject(BCollisionObject co) { if (!_isDisposed) { if (debugType >= BDebug.DebugType.Debug) Debug.LogFormat("Adding collision object {0} to world", co); if (co._BuildCollisionObject()) { m_world.AddCollisionObject(co.GetCollisionObject(), co.groupsIBelongTo, co.collisionMask); co.isInWorld = true; if (ghostPairCallback == null && co is BGhostObject && world is DynamicsWorld) { ghostPairCallback = new GhostPairCallback(); ((DynamicsWorld)world).PairCache.SetInternalGhostPairCallback(ghostPairCallback); } if (co is BCharacterController && world is DynamicsWorld) { AddAction(((BCharacterController)co).GetKinematicCharacterController()); } } return true; } return false; }