using UnityEngine; using UnityEngine.UI; using System.Collections; using UnityEditor; #if UNITY_5_3 using UnityEditor.SceneManagement; #endif [CustomEditor(typeof(ETCButton))] public class ETCButtonInspector : Editor { public string[] unityAxes; void OnEnable(){ var inputManager = AssetDatabase.LoadAllAssetsAtPath("ProjectSettings/InputManager.asset")[0]; SerializedObject obj = new SerializedObject(inputManager); SerializedProperty axisArray = obj.FindProperty("m_Axes"); if (axisArray.arraySize > 0){ unityAxes = new string[axisArray.arraySize]; for( int i = 0; i < axisArray.arraySize; ++i ){ var axis = axisArray.GetArrayElementAtIndex(i); unityAxes[i] = axis.FindPropertyRelative("m_Name").stringValue; } } } public override void OnInspectorGUI(){ ETCButton t = (ETCButton)target; EditorGUILayout.Space(); t.gameObject.name = EditorGUILayout.TextField("Button name",t.gameObject.name); t.axis.name = t.gameObject.name; t.activated = ETCGuiTools.Toggle("Activated",t.activated,true); t.visible = ETCGuiTools.Toggle("Visible",t.visible,true); EditorGUILayout.Space(); t.useFixedUpdate = ETCGuiTools.Toggle("Use Fixed Update",t.useFixedUpdate,true); t.isUnregisterAtDisable = ETCGuiTools.Toggle("Unregister at disabling time",t.isUnregisterAtDisable,true); #region Position & Size t.showPSInspector = ETCGuiTools.BeginFoldOut( "Position & Size",t.showPSInspector); if (t.showPSInspector){ ETCGuiTools.BeginGroup();{ // Anchor t.anchor = (ETCBase.RectAnchor)EditorGUILayout.EnumPopup( "Anchor",t.anchor); if (t.anchor != ETCBase.RectAnchor.UserDefined){ t.anchorOffet = EditorGUILayout.Vector2Field("Offset",t.anchorOffet); } EditorGUILayout.Space(); // Area sprite ratio if (t.GetComponent().sprite != null){ Rect rect = t.GetComponent().sprite.rect; float ratio = rect.width / rect.height; // Area Size if (ratio>=1){ float s = EditorGUILayout.FloatField("Size", t.rectTransform().rect.width); t.rectTransform().SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal,s); t.rectTransform().SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical,s/ratio); } else{ float s = EditorGUILayout.FloatField("Size", t.rectTransform().rect.height); t.rectTransform().SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical,s); t.rectTransform().SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal,s*ratio); } } }ETCGuiTools.EndGroup(); } #endregion #region Behaviour t.showBehaviourInspector = ETCGuiTools.BeginFoldOut( "Behaviour",t.showBehaviourInspector); if (t.showBehaviourInspector){ ETCGuiTools.BeginGroup();{ EditorGUILayout.Space(); ETCGuiTools.BeginGroup(5);{ t.enableKeySimulation = ETCGuiTools.Toggle("Enable Unity axes",t.enableKeySimulation,true); if (t.enableKeySimulation){ t.allowSimulationStandalone = ETCGuiTools.Toggle("Allow Unity axes on standalone",t.allowSimulationStandalone,true); t.visibleOnStandalone = ETCGuiTools.Toggle("Force visible",t.visibleOnStandalone,true); } }ETCGuiTools.EndGroup(); #region General propertie EditorGUI.indentLevel++; t.axis.showGeneralInspector = EditorGUILayout.Foldout(t.axis.showGeneralInspector,"General setting"); if (t.axis.showGeneralInspector){ ETCGuiTools.BeginGroup(20);{ EditorGUI.indentLevel--; t.isSwipeIn = ETCGuiTools.Toggle("Swipe in",t.isSwipeIn,true); t.isSwipeOut = ETCGuiTools.Toggle("Swipe out",t.isSwipeOut,true); t.axis.isValueOverTime = ETCGuiTools.Toggle("Value over the time",t.axis.isValueOverTime,true); if (t.axis.isValueOverTime){ ETCGuiTools.BeginGroup(5);{ t.axis.overTimeStep = EditorGUILayout.FloatField("Step",t.axis.overTimeStep); t.axis.maxOverTimeValue = EditorGUILayout.FloatField("Max value",t.axis.maxOverTimeValue); }ETCGuiTools.EndGroup(); } t.axis.speed = EditorGUILayout.FloatField("Value",t.axis.speed); EditorGUI.indentLevel++; }ETCGuiTools.EndGroup(); } EditorGUI.indentLevel--; #endregion #region Direct Action EditorGUI.indentLevel++; t.axis.showDirectInspector = EditorGUILayout.Foldout(t.axis.showDirectInspector,"Direction ation"); if (t.axis.showDirectInspector){ ETCGuiTools.BeginGroup(20);{ EditorGUI.indentLevel--; t.axis.autoLinkTagPlayer = EditorGUILayout.ToggleLeft("Auto link on tag",t.axis.autoLinkTagPlayer, GUILayout.Width(200)); if (t.axis.autoLinkTagPlayer){ t.axis.autoTag = EditorGUILayout.TagField("",t.axis.autoTag); } else{ t.axis.directTransform = (Transform)EditorGUILayout.ObjectField("Direct action to",t.axis.directTransform,typeof(Transform),true); } EditorGUILayout.Space(); t.axis.actionOn = (ETCAxis.ActionOn)EditorGUILayout.EnumPopup("Action on",t.axis.actionOn); t.axis.directAction = (ETCAxis.DirectAction ) EditorGUILayout.EnumPopup( "Action",t.axis.directAction); if (t.axis.directAction != ETCAxis.DirectAction.Jump){ t.axis.axisInfluenced = (ETCAxis.AxisInfluenced) EditorGUILayout.EnumPopup("Affected axis",t.axis.axisInfluenced); } else{ EditorGUILayout.HelpBox("Required character controller", MessageType.Info); t.axis.gravity = EditorGUILayout.FloatField("Gravity",t.axis.gravity); } EditorGUI.indentLevel++; }ETCGuiTools.EndGroup(); } EditorGUI.indentLevel--; #endregion #region Unity axis EditorGUI.indentLevel++; t.axis.showSimulatinInspector = EditorGUILayout.Foldout(t.axis.showSimulatinInspector,"Unity axes"); if (t.axis.showSimulatinInspector){ ETCGuiTools.BeginGroup(20);{ EditorGUI.indentLevel--; int index = System.Array.IndexOf(unityAxes,t.axis.unityAxis ); int tmpIndex = EditorGUILayout.Popup(index,unityAxes); if (tmpIndex != index){ t.axis.unityAxis = unityAxes[tmpIndex]; } EditorGUI.indentLevel++; }ETCGuiTools.EndGroup(); } EditorGUI.indentLevel--; #endregion }ETCGuiTools.EndGroup(); } #endregion #region Sprite t.showSpriteInspector = ETCGuiTools.BeginFoldOut( "Sprites",t.showSpriteInspector); if (t.showSpriteInspector){ ETCGuiTools.BeginGroup();{ // Normal state EditorGUILayout.BeginHorizontal(); EditorGUI.BeginChangeCheck (); t.normalSprite = (Sprite)EditorGUILayout.ObjectField("Normal",t.normalSprite,typeof(Sprite),true,GUILayout.MinWidth(100)); t.normalColor = EditorGUILayout.ColorField("",t.normalColor,GUILayout.Width(50)); if (EditorGUI.EndChangeCheck ()) { t.GetComponent().sprite = t.normalSprite; t.GetComponent().color = t.normalColor; } EditorGUILayout.EndHorizontal(); EditorGUILayout.Space(); if ( t.normalSprite){ Rect spriteRect = new Rect( t.normalSprite.rect.x/ t.normalSprite.texture.width, t.normalSprite.rect.y/ t.normalSprite.texture.height, t.normalSprite.rect.width/ t.normalSprite.texture.width, t.normalSprite.rect.height/ t.normalSprite.texture.height); GUILayout.Space(8); Rect lastRect = GUILayoutUtility.GetLastRect(); lastRect.x = 20; lastRect.width = 100; lastRect.height = 100; GUILayout.Space(100); ETCGuiTools.DrawTextureRectPreview( lastRect,spriteRect,t.normalSprite.texture,Color.white); } // Press state EditorGUILayout.BeginHorizontal(); t.pressedSprite = (Sprite)EditorGUILayout.ObjectField("Pressed",t.pressedSprite,typeof(Sprite),true,GUILayout.MinWidth(100)); t.pressedColor = EditorGUILayout.ColorField("",t.pressedColor,GUILayout.Width(50)); EditorGUILayout.EndHorizontal(); EditorGUILayout.Space(); if (t.pressedSprite){ Rect spriteRect = new Rect( t.pressedSprite.rect.x/ t.pressedSprite.texture.width, t.pressedSprite.rect.y/ t.pressedSprite.texture.height, t.pressedSprite.rect.width/ t.pressedSprite.texture.width, t.pressedSprite.rect.height/ t.pressedSprite.texture.height); GUILayout.Space(8); Rect lastRect = GUILayoutUtility.GetLastRect(); lastRect.x = 20; lastRect.width = 100; lastRect.height = 100; GUILayout.Space(100); ETCGuiTools.DrawTextureRectPreview( lastRect,spriteRect,t.pressedSprite.texture,Color.white); } }ETCGuiTools.EndGroup(); } #endregion #region Events t.showEventInspector = ETCGuiTools.BeginFoldOut( "Events",t.showEventInspector); if (t.showEventInspector){ ETCGuiTools.BeginGroup();{ serializedObject.Update(); SerializedProperty down = serializedObject.FindProperty("onDown"); EditorGUILayout.PropertyField(down, true, null); serializedObject.ApplyModifiedProperties(); serializedObject.Update(); SerializedProperty press = serializedObject.FindProperty("onPressed"); EditorGUILayout.PropertyField(press, true, null); serializedObject.ApplyModifiedProperties(); serializedObject.Update(); SerializedProperty pressTime = serializedObject.FindProperty("onPressedValue"); EditorGUILayout.PropertyField(pressTime, true, null); serializedObject.ApplyModifiedProperties(); serializedObject.Update(); SerializedProperty up = serializedObject.FindProperty("onUp"); EditorGUILayout.PropertyField(up, true, null); serializedObject.ApplyModifiedProperties(); }ETCGuiTools.EndGroup(); } #endregion if (t.anchor != ETCBase.RectAnchor.UserDefined){ t.SetAnchorPosition(); } if (GUI.changed){ EditorUtility.SetDirty(t); #if UNITY_5_3 EditorSceneManager.MarkSceneDirty( EditorSceneManager.GetActiveScene()); #endif } } }