using System.Collections; 
 | 
using System.Collections.Generic; 
 | 
using UnityEngine; 
 | 
using UnityEngine.UI; 
 | 
#if UNITY_EDITOR 
 | 
using UnityEditor; 
 | 
#endif 
 | 
public class UIParamCopyTool : MonoBehaviour 
 | 
{ 
 | 
    private List<UIObject> copyObjects = new List<UIObject>(); 
 | 
    public List<UITarget> copyTargets = new List<UITarget>(); 
 | 
    public void Add() 
 | 
    { 
 | 
        var _obejct = new UIObject(); 
 | 
        _obejct.type = UIType.None; 
 | 
        copyObjects.Add(_obejct); 
 | 
    } 
 | 
  
 | 
    public UIObject this[int _index] 
 | 
    { 
 | 
        get 
 | 
        { 
 | 
            if (_index < copyObjects.Count && _index >= 0) 
 | 
            { 
 | 
                return copyObjects[_index]; 
 | 
            } 
 | 
            return null; 
 | 
        } 
 | 
    } 
 | 
  
 | 
    public void Remove(int _index) 
 | 
    { 
 | 
        var _object = copyObjects[_index]; 
 | 
        copyObjects.RemoveAt(_index); 
 | 
        _object = null; 
 | 
    } 
 | 
  
 | 
    public int Count 
 | 
    { 
 | 
        get 
 | 
        { 
 | 
            return copyObjects.Count; 
 | 
        } 
 | 
    } 
 | 
  
 | 
    public void FindTarget(string _parentName) 
 | 
    { 
 | 
        copyTargets.Clear(); 
 | 
        FindTarget(transform, _parentName); 
 | 
    } 
 | 
  
 | 
    public void Paste() 
 | 
    { 
 | 
        foreach (var _object in copyObjects) 
 | 
        { 
 | 
            foreach (var _target in copyTargets) 
 | 
            { 
 | 
                _target.Paste(_object); 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
  
 | 
    public void FindTarget(Transform _parent, string _parentName) 
 | 
    { 
 | 
        if(_parent == null|| _parent.childCount == 0) 
 | 
        { 
 | 
            return; 
 | 
        } 
 | 
        foreach (Transform _tran in _parent) 
 | 
        { 
 | 
            if (_tran.name == _parentName) 
 | 
            { 
 | 
                var _target = new UITarget() 
 | 
                { 
 | 
                    Object = _tran.gameObject, 
 | 
                    ok = true, 
 | 
                }; 
 | 
                _target.Init(); 
 | 
                copyTargets.Add(_target); 
 | 
                continue; 
 | 
            } 
 | 
            FindTarget(_tran, _parentName); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    public class UIObject 
 | 
    { 
 | 
        public Graphic Object; 
 | 
        public UIType type; 
 | 
        public string name = string.Empty; 
 | 
    } 
 | 
  
 | 
    public class UITarget 
 | 
    { 
 | 
        public GameObject Object; 
 | 
        public bool ok = true; 
 | 
  
 | 
        public List<Image> images = new List<Image>(); 
 | 
        public List<Text> texts = new List<Text>(); 
 | 
  
 | 
        public void Init() 
 | 
        { 
 | 
            Object.GetComponentsInChildren<Image>(true, images); 
 | 
            Object.GetComponentsInChildren<Text>(true, texts); 
 | 
        } 
 | 
  
 | 
        public void Paste(UIObject _object) 
 | 
        { 
 | 
            switch (_object.type) 
 | 
            { 
 | 
                case UIType.None: 
 | 
                    break; 
 | 
                case UIType.Image: 
 | 
                    PasteImage(_object); 
 | 
                    break; 
 | 
                case UIType.Text: 
 | 
                    PasteText(_object); 
 | 
                    break; 
 | 
            } 
 | 
        } 
 | 
  
 | 
        public void PasteRectTransform(RectTransform _target, RectTransform _paste) 
 | 
        { 
 | 
            _target.pivot = _paste.pivot; 
 | 
            _target.anchorMax = _paste.anchorMax; 
 | 
            _target.anchorMin = _paste.anchorMin; 
 | 
            _target.sizeDelta = _paste.sizeDelta; 
 | 
            _target.localPosition = _paste.localPosition; 
 | 
        } 
 | 
  
 | 
        public void PasteImage(UIObject _object) 
 | 
        { 
 | 
            var _imageArray = images.FindAll((x) => 
 | 
            { 
 | 
                return x.name == _object.name; 
 | 
            }); 
 | 
            if (_imageArray == null) 
 | 
            { 
 | 
                return; 
 | 
            } 
 | 
            for (int i = 0; i < _imageArray.Count; i++) 
 | 
            { 
 | 
                var _image = _imageArray[i]; 
 | 
                var _paste = _object.Object as Image; 
 | 
                _image.sprite = _paste.sprite; 
 | 
                _image.color = _paste.color; 
 | 
                _image.raycastTarget = _paste.raycastTarget; 
 | 
                PasteRectTransform(_image.rectTransform, _paste.rectTransform); 
 | 
            } 
 | 
        } 
 | 
  
 | 
        public void PasteText(UIObject _object) 
 | 
        { 
 | 
            var _textArray = texts.FindAll((x) => 
 | 
            { 
 | 
                return x.name == _object.name; 
 | 
            }); 
 | 
            if (_textArray == null) 
 | 
            { 
 | 
                return; 
 | 
            } 
 | 
            for (int i = 0; i < _textArray.Count; i++) 
 | 
            { 
 | 
                var _text = _textArray[i]; 
 | 
                var _paste = _object.Object as Text; 
 | 
                _text.color = _paste.color; 
 | 
                _text.fontSize = _paste.fontSize; 
 | 
                _text.font = _paste.font; 
 | 
                _text.raycastTarget = _paste.raycastTarget; 
 | 
                _text.alignment = _paste.alignment; 
 | 
                _text.horizontalOverflow = _paste.horizontalOverflow; 
 | 
                _text.verticalOverflow = _paste.verticalOverflow; 
 | 
                PasteRectTransform(_text.rectTransform, _paste.rectTransform); 
 | 
            } 
 | 
             
 | 
        } 
 | 
    } 
 | 
  
 | 
    public enum UIType 
 | 
    { 
 | 
        None, 
 | 
        Image, 
 | 
        Text, 
 | 
    } 
 | 
} 
 | 
  
 | 
#if UNITY_EDITOR 
 | 
[CustomEditor(typeof(UIParamCopyTool))] 
 | 
public class UIParamCopyToolEditor : Editor 
 | 
{ 
 | 
    private Vector2 scrollposition; 
 | 
    private Vector2 scrollposition1; 
 | 
    private string targetName = string.Empty; 
 | 
  
 | 
    public override void OnInspectorGUI() 
 | 
    { 
 | 
        var _target = target as UIParamCopyTool; 
 | 
        if (GUILayout.Button("+")) 
 | 
        { 
 | 
            _target.Add(); 
 | 
        } 
 | 
        scrollposition = GUILayout.BeginScrollView(scrollposition); 
 | 
        for (int i = 0; i < _target.Count; i++) 
 | 
        { 
 | 
            GUILayout.BeginHorizontal(); 
 | 
            EditorGUILayout.EnumPopup(_target[i].type); 
 | 
            if (_target[i].Object == null) 
 | 
            { 
 | 
                _target[i].Object = (Graphic)EditorGUILayout.ObjectField("Component:", _target[i].Object, typeof(Graphic), true); 
 | 
            } 
 | 
            else if (_target[i].Object is Image) 
 | 
            { 
 | 
                _target[i].name = _target[i].Object.name; 
 | 
                _target[i].type = UIParamCopyTool.UIType.Image; 
 | 
                _target[i].Object = (Image)EditorGUILayout.ObjectField(_target[i].name, _target[i].Object, typeof(Image), true); 
 | 
            } 
 | 
            else if (_target[i].Object is Text) 
 | 
            { 
 | 
                _target[i].name = _target[i].Object.name; 
 | 
                _target[i].type = UIParamCopyTool.UIType.Text; 
 | 
                _target[i].Object = (Text)EditorGUILayout.ObjectField(_target[i].name, _target[i].Object, typeof(Text), true); 
 | 
            } 
 | 
            if (GUILayout.Button("-")) 
 | 
            { 
 | 
                _target.Remove(i); 
 | 
                i--; 
 | 
            } 
 | 
            GUILayout.EndHorizontal(); 
 | 
        } 
 | 
        GUILayout.EndScrollView(); 
 | 
        GUILayout.BeginHorizontal(); 
 | 
        targetName = EditorGUILayout.TextField("目标名:", targetName); 
 | 
        if (GUILayout.Button("Find")) 
 | 
        { 
 | 
            if (targetName != string.Empty) 
 | 
            { 
 | 
                _target.FindTarget(targetName); 
 | 
            } 
 | 
        } 
 | 
        GUILayout.EndHorizontal(); 
 | 
        scrollposition1 = GUILayout.BeginScrollView(scrollposition1); 
 | 
        for (int i = 0; i < _target.copyTargets.Count; i++) 
 | 
        { 
 | 
            GUILayout.BeginHorizontal(); 
 | 
            var _copyTarget = _target.copyTargets[i]; 
 | 
            _copyTarget.ok = EditorGUILayout.Toggle("是否替换", _copyTarget.ok, GUILayout.Width(40)); 
 | 
            EditorGUILayout.LabelField(StringUtility.Contact("Image", _copyTarget.images.Count)); 
 | 
            EditorGUILayout.LabelField(StringUtility.Contact("Text", _copyTarget.texts.Count)); 
 | 
            GUILayout.EndHorizontal(); 
 | 
        } 
 | 
        GUILayout.EndScrollView(); 
 | 
        if (GUILayout.Button("Paste")) 
 | 
        { 
 | 
            _target.Paste(); 
 | 
        } 
 | 
    } 
 | 
} 
 | 
#endif 
 |