public void Rebuild(Transform root) { elements = new List <Element>(); var bodies = root.GetComponentsInChildren <Rigidbody>(true); foreach (var rb in bodies) { var collider = rb.GetComponent <Collider>(); if (collider != null) { var joint = rb.GetComponent <CharacterJoint>(); var elem = new Element(); elem.path = Utils.GetChildPath(root, rb.transform); elem.collider = ColliderDescription.New(collider); elem.rigidBody = RigidbodyDescription.New(rb); if (joint != null) { elem.joint = CharacterJointDescription.New(joint, root); } elements.Add(elem); } } EditorUtility.SetDirty(this); }
public static CharacterJointDescription New(CharacterJoint joint, Transform root) { var d = new CharacterJointDescription(); d.exists = true; d.connectedBody = (joint.connectedBody != null) ? root.GetChildPath(joint.connectedBody.transform) : ""; d.anchor = joint.anchor; d.axis = joint.axis; d.autoConfigureConnected = joint.autoConfigureConnectedAnchor; d.connectedAnchor = joint.connectedAnchor; d.swingAxis = joint.swingAxis; d.twistLimitSpring = joint.twistLimitSpring; d.lowTwistLimit = joint.lowTwistLimit; d.highTwistLimit = joint.highTwistLimit; d.swingLimitSpring = joint.swingLimitSpring; d.swing1Limit = joint.swing1Limit; d.swing2Limit = joint.swing2Limit; d.enableProjection = joint.enableProjection; d.projectionDistance = joint.projectionDistance; d.projectionAngle = joint.projectionAngle; d.breakForce = joint.breakForce; d.breakTorque = joint.breakTorque; d.enableCollision = joint.enableCollision; d.enablePreprocessing = joint.enablePreprocessing; return(d); }
public static RagdollAsset Create(Transform root, string path) { List <Element> elements = new List <Element>(); var bodies = root.GetComponentsInChildren <Rigidbody>(true); foreach (var rb in bodies) { var collider = rb.GetComponent <Collider>(); if (collider != null) { var joint = rb.GetComponent <CharacterJoint>(); var elem = new Element(); elem.path = Utils.GetChildPath(root, rb.transform); elem.collider = ColliderDescription.New(collider); elem.rigidBody = RigidbodyDescription.New(rb); if (joint != null) { elem.joint = CharacterJointDescription.New(joint, root); } elements.Add(elem); } } RagdollAsset asset = null; if (elements.Count > 0) { asset = Utils.CreateAsset <RagdollAsset>(path); asset.elements = elements; } return(asset); }