void DrawRotation() { GUILayout.BeginHorizontal(new GUILayoutOption[0]); { Vector3 eulerAngles = (base.serializedObject.targetObject as Transform).rotation.eulerAngles; SetColor((eulerAngles == Vector3.zero) ? Color.white : Color.gray, 0.5f); GUI.skin.button.padding = new RectOffset(0, 0, 0, 0); Texture2D image = (Texture2D)EditorGUIUtility.Load((eulerAngles == Vector3.zero) ? "d_RotateTool" : "d_RotateTool On"); if (GUILayout.Button(new GUIContent(image, "Reset Rotation"), GUILayout.Width(32f), GUILayout.Height(_buttonHeight))) { Undo.RecordObject(ExTransform.transform, "Reset Rotation " + ExTransform.transform.name); this.mRot.quaternionValue = Quaternion.identity; base.serializedObject.ApplyModifiedProperties(); } if (this.mRot != null) { this.mRotEuler = this.mRot.quaternionValue.eulerAngles; } EditorGUI.BeginChangeCheck(); { GUI.skin.button.padding = new RectOffset(6, 6, 2, 3); Vector3 localEulerAngles = (base.serializedObject.targetObject as Transform).localEulerAngles; ExTransform.Axes axes = this.CheckDifference(this.mRot); GUILayoutOption opt = GUILayout.MinWidth(30f); SetColor(redLt, 0.5f); this.mRotEuler.x = EditorGUILayout.FloatField("X", this.mRotEuler.x, new GUILayoutOption[0]); SetColor(greenLt, 0.5f); this.mRotEuler.y = EditorGUILayout.FloatField("Y", this.mRotEuler.y, new GUILayoutOption[0]); SetColor(blueLt, 0.5f); this.mRotEuler.z = EditorGUILayout.FloatField("Z", this.mRotEuler.z, new GUILayoutOption[0]); ResetColors(); } if (EditorGUI.EndChangeCheck()) { Undo.RecordObject(ExTransform.transform, "Rotation Changed" + ExTransform.transform.name); this.mRot.quaternionValue = Quaternion.Euler(this.mRotEuler); base.serializedObject.ApplyModifiedProperties(); } } GUILayout.EndHorizontal(); }
ExTransform.Axes CheckDifference(SerializedProperty property) { ExTransform.Axes axes = ExTransform.Axes.None; if (property.hasMultipleDifferentValues) { Vector3 eulerAngles = property.quaternionValue.eulerAngles; UnityEngine.Object[] targetObjects = base.serializedObject.targetObjects; for (int i = 0; i < targetObjects.Length; i++) { UnityEngine.Object @object = targetObjects[i]; axes |= ExTransform.CheckDifference(@object as Transform, eulerAngles); if (axes == ExTransform.Axes.All) { break; } } } return(axes); }
static ExTransform.Axes CheckDifference(Transform t, Vector3 original) { Vector3 localEulerAngles = t.localEulerAngles; ExTransform.Axes axes = ExTransform.Axes.None; if (ExTransform.Differs(localEulerAngles.x, original.x)) { axes |= ExTransform.Axes.X; } if (ExTransform.Differs(localEulerAngles.y, original.y)) { axes |= ExTransform.Axes.Y; } if (ExTransform.Differs(localEulerAngles.z, original.z)) { axes |= ExTransform.Axes.Z; } return(axes); }