You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			164 lines
		
	
	
		
			6.9 KiB
		
	
	
	
		
			C#
		
	
			
		
		
	
	
			164 lines
		
	
	
		
			6.9 KiB
		
	
	
	
		
			C#
		
	
| 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);
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| }
 |