Esempio n. 1
0
/// <summary>
/// 碰撞,最关键的代码在这!!!!
/// </summary>
/// <param name="co"></param>
/// <returns></returns>
        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);
        }
Esempio n. 2
0
 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());
         }
         m_world.RemoveCollisionObject(co.GetCollisionObject());
         co.isInWorld = false;
     }
 }