// // Overridden Unity methods. // // Use this for initialization void Start() { // unity stepping params SetStepSize(simStepSize); SetTimeScale(simTimeScale); // set up members m_collisionShapes = new List <CollisionShape>(); m_createdObjs = new List <GameObject>(); // set up the dynamics world // collision configuration contains default setup for memory, collision setup m_colConfig = new DefaultCollisionConfiguration(); m_colDispatcher = new CollisionDispatcher(m_colConfig); m_broadphase = new DbvtBroadphase(); // new AxisSweep3_32Bit(new Vector3(-10000, -10000, -10000), new Vector3(10000, 10000, 10000), 1024); m_solver = new SequentialImpulseConstraintSolver(); m_world = new DiscreteDynamicsWorld(m_colDispatcher, m_broadphase, m_solver, m_colConfig); m_world.Gravity = new BulletSharp.Math.Vector3(0, -9.8f, 0); // set up simulation InitSim(); // Debug Draw for collision boundaries DebugDrawUnity m_debugDrawer = new DebugDrawUnity(); m_debugDrawer.DebugMode = DebugDrawModes.DrawWireframe; m_world.DebugDrawer = m_debugDrawer; }
private void CreateWorld() { if (physicWorldParameters.worldType == WorldType.SoftBodyAndRigidBody && physicWorldParameters.collisionType != CollisionConfType.SoftBodyRigidBodyCollisionConf) { Debug.LogError("For World Type = SoftBodyAndRigidBody collisionType must be collisionType = SoftBodyRigidBodyCollisionConf."); return; } isDisposed = false; switch (physicWorldParameters.collisionType) { case CollisionConfType.DefaultDynamicsWorldCollisionConf: collisionConf = new DefaultCollisionConfiguration(); break; case CollisionConfType.SoftBodyRigidBodyCollisionConf: collisionConf = new SoftBodyRigidBodyCollisionConfiguration(); break; } dispatcher = new CollisionDispatcher(collisionConf); switch (physicWorldParameters.broadphaseType) { default: case BroadphaseType.DynamicAABBBroadphase: broadphase = new DbvtBroadphase(); break; case BroadphaseType.Axis3SweepBroadphase: broadphase = new AxisSweep3(physicWorldParameters.axis3SweepBroadphaseMin, physicWorldParameters.axis3SweepBroadphaseMax, physicWorldParameters.axis3SweepMaxProxies); break; case BroadphaseType.Axis3SweepBroadphase_32bit: broadphase = new AxisSweep3_32Bit(physicWorldParameters.axis3SweepBroadphaseMin, physicWorldParameters.axis3SweepBroadphaseMax, physicWorldParameters.axis3SweepMaxProxies); break; } switch (physicWorldParameters.worldType) { case WorldType.CollisionOnly: World = new CollisionWorld(dispatcher, broadphase, collisionConf); break; case WorldType.RigidBodyDynamics: World = new DiscreteDynamicsWorld(dispatcher, broadphase, null, collisionConf); break; case WorldType.MultiBodyWorld: MultiBodyConstraintSolver mbConstraintSolver = new MultiBodyConstraintSolver(); constraintSolver = mbConstraintSolver; World = new MultiBodyDynamicsWorld(dispatcher, broadphase, mbConstraintSolver, collisionConf); break; case WorldType.SoftBodyAndRigidBody: SequentialImpulseConstraintSolver siConstraintSolver = new SequentialImpulseConstraintSolver(); constraintSolver = siConstraintSolver; siConstraintSolver.RandSeed = physicWorldParameters.sequentialImpulseConstraintSolverRandomSeed; World = new SoftRigidDynamicsWorld(dispatcher, broadphase, siConstraintSolver, collisionConf); _world.DispatchInfo.EnableSpu = true; SoftWorld.WorldInfo.SparseSdf.Initialize(); SoftWorld.WorldInfo.SparseSdf.Reset(); SoftWorld.WorldInfo.AirDensity = 1.2f; SoftWorld.WorldInfo.WaterDensity = 0; SoftWorld.WorldInfo.WaterOffset = 0; SoftWorld.WorldInfo.WaterNormal = BulletSharp.Math.Vector3.Zero; SoftWorld.WorldInfo.Gravity = physicWorldParameters.gravity; break; } if (_world is DiscreteDynamicsWorld) { ((DiscreteDynamicsWorld)_world).Gravity = physicWorldParameters.gravity; } Debug.LogFormat("Physic World of type {0} Instanced", physicWorldParameters.worldType); if (physicWorldParameters.debug) { Debug.Log("Physic World Debug is active"); DebugDrawUnity db = new DebugDrawUnity(); db.DebugMode = physicWorldParameters.debugDrawMode; _world.DebugDrawer = db; } }