protected override void OnAttach() { if (NativeCollisionObject == null) { MotionState = new XenkoMotionState(this); SetupBoneLink(); var rbci = new BulletSharp.RigidBodyConstructionInfo(0.0f, MotionState, ColliderShape.InternalShape, Vector3.Zero); InternalRigidBody = new BulletSharp.RigidBody(rbci) { UserObject = this, }; NativeCollisionObject = InternalRigidBody; NativeCollisionObject.ContactProcessingThreshold = !Simulation.CanCcd ? 1e18f : 1e30f; } if (ColliderShape.NeedsCustomCollisionCallback) { NativeCollisionObject.CollisionFlags |= BulletSharp.CollisionFlags.CustomMaterialCallback; } if (ColliderShape.Is2D) //set different defaults for 2D shapes { InternalRigidBody.LinearFactor = new Vector3(1.0f, 1.0f, 0.0f); InternalRigidBody.AngularFactor = new Vector3(0.0f, 0.0f, 1.0f); } var inertia = ColliderShape.InternalShape.CalculateLocalInertia(mass); InternalRigidBody.SetMassProps(mass, inertia); InternalRigidBody.UpdateInertiaTensor(); //this was the major headache when I had to debug Slider and Hinge constraint base.OnAttach(); Mass = mass; LinearDamping = linearDamping; AngularDamping = angularDamping; OverrideGravity = overrideGravity; Gravity = gravity; RigidBodyType = type; Simulation.AddRigidBody(this, (CollisionFilterGroupFlags)CollisionGroup, CanCollideWith); }