using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor; using System.IO; using UnityEngine.UI; public static class ButtonAreaTool { static public void OnGUI() { ToolsHelper.DisplayFolderPath(); if (GUILayout.Button("查找")) { m_ButtonDict.Clear(); m_ButtonPaths.Clear(); m_SpreadDict.Clear(); StartFindButton(); } GUILayout.BeginHorizontal(); GUILayout.Label(m_ExportPath); if (GUILayout.Button("导出路径")) { m_ExportPath = EditorUtility.OpenFolderPanel("导出路径", "", ""); } if (m_ButtonDict.Count > 0 && GUILayout.Button("导出")) { Export(); } GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); m_ScrollPosition = GUILayout.BeginScrollView(m_ScrollPosition); var _index = 0; foreach (var _prefab in m_ButtonDict.Keys) { GUILayout.BeginHorizontal(); EditorGUILayout.ObjectField(_prefab, typeof(GameObject), false); if(GUILayout.Button(m_SpreadDict[_prefab]? "收起" : "展开")) { m_SpreadDict[_prefab] = !m_SpreadDict[_prefab]; } GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); if (!m_SpreadDict[_prefab]) { continue; } var _list = m_ButtonDict[_prefab]; for (int i = 0; i < _list.Count; i++) { GUILayout.BeginHorizontal(); if (GUILayout.Button("Goto")) { var _go = GameObject.Find(m_ButtonPaths[_index]); if (_go != null) { Selection.activeGameObject = _go; } } EditorGUILayout.Vector2Field("按钮区域",_list[i].buttonArea); if (!_list[i].Equals(default(Vector2))) { EditorGUILayout.Vector2Field("检测区域", _list[i].rayArea); } GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); _index++; } GUILayout.Space(10); } GUILayout.EndScrollView(); } static Dictionary> m_ButtonDict = new Dictionary>(); static Dictionary m_SpreadDict = new Dictionary(); static List m_ButtonPaths = new List(); static Vector2 m_ScrollPosition = Vector2.zero; static string m_ExportPath = string.Empty; static void StartFindButton() { var _files = Directory.GetFiles(ToolsHelper.folderPath, "*.prefab", SearchOption.AllDirectories); if (_files == null || _files.Length == 0) { return; } var _index = 0; EditorApplication.update = delegate () { var _file = _files[_index]; GameObject _prefab = AssetDatabase.LoadAssetAtPath(ToolsHelper.GetRelativeAssetsPath(_file), typeof(GameObject)) as GameObject; if (_prefab != null) { var _buttons = _prefab.GetComponentsInChildren