Unity Component批量复制

在制作毕设的过程中,我发现我的角色模型需要替换,但是原角色物体上有很多组件,如果全部在Inspector面板右键Copy、Paste很麻烦,所以制作了一个能够将物体上所有组件一键复制粘贴的工具。


将原物体放到左边,新物体放到右边,点击检测按钮。

然后点击Copy按钮,就会把左边物体身上的组件(除了Transform组件和Tag、Layer)复制到右边物体上。

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEditor;
using UnityEditorInternal;
using UnityEngine;public class ComponentCopyWindow : EditorWindow
{private GameObject rootGO;private List<Component> rootComponents;private GameObject targetGO;private List<Component> targetComponents;[MenuItem("Wonderland6627/ComponentCopyWindow")]public static void ShowWindow(){var window = EditorWindow.GetWindowWithRect<ComponentCopyWindow>(new Rect(0, 0, 700, 350));}private void OnEnable(){rootComponents = new List<Component>();targetComponents = new List<Component>();}private void OnGUI(){GUI.Label(new Rect(200, 0, 500, 20), "将'原始物体'的组件都复制到'复制物体上'(不包括Transform、Tag、Layer)");GUILayout.Space(20);EditorGUILayout.BeginHorizontal();{GUILayout.Label("原始物体:");rootGO = EditorGUILayout.ObjectField(rootGO, typeof(GameObject)) as GameObject;if (rootGO){EditorGUILayout.BeginVertical();{GUILayout.BeginArea(new Rect(5, 50, 300, 300), GUI.skin.box);{if (GUILayout.Button("检测物体组件")){rootComponents = rootGO.GetComponents<Component>().ToList();rootComponents.RemoveAll((comp) =>{return comp.GetType() == typeof(Transform);});}if (rootComponents != null && rootComponents.Count != 0){for (int i = 0; i < rootComponents.Count; i++){GUILayout.Label(i + " " + rootComponents[i].GetType().Name);}}}GUILayout.EndArea();}EditorGUILayout.EndVertical();}GUILayout.Space(50);if (rootGO && targetGO){GUI.enabled = (rootComponents.Count != 0);if (GUI.Button(new Rect(310, 160, 70, 30), "Copy to =>", EditorStyles.toolbarButton)){for (int i = 0; i < rootComponents.Count; i++){ComponentUtility.CopyComponent(rootComponents[i]);ComponentUtility.PasteComponentAsNew(targetGO);}targetComponents = targetGO.GetComponents<Component>().ToList();targetComponents.RemoveAll((comp) =>{return comp.GetType() == typeof(Transform);});}GUI.enabled = true;}GUILayout.Space(50);GUILayout.Label("复制物体:");targetGO = EditorGUILayout.ObjectField(targetGO, typeof(GameObject)) as GameObject;if (targetGO){EditorGUILayout.BeginVertical();{GUILayout.BeginArea(new Rect(5 + 80 + 300, 50, 300, 300), GUI.skin.box);{if (targetComponents != null && targetComponents.Count != 0){for (int i = 0; i < targetComponents.Count; i++){GUILayout.Label(i + " " + targetComponents[i].GetType().Name);}}}GUILayout.EndArea();}EditorGUILayout.EndVertical();}}EditorGUILayout.EndHorizontal();}
}

