Exemplo n.º 1
0
    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);
    }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
    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);
    }