Exemplo n.º 1
0
        private void DrawVector3(Rect position, SerializedProperty property, GUIContent label)
        {
            position = EditorGUI.PrefixLabel(position, label);

            float btnw = Mathf.Min(position.width, BTN_WIDTH);
            var   rbtn = new Rect(position.xMax - btnw, position.yMin, btnw, EditorGUIUtility.singleLineHeight);

            var v = property.vector3Value;

            if (v == Vector3.zero)
            {
                v = Vector3.forward;
                property.vector3Value = Vector3.forward;
            }

            Vector3Directions i = Vector3Directions.Configure;

            if (v == Vector3.up)
            {
                i = Vector3Directions.Up;
            }
            else if (v == Vector3.down)
            {
                i = Vector3Directions.Down;
            }
            else if (v == Vector3.right)
            {
                i = Vector3Directions.Right;
            }
            else if (v == Vector3.left)
            {
                i = Vector3Directions.Left;
            }
            else if (v == Vector3.forward)
            {
                i = Vector3Directions.Forward;
            }
            else if (v == Vector3.back)
            {
                i = Vector3Directions.Backward;
            }
            else
            {
                i = Vector3Directions.Configure;
            }

            EditorGUI.BeginChangeCheck();
            i = (Vector3Directions)EditorGUI.EnumPopup(rbtn, i);
            if (EditorGUI.EndChangeCheck())
            {
                switch (i)
                {
                case Vector3Directions.Up:
                    property.vector3Value = Vector3.up;
                    break;

                case Vector3Directions.Down:
                    property.vector3Value = Vector3.down;
                    break;

                case Vector3Directions.Right:
                    property.vector3Value = Vector3.right;
                    break;

                case Vector3Directions.Left:
                    property.vector3Value = Vector3.left;
                    break;

                case Vector3Directions.Forward:
                    property.vector3Value = Vector3.forward;
                    break;

                case Vector3Directions.Backward:
                    property.vector3Value = Vector3.back;
                    break;
                }
            }

            if (i < Vector3Directions.Configure)
            {
                float w  = (position.width - btnw) / 3f;
                var   r1 = new Rect(position.xMin, position.yMin, w, EditorGUIUtility.singleLineHeight);
                var   r2 = new Rect(r1.xMax, position.yMin, w, EditorGUIUtility.singleLineHeight);
                var   r3 = new Rect(r2.xMax, position.yMin, w, EditorGUIUtility.singleLineHeight);

                EditorGUI.LabelField(r1, "X: " + v.x.ToString("0.#######"));
                EditorGUI.LabelField(r2, "Y: " + v.y.ToString("0.#######"));
                EditorGUI.LabelField(r3, "Z: " + v.z.ToString("0.#######"));
            }
            else
            {
                //TODO - need way to make this work effectively
                var r = new Rect(position.xMin, position.yMin, position.width - btnw, EditorGUIUtility.singleLineHeight);
                EditorGUI.BeginChangeCheck();
                v = SPEditorGUI.DelayedVector3Field(r, GUIContent.none, v);
                if (EditorGUI.EndChangeCheck())
                {
                    property.vector3Value = v.normalized;
                }
            }
        }