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
|