Пример #1
0
    void OnSceneGUI()
    {
        UnityJoint joint = target as UnityJoint;

        if (joint.transform.childCount == 0)
        {
            return;
        }
        Transform  child   = joint.transform.GetChild(0);
        Vector3    forward = (child.position - joint.transform.position).normalized;
        float      radius  = Vector3.Distance(child.position, joint.transform.position);
        Quaternion rot     = Quaternion.Euler(0, -Mathf.Abs(joint.MaxAngleCCW), 0);

        SolidArc t = new SolidArc();

        t.from  = rot * forward;
        t.angle = joint.MaxAngleCW + joint.MaxAngleCCW;

        if (joint.YAxisRotation == UnityJoint.AxisRotState_Enum.Constrained)
        {
            Handles.color = new Color(0, 1, 0, 0.2f);
            Vector3 from  = Quaternion.Euler(0, -joint.YMinAngle, 0) * forward;
            float   angle = joint.YMinAngle + joint.YMaxAngle;
            Handles.DrawSolidArc(joint.transform.position,
                                 Vector3.up, from, angle, radius);
        }

        if (joint.XAxisRotation == UnityJoint.AxisRotState_Enum.Constrained)
        {
            Handles.color = new Color(1, 0, 0, 0.2f);
            Vector3 from  = Quaternion.Euler(-joint.XMinAngle, 0, 0) * Vector3.up;
            float   angle = joint.XMinAngle + joint.XMaxAngle;
            Handles.DrawSolidArc(joint.transform.position,
                                 Vector3.right, from, angle, radius);
        }

        if (joint.ZAxisRotation == UnityJoint.AxisRotState_Enum.Constrained)
        {
            Handles.color = new Color(0, 0, 1, 0.2f);
            Vector3 from  = Quaternion.Euler(0, 0, -joint.ZMinAngle) * forward;
            float   angle = joint.ZMinAngle + joint.ZMaxAngle;
            Handles.DrawSolidArc(joint.transform.position,
                                 Vector3.forward, from, angle, radius);
        }

        Handles.color = Color.magenta;
        Handles.DrawAAPolyLine(5, new Vector3[] { joint.transform.position, child.position });

        Handles.color = Color.white;
    }
Пример #2
0
    private static void AddJoints(Transform parent, IList <UnityJoint> jointsList)
    {
        UnityJoint jointComponent = parent.GetComponent <UnityJoint>();

        if (jointComponent != null && jointComponent.enabled)
        {
            jointsList.Add(jointComponent);
        }

        foreach (Transform child in parent)
        {
            AddJoints(child, jointsList);
            break; // Only 1 child per joint allowed for now!!
        }
    }
Пример #3
0
    public static void ApplyJointTransforms(Transform root, IList <Joint> joints, int i = 0)
    {
        UnityJoint jointComponent = root.GetComponent <UnityJoint>();

        if (jointComponent != null && jointComponent.enabled)
        {
            jointComponent.transform.position = joints[i].Position;
            jointComponent.transform.rotation = joints[i].Orientation;
            i++;
        }

        foreach (Transform child in root)
        {
            ApplyJointTransforms(child, joints, i);
            break; // Only 1 child per joint allowed for now!!
        }
    }
Пример #4
0
    public Joint(UnityJoint unityJoint)
    {
        this.unityJoint = unityJoint.transform;

        //position = unityJoint.transform.position;
        //orientation = unityJoint.transform.rotation;

        restPosition    = Position;
        restOrientation = Orientation;
        if (unityJoint.joint != null)
        {
            restPosition    = unityJoint.joint.restPosition;
            restOrientation = unityJoint.joint.restOrientation;
        }

        HasConstraint = unityJoint.HasConstraint;
        UpAxis        = unityJoint.UpAxis;
        MaxAngleCW    = unityJoint.MaxAngleCW;
        MaxAngleCCW   = unityJoint.MaxAngleCCW;
    }