/** * @brief Add a new RigidBody to the world. * * @param jRigidBody Instance of a {@link FPRigidBody}. **/ public void AddBody(ICollider iCollider) { if (!(iCollider is FPCollider)) { Debug.LogError("You have a 2D object but your Physics 2D is disabled."); return; } FPCollider FPCollider = (FPCollider)iCollider; if (FPCollider._body != null) { //already added return; } FPRigidBody tsRB = FPCollider.GetComponent <FPRigidBody>(); FPRigidBodyConstraints constraints = tsRB != null ? tsRB.constraints : FPRigidBodyConstraints.None; FPCollider.Initialize(); world.AddBody(FPCollider._body); gameObjectMap[FPCollider._body] = FPCollider.gameObject; if (FPCollider.gameObject.transform.parent != null && FPCollider.gameObject.transform.parent.GetComponentInParent <FPCollider>() != null) { FPCollider parentCollider = FPCollider.gameObject.transform.parent.GetComponentInParent <FPCollider>(); world.AddConstraint(new ConstraintHierarchy(parentCollider.Body, FPCollider._body, (FPCollider.GetComponent <FPTransform>().position + FPCollider.ScaledCenter) - (parentCollider.GetComponent <FPTransform>().position + parentCollider.ScaledCenter))); } FPCollider._body.FreezeConstraints = constraints; }