public static Vector2 SingleLineVector2Field(Rect rect, Vector2 value, GUIContent label, float aspectRatio)
        {
            rect = EditorGUI.PrefixLabel(rect, label);
            using (new LabelWidthScope(14))
            {
                int indent = EditorGUI.indentLevel;
                EditorGUI.indentLevel = 0;

                rect.width = (rect.width - 4) * 0.5f;
                using (var scope = ChangeCheckScope.New())
                {
                    value.x = EditorGUI.FloatField(rect, "X", value.x);
                    if (scope.changed)
                    {
                        value.y = value.x / aspectRatio;
                    }
                }

                rect.x = rect.xMax + 4;
                using (var scope = ChangeCheckScope.New())
                {
                    value.y = EditorGUI.FloatField(rect, "Y", value.y);
                    if (scope.changed)
                    {
                        value.x = value.y * aspectRatio;
                    }
                }

                EditorGUI.indentLevel = indent;
            }
            return(value);
        }
Exemple #2
0
        void DrawDistanceHandles()
        {
            if (_distanceStartTrans)
            {
                using (var scope = ChangeCheckScope.New())
                {
                    _distanceStartPos = Handles.PositionHandle(_distanceStartTrans.position, Tools.pivotRotation == PivotRotation.Local ? _distanceStartTrans.rotation : Quaternion.identity);
                    if (scope.changed)
                    {
                        Undo.RecordObject(_distanceStartTrans, "Transform.position");
                        _distanceStartTrans.position = _distanceStartPos;
                        EditorUtility.SetDirty(_distanceStartTrans);
                    }
                }
            }
            else
            {
                using (var scope = ChangeCheckScope.New())
                {
                    _distanceStartPos = Handles.PositionHandle(_distanceStartPos, Quaternion.identity);
                    if (scope.changed)
                    {
                        Repaint();
                    }
                }
            }

            if (_distanceEndTrans)
            {
                using (var scope = ChangeCheckScope.New())
                {
                    _distanceEndPos = Handles.PositionHandle(_distanceEndTrans.position, Tools.pivotRotation == PivotRotation.Local ? _distanceEndTrans.rotation : Quaternion.identity);
                    if (scope.changed)
                    {
                        Undo.RecordObject(_distanceEndTrans, "Transform.position");
                        _distanceEndTrans.position = _distanceEndPos;
                        EditorUtility.SetDirty(_distanceEndTrans);
                    }
                }
            }
            else
            {
                using (var scope = ChangeCheckScope.New())
                {
                    _distanceEndPos = Handles.PositionHandle(_distanceEndPos, Quaternion.identity);
                    if (scope.changed)
                    {
                        Repaint();
                    }
                }
            }

            Handles.DrawLine(_distanceStartPos, _distanceEndPos);
            Handles.Label((_distanceStartPos + _distanceEndPos) * 0.5f, Vector3.Distance(_distanceStartPos, _distanceEndPos).ToString("0.00 m"), EditorStyles.whiteLabel);
        }
        void DrawDistanceUI()
        {
            EditorGUILayout.LabelField("Start");
            using (new IndentScope(2))
            {
                _distanceStartTrans = EditorGUILayout.ObjectField(GUIContent.none, _distanceStartTrans, typeof(Transform), true) as Transform;
                if (_distanceStartTrans)
                {
                    using (var scope = ChangeCheckScope.New())
                    {
                        _distanceStartPos = EditorGUILayout.Vector3Field(GUIContent.none, _distanceStartTrans.position);
                        if (scope.changed)
                        {
                            Undo.RecordObject(_distanceStartTrans, "Transform.position");
                            _distanceStartTrans.position = _distanceStartPos;
                            EditorUtility.SetDirty(_distanceStartTrans);
                        }
                    }
                }
                else
                {
                    _distanceStartPos = EditorGUILayout.Vector3Field(GUIContent.none, _distanceStartPos);
                }
            }

            EditorGUILayout.LabelField("End");
            using (new IndentScope(2))
            {
                _distanceEndTrans = EditorGUILayout.ObjectField(GUIContent.none, _distanceEndTrans, typeof(Transform), true) as Transform;
                if (_distanceEndTrans)
                {
                    using (var scope = ChangeCheckScope.New())
                    {
                        _distanceEndPos = EditorGUILayout.Vector3Field(GUIContent.none, _distanceEndTrans.position);
                        if (scope.changed)
                        {
                            Undo.RecordObject(_distanceEndTrans, "Transform.position");
                            _distanceEndTrans.position = _distanceEndPos;
                            EditorUtility.SetDirty(_distanceEndTrans);
                        }
                    }
                }
                else
                {
                    _distanceEndPos = EditorGUILayout.Vector3Field(GUIContent.none, _distanceEndPos);
                }
            }

            EditorGUILayout.LabelField("Distance");
            using (new IndentScope(2))
            {
                EditorGUILayout.Vector3Field(GUIContent.none, _distanceEndPos - _distanceStartPos);
                EditorGUILayout.FloatField(GUIContent.none, Vector3.Distance(_distanceStartPos, _distanceEndPos));
            }
        }