You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
163 lines
6.7 KiB
163 lines
6.7 KiB
using UnityEngine; |
|
#if UNITY_5_3_OR_NEWER |
|
using UnityEditor.SceneManagement; |
|
#endif |
|
using UnityEditor; |
|
|
|
namespace FairyGUIEditor |
|
{ |
|
/// <summary> |
|
/// |
|
/// </summary> |
|
[CustomEditor(typeof(FairyGUI.UIPanel))] |
|
public class UIPanelEditor : Editor |
|
{ |
|
SerializedProperty packageName; |
|
SerializedProperty componentName; |
|
SerializedProperty packagePath; |
|
SerializedProperty renderMode; |
|
SerializedProperty renderCamera; |
|
SerializedProperty sortingOrder; |
|
SerializedProperty position; |
|
SerializedProperty scale; |
|
SerializedProperty rotation; |
|
SerializedProperty fairyBatching; |
|
SerializedProperty fitScreen; |
|
SerializedProperty touchDisabled; |
|
SerializedProperty hitTestMode; |
|
SerializedProperty setNativeChildrenOrder; |
|
|
|
string[] propertyToExclude; |
|
|
|
void OnEnable() |
|
{ |
|
packageName = serializedObject.FindProperty("packageName"); |
|
componentName = serializedObject.FindProperty("componentName"); |
|
packagePath = serializedObject.FindProperty("packagePath"); |
|
renderMode = serializedObject.FindProperty("renderMode"); |
|
renderCamera = serializedObject.FindProperty("renderCamera"); |
|
sortingOrder = serializedObject.FindProperty("sortingOrder"); |
|
position = serializedObject.FindProperty("position"); |
|
scale = serializedObject.FindProperty("scale"); |
|
rotation = serializedObject.FindProperty("rotation"); |
|
fairyBatching = serializedObject.FindProperty("fairyBatching"); |
|
fitScreen = serializedObject.FindProperty("fitScreen"); |
|
touchDisabled = serializedObject.FindProperty("touchDisabled"); |
|
hitTestMode = serializedObject.FindProperty("hitTestMode"); |
|
setNativeChildrenOrder = serializedObject.FindProperty("setNativeChildrenOrder"); |
|
|
|
|
|
propertyToExclude = new string[] { "m_Script", "packageName", "componentName", "packagePath", "renderMode", |
|
"renderCamera", "sortingOrder", "position", "scale", "rotation", "fairyBatching", "fitScreen","touchDisabled", |
|
"hitTestMode","cachedUISize","setNativeChildrenOrder" |
|
}; |
|
} |
|
|
|
public override void OnInspectorGUI() |
|
{ |
|
serializedObject.Update(); |
|
|
|
FairyGUI.UIPanel panel = target as FairyGUI.UIPanel; |
|
|
|
DrawPropertiesExcluding(serializedObject, propertyToExclude); |
|
|
|
EditorGUILayout.BeginHorizontal(); |
|
EditorGUILayout.PrefixLabel("Package Name"); |
|
if (GUILayout.Button(packageName.stringValue, "ObjectField")) |
|
EditorWindow.GetWindow<PackagesWindow>(true, "Select a UI Component").SetSelection(packageName.stringValue, componentName.stringValue); |
|
|
|
if (GUILayout.Button("Clear", GUILayout.Width(50))) |
|
{ |
|
#if UNITY_2018_3_OR_NEWER |
|
bool isPrefab = PrefabUtility.GetPrefabAssetType(panel) != PrefabAssetType.NotAPrefab; |
|
#else |
|
bool isPrefab = PrefabUtility.GetPrefabType(panel) == PrefabType.Prefab; |
|
#endif |
|
panel.SendMessage("OnUpdateSource", new object[] { null, null, null, !isPrefab }); |
|
|
|
#if UNITY_5_3_OR_NEWER |
|
EditorSceneManager.MarkSceneDirty(EditorSceneManager.GetActiveScene()); |
|
#elif UNITY_5 |
|
EditorApplication.MarkSceneDirty(); |
|
#else |
|
EditorUtility.SetDirty(panel); |
|
#endif |
|
} |
|
EditorGUILayout.EndHorizontal(); |
|
|
|
EditorGUILayout.BeginHorizontal(); |
|
EditorGUILayout.PrefixLabel("Component Name"); |
|
if (GUILayout.Button(componentName.stringValue, "ObjectField")) |
|
EditorWindow.GetWindow<PackagesWindow>(true, "Select a UI Component").SetSelection(packageName.stringValue, componentName.stringValue); |
|
EditorGUILayout.EndHorizontal(); |
|
|
|
EditorGUILayout.BeginHorizontal(); |
|
EditorGUILayout.PrefixLabel("Package Path"); |
|
EditorGUILayout.LabelField(packagePath.stringValue, (GUIStyle)"helpbox"); |
|
EditorGUILayout.EndHorizontal(); |
|
|
|
if (Application.isPlaying) |
|
EditorGUILayout.EnumPopup("Render Mode", panel.container.renderMode); |
|
else |
|
EditorGUILayout.PropertyField(renderMode); |
|
if ((RenderMode)renderMode.enumValueIndex != RenderMode.ScreenSpaceOverlay) |
|
EditorGUILayout.PropertyField(renderCamera); |
|
|
|
int oldSortingOrder = panel.sortingOrder; |
|
EditorGUILayout.PropertyField(sortingOrder); |
|
EditorGUILayout.PropertyField(fairyBatching); |
|
EditorGUILayout.PropertyField(hitTestMode); |
|
EditorGUILayout.PropertyField(touchDisabled); |
|
EditorGUILayout.PropertyField(setNativeChildrenOrder); |
|
EditorGUILayout.Separator(); |
|
EditorGUILayout.LabelField("UI Transform", (GUIStyle)"OL Title"); |
|
EditorGUILayout.Separator(); |
|
EditorGUI.BeginChangeCheck(); |
|
EditorGUILayout.PropertyField(position); |
|
EditorGUILayout.PropertyField(rotation); |
|
EditorGUILayout.PropertyField(scale); |
|
EditorGUILayout.Space(); |
|
|
|
FairyGUI.FitScreen oldFitScreen = (FairyGUI.FitScreen)fitScreen.enumValueIndex; |
|
EditorGUILayout.PropertyField(fitScreen); |
|
|
|
if (serializedObject.ApplyModifiedProperties()) |
|
{ |
|
#if UNITY_2018_3_OR_NEWER |
|
bool isPrefab = PrefabUtility.GetPrefabAssetType(panel) != PrefabAssetType.NotAPrefab; |
|
#else |
|
bool isPrefab = PrefabUtility.GetPrefabType(panel) == PrefabType.Prefab; |
|
#endif |
|
if (!isPrefab) |
|
{ |
|
panel.ApplyModifiedProperties(sortingOrder.intValue != oldSortingOrder, (FairyGUI.FitScreen)fitScreen.enumValueIndex != oldFitScreen); |
|
} |
|
} |
|
} |
|
|
|
void OnSceneGUI() |
|
{ |
|
FairyGUI.UIPanel panel = (target as FairyGUI.UIPanel); |
|
if (panel.container == null) |
|
return; |
|
|
|
Vector3 pos = panel.GetUIWorldPosition(); |
|
float sizeFactor = HandleUtility.GetHandleSize(pos); |
|
#if UNITY_2017_1_OR_NEWER |
|
Vector3 newPos = Handles.FreeMoveHandle(pos, Quaternion.identity, sizeFactor, Vector3.one, Handles.ArrowHandleCap); |
|
#else |
|
Vector3 newPos = Handles.FreeMoveHandle(pos, Quaternion.identity, sizeFactor, Vector3.one, Handles.ArrowCap); |
|
#endif |
|
if (newPos != pos) |
|
{ |
|
Vector2 v1 = HandleUtility.WorldToGUIPoint(pos); |
|
Vector2 v2 = HandleUtility.WorldToGUIPoint(newPos); |
|
Vector3 delta = v2 - v1; |
|
delta.x = (int)delta.x; |
|
delta.y = (int)delta.y; |
|
|
|
panel.MoveUI(delta); |
|
} |
|
} |
|
} |
|
}
|
|
|