using UnityEngine; 
 | 
using UnityEngine.UI; 
 | 
using System.Collections.Generic; 
 | 
using System; 
 | 
using System.Text; 
 | 
  
 | 
#if UNITY_EDITOR 
 | 
using UnityEditor; 
 | 
#endif 
 | 
  
 | 
public class GenerateUICode : MonoBehaviour { 
 | 
} 
 | 
  
 | 
#if UNITY_EDITOR 
 | 
[CustomEditor(typeof(GenerateUICode))] 
 | 
public class GenerateUICodeEditor : Editor { 
 | 
  
 | 
    private Dictionary<int, bool> m_IdToCopy = new Dictionary<int, bool>(); 
 | 
    private Dictionary<int, string> m_IdToPath = new Dictionary<int, string>(); 
 | 
  
 | 
    private void OnEnable() { 
 | 
  
 | 
        m_IdToCopy.Clear(); 
 | 
        m_IdToPath.Clear(); 
 | 
  
 | 
        GenerateUICode _target = target as GenerateUICode; 
 | 
        Transform _child; 
 | 
        for (int i = 0; i < _target.transform.childCount; ++i) { 
 | 
            _child = _target.transform.GetChild(i); 
 | 
            m_IdToCopy.Add(_child.GetInstanceID(), false); 
 | 
            m_IdToPath.Add(_child.GetInstanceID(), GetPath(_child)); 
 | 
            if (_child.childCount > 0) { 
 | 
                GenerateToggle(_child); 
 | 
            } 
 | 
        } 
 | 
  
 | 
    } 
 | 
  
 | 
    private string GetPath(Transform tr) { 
 | 
        GenerateUICode _target = target as GenerateUICode; 
 | 
        string path = tr.name; 
 | 
        while (tr.parent != null 
 | 
            && tr.parent.GetInstanceID() != _target.transform.GetInstanceID()) { 
 | 
            path = tr.parent.name + "/" + path; 
 | 
            tr = tr.parent; 
 | 
        } 
 | 
        return path; 
 | 
    } 
 | 
  
 | 
  
