public BulletPyhsicsReactor() { _hasFloor = true; var configuration = new DefaultCollisionConfiguration(); var dispatcher = new CollisionDispatcher(configuration); BroadphaseInterface broadphase = new DbvtBroadphase(); var solver = new SequentialImpulseConstraintSolver(); _world = new DiscreteDynamicsWorld(dispatcher, broadphase, solver, configuration); Vector3 gravity; _world.GetGravity(out gravity); _gravityDirection = new Vector3(0.0f, -1.0f, 0.0f); _gravityStrength = gravity.Length; var gravityToSet = _gravityDirection * gravity.Length * 10.0f; // the world is scaled by 10, since MikuMikuDance is using 0.1m as its unit. _world.SetGravity(ref gravityToSet); CollisionShape groundShape = new StaticPlaneShape(new Vector3(0.0f, 1.0f, 0.0f), 0.0f); MotionState groundState = new DefaultMotionState(); var info = new RigidBodyConstructionInfo(0.0f, groundState, groundShape, new Vector3(0.0f, 0.0f, 0.0f)); info.LinearDamping = 0.0f; info.AngularDamping = 0.0f; info.Restitution = 0.0f; info.Friction = 0.265f; _groundRigidBody = new RigidBody(info); _groundRigidBody.CollisionFlags = _groundRigidBody.CollisionFlags | CollisionFlags.KinematicObject; _groundRigidBody.ActivationState = ActivationState.DisableDeactivation; _world.AddRigidBody(_groundRigidBody); }