Unity一键复制粘贴对象的所有组件和参数

Unity开发中,你如果想要把某个对象的组件全部都拷贝到新的对象上,除了一个个复制粘贴组件,还要修改组件中的参数,也就是不断重复Copy Component 、Paste Component As New、Paste Component Values,实在是一件很麻烦的事,所以想办法将步骤合起来,直接复制物体上的所有组件、参数,一步搞定。

首先写一个脚本,将其放在Editor文件夹下面,代码如下:

CopyAllComponent.cs

using UnityEngine;
using UnityEditor;
using System.Collections;

public class CopyAllComponent : EditorWindow
{
    static Component[] copiedComponents;
    [MenuItem("GameObject/Copy Current Components #&C")]
    static void Copy()
    {
        copiedComponents = Selection.activeGameObject.GetComponents();
    }

    [MenuItem("GameObject/Paste Current Components #&P")]
    static void Paste()
    {
        foreach (var targetGameObject in Selection.gameObjects)
        {
            if (!targetGameObject || copiedComponents == null) continue;
            foreach (var copiedComponent in copiedComponents)
            {
                if (!copiedComponent) continue;
                UnityEditorInternal.ComponentUtility.CopyComponent(copiedComponent);
                UnityEditorInternal.ComponentUtility.PasteComponentAsNew(targetGameObject);
            }
        }
    }
}

可以看到菜单栏->GameObject下面这两行,选中一个物体,Copy Current Components,然后再Paste Current Components,就会发现所有组件以及参数都完整拷贝过来,非常方便。

如果新物体原本就有组件,那么复制过来不会替换掉原来的组件,如碰撞器,会多复制一个,如果是Rigidbody这种只能挂一个的组件,则不会有效果,既不会修改参数也不会多一个Rigidbody。问题不大。

 

你可能感兴趣的:(Unity)