158 lines
6.7 KiB
C#
158 lines
6.7 KiB
C#
|
using UnityEngine;
|
|||
|
using UnityEditor;
|
|||
|
using UnityEditor.SceneManagement;
|
|||
|
|
|||
|
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 });
|
|||
|
|
|||
|
EditorSceneManager.MarkSceneDirty(EditorSceneManager.GetActiveScene());
|
|||
|
}
|
|||
|
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_2022_2_OR_NEWER
|
|||
|
Vector3 newPos = Handles.FreeMoveHandle(pos, sizeFactor, Vector3.one, Handles.ArrowHandleCap);
|
|||
|
#elif 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);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|