Files
DeviantMobile-Rohan/Assets/ComponentCopier.cs

75 lines
2.3 KiB
C#

#if UNITY_EDITOR
using UnityEngine;
using UnityEditor;
using System.Collections;
public class ComponentsCopier
{
static Component[] copiedComponents;
[MenuItem("GameObject/Copy all components %&C")]
static void Copy()
{
if (UnityEditor.Selection.activeGameObject == null)
return;
copiedComponents = UnityEditor.Selection.activeGameObject.GetComponents<Component>();
}
[MenuItem("GameObject/Paste all components %&P")]
static void Paste()
{
if (copiedComponents == null)
{
Debug.LogError("Nothing is copied!");
return;
}
foreach (var targetGameObject in UnityEditor.Selection.gameObjects)
{
if (!targetGameObject)
continue;
Undo.RegisterCompleteObjectUndo(targetGameObject, targetGameObject.name + ": Paste All Components"); // sadly does not record PasteComponentValues, i guess
foreach (var copiedComponent in copiedComponents)
{
if (!copiedComponent)
continue;
UnityEditorInternal.ComponentUtility.CopyComponent(copiedComponent);
var targetComponent = targetGameObject.GetComponent(copiedComponent.GetType());
if (targetComponent) // if gameObject already contains the component
{
if (UnityEditorInternal.ComponentUtility.PasteComponentValues(targetComponent))
{
Debug.Log("Successfully pasted: " + copiedComponent.GetType());
}
else
{
Debug.LogError("Failed to copy: " + copiedComponent.GetType());
}
}
else // if gameObject does not contain the component
{
if (UnityEditorInternal.ComponentUtility.PasteComponentAsNew(targetGameObject))
{
Debug.Log("Successfully pasted: " + copiedComponent.GetType());
}
else
{
Debug.LogError("Failed to copy: " + copiedComponent.GetType());
}
}
}
}
copiedComponents = null; // to prevent wrong pastes in future
}
}
#endif