NGUIはpositionなどのリセットが便利。 ※デフォルトのは出ないのは注意!
http://answers.unity3d.com/questions/1076559/how-do-i-get-the-default-inspector-for-a-customedi.html
RectTransformでも同じことをしたい。
NGUIはNGUITransformInspector.csにある。 uGUIでも使いたいので移植。 RectTransform.csをEditorに入れて使おう。
using UnityEngine; using UnityEditor; using System.Collections; using UnityEngine.UI; [CustomEditor(typeof(RectTransform))] public class RectTransformInspector : Editor { static public RectTransformInspector instance; static public void SetLabelWidth (float width) { #if UNITY_3_5 || UNITY_4_0 || UNITY_4_1 || UNITY_4_2 || UNITY_5_4 EditorGUIUtility.LookLikeControls(width); #else EditorGUIUtility.labelWidth = width; #endif } void OnDestroy () { instance = null; } public override void OnInspectorGUI () { // デフォルトも表示させる場合が・・できない. DrawDefaultInspector(); RectTransform trans = target as RectTransform; SetLabelWidth (15f); Vector3 pos; Vector3 rot; Vector3 scale; // Position EditorGUILayout.BeginHorizontal (); { if (DrawButton ("P", "Reset Position", IsResetPositionValid (trans), 20f)) { RegisterUndo ("Reset Position", trans); trans.localPosition = Vector3.zero; } pos = DrawVector3 (trans.localPosition); } EditorGUILayout.EndHorizontal (); // Rotation EditorGUILayout.BeginHorizontal (); { if (DrawButton ("R", "Reset Rotation", IsResetRotationValid (trans), 20f)) { RegisterUndo ("Reset Rotation", trans); trans.localEulerAngles = Vector3.zero; } rot = DrawVector3 (trans.localEulerAngles); } EditorGUILayout.EndHorizontal (); // Scale EditorGUILayout.BeginHorizontal (); { if (DrawButton ("S", "Reset Scale", IsResetScaleValid (trans), 20f)) { RegisterUndo ("Reset Scale", trans); trans.localScale = Vector3.one; } scale = DrawVector3 (trans.localScale); } EditorGUILayout.EndHorizontal (); } /// <summary> /// Helper function that draws a button in an enabled or disabled state. /// </summary> static bool DrawButton (string title, string tooltip, bool enabled, float width) { if (enabled) { // Draw a regular button return GUILayout.Button (new GUIContent (title, tooltip), GUILayout.Width (width)); } else { // Button should be disabled -- draw it darkened and ignore its return value Color color = GUI.color; GUI.color = new Color (1f, 1f, 1f, 0.25f); GUILayout.Button (new GUIContent (title, tooltip), GUILayout.Width (width)); GUI.color = color; return false; } } /// <summary> /// Helper function that determines whether its worth it to show the reset position button. /// </summary> static bool IsResetPositionValid (Transform targetTransform) { Vector3 v = targetTransform.localPosition; return (v.x != 0f || v.y != 0f || v.z != 0f); } /// <summary> /// Helper function that determines whether its worth it to show the reset rotation button. /// </summary> static bool IsResetRotationValid (Transform targetTransform) { Vector3 v = targetTransform.localEulerAngles; return (v.x != 0f || v.y != 0f || v.z != 0f); } /// <summary> /// Helper function that determines whether its worth it to show the reset scale button. /// </summary> static bool IsResetScaleValid (Transform targetTransform) { Vector3 v = targetTransform.localScale; return (v.x != 1f || v.y != 1f || v.z != 1f); } /// <summary> /// Helper function that draws a field of 3 floats. /// </summary> static Vector3 DrawVector3 (Vector3 value) { GUILayoutOption opt = GUILayout.MinWidth (30f); value.x = EditorGUILayout.FloatField ("X", value.x, opt); value.y = EditorGUILayout.FloatField ("Y", value.y, opt); value.z = EditorGUILayout.FloatField ("Z", value.z, opt); return value; } /// <summary> /// Create an undo point for the specified objects. /// </summary> static public void RegisterUndo (string name, params Object[] objects) { if (objects != null && objects.Length > 0) { #if UNITY_3_5 || UNITY_4_0 || UNITY_4_1 || UNITY_4_2 UnityEditor.Undo.RegisterUndo(objects, name); #else UnityEditor.Undo.RecordObjects (objects, name); #endif foreach (Object obj in objects) { if (obj == null) { continue; } EditorUtility.SetDirty (obj); } } } }

- 作者: 浅野祐一,荒川巧也,森信虎
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2013/07/27
- メディア: 大型本
- この商品を含むブログ (12件) を見る