コード例 #1
0
        protected virtual void _InitializePhysicsWorld()
        {
            _isDisposed = false;
            CreatePhysicsWorld(out m_world, out CollisionConf, out Dispatcher, out Broadphase, out constraintSolver, out softBodyWorldInfo);

            if (m_world is DiscreteDynamicsWorld)
            {
                _ddWorld = (DiscreteDynamicsWorld)m_world;
            }

            //Add a BPhysicsWorldLateHelper component to call FixedUpdate

            lateUpdateHelper = gameObject.AddComponent <BPhysicsWorldLateHelper>();

            lateUpdateHelper.m_world        = world;
            lateUpdateHelper.m_ddWorld      = _ddWorld;
            lateUpdateHelper.m_physicsWorld = this;
        }
コード例 #2
0
 protected virtual void _InitializePhysicsWorld()
 {
     _isDisposed = false;
     CreatePhysicsWorld(out m_world, out CollisionConf, out Dispatcher, out Broadphase, out Solver, out softBodyWorldInfo);
     if (m_world is DiscreteDynamicsWorld)
     {
         _ddWorld = (DiscreteDynamicsWorld)m_world;
     }
     //Add a BPhysicsWorldLateHelper component to call FixedUpdate
     lateUpdateHelper = GetComponent <BPhysicsWorldLateHelper>();
     if (lateUpdateHelper == null)
     {
         lateUpdateHelper = gameObject.AddComponent <BPhysicsWorldLateHelper>();
     }
     lateUpdateHelper.m_world                  = world;
     lateUpdateHelper.m_ddWorld                = _ddWorld;
     lateUpdateHelper.m_physicsWorld           = this;
     lateUpdateHelper.m__frameCount            = 0;
     lateUpdateHelper.m_lastSimulationStepTime = 0;
 }
コード例 #3
0
 protected virtual void _InitializePhysicsWorld()
 {
     _isDisposed = false;
     CreatePhysicsWorld(out m_world, out CollisionConf, out Dispatcher, out Broadphase, out Solver, out softBodyWorldInfo);
     if (m_world is DiscreteDynamicsWorld)
     {
         _ddWorld = (DiscreteDynamicsWorld)m_world;
     }
     //Add a BPhysicsWorldLateHelper component to call FixedUpdate
     lateUpdateHelper = GetComponent<BPhysicsWorldLateHelper>();
     if (lateUpdateHelper == null)
     {
         lateUpdateHelper = gameObject.AddComponent<BPhysicsWorldLateHelper>();
     }
     lateUpdateHelper.m_world = world;
     lateUpdateHelper.m_ddWorld = _ddWorld;
     lateUpdateHelper.m_physicsWorld = this;
     lateUpdateHelper.m__frameCount = 0;
     lateUpdateHelper.m_lastSimulationStepTime = 0;
 }
コード例 #4
0
        protected virtual void _InitializePhysicsWorld()
        {
            _isDisposed = false;
            if (m_worldType == WorldType.SoftBodyAndRigidBody && m_collisionType == CollisionConfType.DefaultDynamicsWorldCollisionConf)
            {
                BDebug.LogError(debugType, "For World Type = SoftBodyAndRigidBody collisionType must be collisionType=SoftBodyRigidBodyCollisionConf. Switching");
                m_collisionType = CollisionConfType.SoftBodyRigidBodyCollisionConf;
            }

            if (m_collisionType == CollisionConfType.DefaultDynamicsWorldCollisionConf)
            {
                CollisionConf = new DefaultCollisionConfiguration();
            }
            else if (m_collisionType == CollisionConfType.SoftBodyRigidBodyCollisionConf)
            {
                CollisionConf = new SoftBodyRigidBodyCollisionConfiguration();
            }

            Dispatcher = new CollisionDispatcher(CollisionConf);

            if (m_broadphaseType == BroadphaseType.DynamicAABBBroadphase)
            {
                Broadphase = new DbvtBroadphase();
            }
            else if (m_broadphaseType == BroadphaseType.Axis3SweepBroadphase)
            {
                Broadphase = new AxisSweep3(m_axis3SweepBroadphaseMin.ToBullet(), m_axis3SweepBroadphaseMax.ToBullet(), axis3SweepMaxProxies);
            }
            else if (m_broadphaseType == BroadphaseType.Axis3SweepBroadphase_32bit)
            {
                Broadphase = new AxisSweep3_32Bit(m_axis3SweepBroadphaseMin.ToBullet(), m_axis3SweepBroadphaseMax.ToBullet(), axis3SweepMaxProxies);
            }
            else
            {
                Broadphase = null;
            }

            if (m_worldType == WorldType.CollisionOnly)
            {
                m_world  = new CollisionWorld(Dispatcher, Broadphase, CollisionConf);
                _ddWorld = null;
            }
            else if (m_worldType == WorldType.RigidBodyDynamics)
            {
                m_world  = new DiscreteDynamicsWorld(Dispatcher, Broadphase, null, CollisionConf);
                _ddWorld = (DiscreteDynamicsWorld)m_world;
            }
            else if (m_worldType == WorldType.MultiBodyWorld)
            {
                m_world  = new MultiBodyDynamicsWorld(Dispatcher, Broadphase, null, CollisionConf);
                _ddWorld = (DiscreteDynamicsWorld)m_world;
            }
            else if (m_worldType == WorldType.SoftBodyAndRigidBody)
            {
                Solver            = new SequentialImpulseConstraintSolver();
                Solver.RandSeed   = sequentialImpulseConstraintSolverRandomSeed;
                softBodyWorldInfo = new SoftBodyWorldInfo
                {
                    AirDensity   = 1.2f,
                    WaterDensity = 0,
                    WaterOffset  = 0,
                    WaterNormal  = BulletSharp.Math.Vector3.Zero,
                    Gravity      = UnityEngine.Physics.gravity.ToBullet(),
                    Dispatcher   = Dispatcher,
                    Broadphase   = Broadphase
                };
                softBodyWorldInfo.SparseSdf.Initialize();

                m_world  = new SoftRigidDynamicsWorld(Dispatcher, Broadphase, Solver, CollisionConf);
                _ddWorld = (DiscreteDynamicsWorld)m_world;

                m_world.DispatchInfo.EnableSpu = true;
                softBodyWorldInfo.SparseSdf.Reset();
                softBodyWorldInfo.AirDensity   = 1.2f;
                softBodyWorldInfo.WaterDensity = 0;
                softBodyWorldInfo.WaterOffset  = 0;
                softBodyWorldInfo.WaterNormal  = BulletSharp.Math.Vector3.Zero;
                softBodyWorldInfo.Gravity      = m_gravity.ToBullet();
            }
            if (_ddWorld != null)
            {
                _ddWorld.Gravity = m_gravity.ToBullet();
            }
            if (_doDebugDraw)
            {
                DebugDrawUnity db = new DebugDrawUnity();
                db.DebugMode        = _debugDrawMode;
                m_world.DebugDrawer = db;
            }

            //Add a BPhysicsWorldLateHelper component to call FixedUpdate
            lateUpdateHelper = GetComponent <BPhysicsWorldLateHelper>();
            if (lateUpdateHelper == null)
            {
                lateUpdateHelper = gameObject.AddComponent <BPhysicsWorldLateHelper>();
            }
            lateUpdateHelper.m_world                  = m_world;
            lateUpdateHelper.m_ddWorld                = _ddWorld;
            lateUpdateHelper.m_physicsWorld           = this;
            lateUpdateHelper.m__frameCount            = 0;
            lateUpdateHelper.m_lastSimulationStepTime = 0;
        }