 | 
    public override void OnInspectorGUI() { 
 | 
  
 | 
        EditorGUILayout.BeginHorizontal(); 
 | 
        if (GUILayout.Button("复制定义")) { 
 | 
            CopyDefine(); 
 | 
        } 
 | 
        if (GUILayout.Button("复制获取")) { 
 | 
            CopyGet(); 
 | 
        } 
 | 
        EditorGUILayout.EndHorizontal(); 
 | 
  
 | 
        GenerateUICode _target = target as GenerateUICode; 
 | 
  
 | 
        if (_target.transform.childCount > 0) { 
 | 
  
 | 
            Transform _child; 
 | 
  
 | 
            for (int i = 0; i < _target.transform.childCount; ++i) { 
 | 
                _child = _target.transform.GetChild(i); 
 | 
                EditorGUILayout.BeginHorizontal(); 
 | 
                m_IdToCopy[_child.GetInstanceID()] = EditorGUILayout.ToggleLeft(_child.name, m_IdToCopy[_child.GetInstanceID()]); 
 | 
                EditorGUILayout.EndHorizontal(); 
 | 
                if (_child.childCount > 0) { 
 | 
                    DrawChildren(_child, 1); 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
  
 | 
    } 
 | 
  
 | 
    private void GenerateToggle(Transform parent) { 
 | 
        Transform _child; 
 | 
        for (int i = 0; i < parent.transform.childCount; ++i) { 
 | 
            _child = parent.transform.GetChild(i); 
 | 
            m_IdToCopy.Add(_child.GetInstanceID(), false); 
 | 
            m_IdToPath.Add(_child.GetInstanceID(), GetPath(_child)); 
 | 
            if (_child.childCount > 0) { 
 | 
                GenerateToggle(_child); 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
  
 | 
    private void DrawChildren(Transform parent, int lineSpace) { 
 | 
        Transform _child; 
 | 
        EditorGUI.indentLevel += lineSpace; 
 | 
        for (int i = 0; i < parent.transform.childCount; ++i) { 
 | 
            _child = parent.transform.GetChild(i); 
 | 
            EditorGUILayout.BeginHorizontal(); 
 | 
            m_IdToCopy[_child.GetInstanceID()] = EditorGUILayout.ToggleLeft(_child.name, m_IdToCopy[_child.GetInstanceID()]); 
 | 
            EditorGUILayout.EndHorizontal(); 
 | 
            if (_child.childCount > 0) { 
 | 
                DrawChildren(_child, lineSpace); 
 | 
            } 
 | 
        } 
 | 
        EditorGUI.indentLevel -= lineSpace; 
 | 
    } 
 | 
  
 | 
    private void CopyDefine() { 
 | 
        StringBuilder _content = new StringBuilder(); 
 | 
        GenerateUICode _target = target as GenerateUICode; 
 | 
        Transform _child; 
 | 
        for (int i = 0; i < _target.transform.childCount; ++i) { 
 | 
            _child = _target.transform.GetChild(i); 
 | 
            if (m_IdToCopy[_child.GetInstanceID()]) { 
 | 
                Component[] _components = _child.GetComponents<Image>(); 
 | 
                foreach (var _component in _components) { 
 | 
                    _content.Append("private "); 
 | 
                    _content.Append(typeof(Image).Name); 
 | 
                    _content.Append(" m_Img"); 
 | 
                    _content.Append(_child.name); 
 | 
                    _content.Append(";\r\n"); 
 | 
                } 
 | 
  
 | 
                _components = _child.GetComponents<Text>(); 
 | 
                foreach (var _component in _components) { 
 | 
                    _content.Append("private "); 
 | 
                    _content.Append(typeof(Text).Name); 
 | 
                    _content.Append(" m_Txt"); 
 | 
                    _content.Append(_child.name); 
 | 
                    _content.Append(";\r\n"); 
 | 
                } 
 | 
  
 | 
                _components = _child.GetComponents<Button>(); 
 | 
                foreach (var _component in _components) { 
 | 
                    _content.Append("private "); 
 | 
                    _content.Append(typeof(Button).Name); 
 | 
                    _content.Append(" m_Btn"); 
 | 
                    _content.Append(_child.name); 
 | 
                    _content.Append(";\r\n"); 
 | 
                } 
 | 
            } 
 | 
  
 | 
            if (_child.childCount > 0) { 
 | 
                CopyDefineChildren(_child, _content); 
 | 
            } 
 | 
        } 
 | 
  
 | 
        TextEditor t = new TextEditor(); 
 | 
        t.text = _content.ToString(); 
 | 
        t.OnFocus(); 
 | 
        t.Copy(); 
 | 
        _content = null; 
 | 
    } 
 | 
  
 | 
    private void CopyGet() { 
 | 
        // UGUITool.GetChildControl<Button>(gameObject, "Img_Background/Btn_Cancel"); 
 | 
        StringBuilder _content = new StringBuilder(); 
 | 
        GenerateUICode _target = target as GenerateUICode; 
 | 
        Transform _child; 
 | 
        for (int i = 0; i < _target.transform.childCount; ++i) { 
 | 
            _child = _target.transform.GetChild(i); 
 | 
            if (m_IdToCopy[_child.GetInstanceID()]) { 
 | 
                Component[] _components = _child.GetComponents<Image>(); 
 | 
                foreach (var _component in _components) { 
 | 
                    _content.Append("m_Img"); 
 | 
                    _content.Append(_child.name); 
 | 
                    _content.Append(" = UGUITool.GetChildControl<"); 
 | 
                    _content.Append(typeof(Image).Name); 
 | 
                    _content.Append(">(gameObject, \""); 
 | 
                    _content.Append(m_IdToPath[_child.GetInstanceID()]); 
 | 
                    _content.Append("\");\r\n"); 
 | 
                } 
 | 
  
 | 
                _components = _child.GetComponents<Text>(); 
 | 
                foreach (var _component in _components) { 
 | 
                    _content.Append("m_Img"); 
 | 
                    _content.Append(_child.name); 
 | 
                    _content.Append(" = UGUITool.GetChildControl<"); 
 | 
                    _content.Append(typeof(Text).Name); 
 | 
                    _content.Append(">(gameObject, \""); 
 | 
                    _content.Append(m_IdToPath[_child.GetInstanceID()]); 
 | 
                    _content.Append("\");\r\n"); 
 | 
                } 
 | 
  
 | 
                _components = _child.GetComponents<Button>(); 
 | 
                foreach (var _component in _components) { 
 | 
                    _content.Append("m_Img"); 
 | 
                    _content.Append(_child.name); 
 | 
                    _content.Append(" = UGUITool.GetChildControl<"); 
 | 
                    _content.Append(typeof(Button).Name); 
 | 
                    _content.Append(">(gameObject, \""); 
 | 
                    _content.Append(m_IdToPath[_child.GetInstanceID()]); 
 | 
                    _content.Append("\");\r\n"); 
 | 
                } 
 | 
            } 
 | 
  
 | 
            if (_child.childCount > 0) { 
 | 
                CopyGetChildren(_child, _content); 
 | 
            } 
 | 
        } 
 | 
  
 | 
        TextEditor t = new TextEditor(); 
 | 
        t.text = _content.ToString(); 
 | 
        t.OnFocus(); 
 | 
        t.Copy(); 
 | 
        _content = null; 
 | 
    } 
 | 
  
 | 
    private void CopyDefineChildren(Transform parent, StringBuilder content) { 
 | 
        Transform _child; 
 | 
        for (int i = 0; i < parent.transform.childCount; ++i) { 
 | 
            _child = parent.transform.GetChild(i); 
 | 
            if (m_IdToCopy[_child.GetInstanceID()]) { 
 | 
                Component[] _components = _child.GetComponents<Image>(); 
 | 
                foreach (var _component in _components) { 
 | 
                    content.Append("private "); 
 | 
                    content.Append(typeof(Image).Name); 
 | 
                    content.Append(" m_Img"); 
 | 
                    content.Append(_child.name); 
 | 
                    content.Append(";\r\n"); 
 | 
                } 
 | 
  
 | 
                _components = _child.GetComponents<Text>(); 
 | 
                foreach (var _component in _components) { 
 | 
                    content.Append("private "); 
 | 
                    content.Append(typeof(Text).Name); 
 | 
                    content.Append(" m_Txt"); 
 | 
                    content.Append(_child.name); 
 | 
                    content.Append(";\r\n"); 
 | 
                } 
 | 
  
 | 
                _components = _child.GetComponents<Button>(); 
 | 
                foreach (var _component in _components) { 
 | 
                    content.Append("private "); 
 | 
                    content.Append(typeof(Button).Name); 
 | 
                    content.Append(" m_Btn"); 
 | 
                    content.Append(_child.name); 
 | 
                    content.Append(";\r\n"); 
 | 
                } 
 | 
            } 
 | 
  
 | 
            if (_child.childCount > 0) { 
 | 
                CopyDefineChildren(_child, content); 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
  
 | 
    private void CopyGetChildren(Transform parent, StringBuilder content) { 
 | 
        Transform _child; 
 | 
        for (int i = 0; i < parent.transform.childCount; ++i) { 
 | 
            _child = parent.transform.GetChild(i); 
 | 
            if (m_IdToCopy[_child.GetInstanceID()]) { 
 | 
                Component[] _components = _child.GetComponents<Image>(); 
 | 
                foreach (var _component in _components) { 
 | 
                    content.Append("m_Img"); 
 | 
                    content.Append(_child.name); 
 | 
                    content.Append(" = UGUITool.GetChildControl<"); 
 | 
                    content.Append(typeof(Image).Name); 
 | 
                    content.Append(">(gameObject, \""); 
 | 
                    content.Append(m_IdToPath[_child.GetInstanceID()]); 
 | 
                    content.Append("\");\r\n"); 
 | 
                } 
 | 
  
 | 
                _components = _child.GetComponents<Text>(); 
 | 
                foreach (var _component in _components) { 
 | 
                    content.Append("m_Img"); 
 | 
                    content.Append(_child.name); 
 | 
                    content.Append(" = UGUITool.GetChildControl<"); 
 | 
                    content.Append(typeof(Text).Name); 
 | 
                    content.Append(">(gameObject, \""); 
 | 
                    content.Append(m_IdToPath[_child.GetInstanceID()]); 
 | 
                    content.Append("\");\r\n"); 
 | 
                } 
 | 
  
 | 
                _components = _child.GetComponents<Button>(); 
 | 
                foreach (var _component in _components) { 
 | 
                    content.Append("m_Img"); 
 | 
                    content.Append(_child.name); 
 | 
                    content.Append(" = UGUITool.GetChildControl<"); 
 | 
                    content.Append(typeof(Button).Name); 
 | 
                    content.Append(">(gameObject, \""); 
 | 
                    content.Append(m_IdToPath[_child.GetInstanceID()]); 
 | 
                    content.Append("\");\r\n"); 
 | 
                } 
 | 
            } 
 | 
  
 | 
            if (_child.childCount > 0) { 
 | 
                CopyGetChildren(_child, content); 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
} 
 | 
#endif 
 |