コード例 #1
0
    //
    // 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;
    }
コード例 #2
0
    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;
        }
    }