Unity 组件批量复制相关推荐

  1. vue - element <upload> 组件批量上传文档,可携带其他表单数据项一同与文件 “手动提交“ 服务器(类似百度文库系统批量上传前端界面与逻辑)超详细教程示例源码,提供界面与逻辑完整源码

    效果图 本示例使用的是 element 组件库,其实什么组件库都行(逻辑是一样),只要你是 vue.js 项目就能使用本教程. 本文实现了 vue + element 使用 upload 组件批量上传 ...

  2. Windows常用批处理文件-批量复制、解压

    内容转载自我的博客 文章目录 1. 批量复制文件 2. 批量解压文件 3. 批量重命名文件后缀 4. 解决Win10局域网共享问题(未测试) 1. 批量复制文件 创建文件copy_file.bat,内 ...

  3. ubuntu 终端批量复制文件_《卡死你3000》批量文件复制命令详解

    卡死你3000简介: 名词解释: 批量顺序复制文件:从主控机,到从被控机1,被控机2,复制文件.有卡住问题. 批量并发复制文件:从主控机,到从被控机1,被控机2,复制文件.使用多线程并发,可以控制并发 ...

  4. .net2.0中SqlBulkCopy批量复制数据出错原因分析!

    在项目后台数据库选择SqlServer,进行批量复制数据时,.net2.0中提供的SqlBulkCopy不失为一个好的选择,性能相当可观;最近亲手实验一把,效果不错,大家可以参见http://www. ...

  5. 用.NET SqlBulkCopy类执行批量复制

    在不同数据源之间转移数据是一个常见的开发任务.如果你应用过SQL Server,就会熟悉bcp(批量复制)命令. 它允许你快速将大型文件批量复制到SQL Server表或视图中.在.NET Frame ...

  6. 使用asp.net 2.0中的SqlBulkCopy类批量复制数据

    介绍: 在软件开发中,把数据从一个地方复制到另一个地方是一个普遍的应用. 在很多不同的场合都会执行这个操作,包括旧系统到新系统的移植,从不同的数据库备份数据和收集数据. ASP.NET 2.0有一个S ...

  7. c# 获取excel单元格公式结果_每日一Excel技巧(熟能生巧):带公式的单元格,快速批量复制、填充...

    带公式的单元格,快速批量复制.填充技巧,提高工作效率. 方法一.拖拽填充柄 选中单元格,鼠标放在单元格右下角,当鼠标指针为黑色实心"十字"填充柄时,按住鼠标左键横向或纵向拖动,可将 ...

  8. python下的所有文件_python批量复制文件夹下所有文件大小

    python复制文件夹下所有文件 Python---进阶---文件操作---获取文件夹下所有文件的数量和大小 一.####编写一个程序,统计当前目录下每个文件类型的文件数 ####思路: - 打开当前 ...

  9. python批量复制文件问题,python 批量复制不同目录下的文件

    python 批量复制不同目录下的文件 #!/usr/bin/env python #coding=UTF-8 #author aping import os,sys,shutil,time impo ...

最新文章

  1. Learn OpenGL (六):坐标系统
  2. Visual Studio 2019设置回车代码补全
  3. MDK调试错误之assert_failed
  4. ubuntu 12.04 配置LAMP
  5. java中如何将非整数保留到小数点后指定的位数
  6. 数据库异常关闭后无法启动问题处理
  7. AopContext.currentProxy();为什么能获取到代理对象
  8. linux 运行eclipse,解决Linux下Eclipse启动错误
  9. Linux运维常见的硬件问题
  10. 基于地理区域的广告推送模块
  11. C#泛型中的抗变和协变
  12. python爬取qq好友网络状态_Python爬虫实战----爬取QQ空间好友说说并生成词云(超详细)...
  13. ExoPlayer+FFMpeg软解
  14. Netgear WNR2000v3刷固件记
  15. 安装PdaNet以连接Android设备
  16. 第一次发博客,随便说说
  17. 一站式跨境电商免费开源ERP平台,简洁的操作,助您高效工作
  18. 未來用工新趨勢_2019年社会化用工成新趋势
  19. Bug系列路径规划算法原理介绍(三)——Tangent BUG算法
  20. 开关电源环路的零极点可以在反馈端补偿吗_开关电源的建模和环路补偿设计(1):小信号建模的基本概念和方法(一)...

热门文章

  1. 图神经网络(一)图信号处理与图卷积神经网络(6)GCN实战
  2. 怎样用matlab产生泊松分布随机数
  3. java获取过去一周、一个月,一年的日期
  4. 《密码学系列》—信息安全威胁
  5. 移动数组中的所有零到数组的末尾
  6. 与一汽密谈 南汽罗孚点将起航
  7. 计算机专业的英文介绍,计算机专业英文自我介绍
  8. 客运行业发展现状分析
  9. 【选型指南】频谱分析仪配件 衰 减 器 选型的3个重要参数
  10. Leetcode sixth day