该工具可以复制物体的所有组件以及组件上的值,粘贴到其他物体上,不改变该物体原有组件;直接上代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using System;
public class CopyComponents : Editor
{
static Component[] compoentArr;
[MenuItem("Component Editor/Copy Components")]
static void DoCopyComponent()
{
compoentArr = Selection.activeGameObject.GetComponents<Component>();
}
[MenuItem("Component Editor/Paste Components")]
static void DoPasteComponent()
{
if (compoentArr == null)
{
return;
}
GameObject targetObject = Selection.activeGameObject;
if (targetObject == null)
{
return;
}
for (int i = 0; i < compoentArr.Length; i++)
{
Component newComponent = compoentArr[i];
if (newComponent == null)
{
continue;
}
UnityEditorInternal.ComponentUtility.CopyComponent(newComponent);
Component oldComponent = targetObject.GetComponent(newComponent.GetType());
if (oldComponent != null)
{
if (UnityEditorInternal.ComponentUtility.PasteComponentValues(oldComponent))
{
Debug.Log("Paste Values " + newComponent.GetType().ToString() + " Success");
}
else
{
Debug.Log("Paste Values " + newComponent.GetType().ToString() + " Failed");
}
}
else
{
if (UnityEditorInternal.ComponentUtility.PasteComponentAsNew(targetObject))
{
Debug.Log("Paste New Values " + newComponent.GetType().ToString() + " Success");
}
else
{
Debug.Log("Paste New Values " + newComponent.GetType().ToString() + " Failed");
}
}
}
}
}