Unity 组件批量复制
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 组件批量复制相关推荐
- vue - element <upload> 组件批量上传文档,可携带其他表单数据项一同与文件 “手动提交“ 服务器(类似百度文库系统批量上传前端界面与逻辑)超详细教程示例源码,提供界面与逻辑完整源码
效果图 本示例使用的是 element 组件库,其实什么组件库都行(逻辑是一样),只要你是 vue.js 项目就能使用本教程. 本文实现了 vue + element 使用 upload 组件批量上传 ...
- Windows常用批处理文件-批量复制、解压
内容转载自我的博客 文章目录 1. 批量复制文件 2. 批量解压文件 3. 批量重命名文件后缀 4. 解决Win10局域网共享问题(未测试) 1. 批量复制文件 创建文件copy_file.bat,内 ...
- ubuntu 终端批量复制文件_《卡死你3000》批量文件复制命令详解
卡死你3000简介: 名词解释: 批量顺序复制文件:从主控机,到从被控机1,被控机2,复制文件.有卡住问题. 批量并发复制文件:从主控机,到从被控机1,被控机2,复制文件.使用多线程并发,可以控制并发 ...
- .net2.0中SqlBulkCopy批量复制数据出错原因分析!
在项目后台数据库选择SqlServer,进行批量复制数据时,.net2.0中提供的SqlBulkCopy不失为一个好的选择,性能相当可观;最近亲手实验一把,效果不错,大家可以参见http://www. ...
- 用.NET SqlBulkCopy类执行批量复制
在不同数据源之间转移数据是一个常见的开发任务.如果你应用过SQL Server,就会熟悉bcp(批量复制)命令. 它允许你快速将大型文件批量复制到SQL Server表或视图中.在.NET Frame ...
- 使用asp.net 2.0中的SqlBulkCopy类批量复制数据
介绍: 在软件开发中,把数据从一个地方复制到另一个地方是一个普遍的应用. 在很多不同的场合都会执行这个操作,包括旧系统到新系统的移植,从不同的数据库备份数据和收集数据. ASP.NET 2.0有一个S ...
- c# 获取excel单元格公式结果_每日一Excel技巧(熟能生巧):带公式的单元格,快速批量复制、填充...
带公式的单元格,快速批量复制.填充技巧,提高工作效率. 方法一.拖拽填充柄 选中单元格,鼠标放在单元格右下角,当鼠标指针为黑色实心"十字"填充柄时,按住鼠标左键横向或纵向拖动,可将 ...
- python下的所有文件_python批量复制文件夹下所有文件大小
python复制文件夹下所有文件 Python---进阶---文件操作---获取文件夹下所有文件的数量和大小 一.####编写一个程序,统计当前目录下每个文件类型的文件数 ####思路: - 打开当前 ...
- python批量复制文件问题,python 批量复制不同目录下的文件
python 批量复制不同目录下的文件 #!/usr/bin/env python #coding=UTF-8 #author aping import os,sys,shutil,time impo ...
最新文章
- Learn OpenGL (六):坐标系统
- Visual Studio 2019设置回车代码补全
- MDK调试错误之assert_failed
- ubuntu 12.04 配置LAMP
- java中如何将非整数保留到小数点后指定的位数
- 数据库异常关闭后无法启动问题处理
- AopContext.currentProxy();为什么能获取到代理对象
- linux 运行eclipse,解决Linux下Eclipse启动错误
- Linux运维常见的硬件问题
- 基于地理区域的广告推送模块
- C#泛型中的抗变和协变
- python爬取qq好友网络状态_Python爬虫实战----爬取QQ空间好友说说并生成词云(超详细)...
- ExoPlayer+FFMpeg软解
- Netgear WNR2000v3刷固件记
- 安装PdaNet以连接Android设备
- 第一次发博客,随便说说
- 一站式跨境电商免费开源ERP平台,简洁的操作,助您高效工作
- 未來用工新趨勢_2019年社会化用工成新趋势
- Bug系列路径规划算法原理介绍(三)——Tangent BUG算法
- 开关电源环路的零极点可以在反馈端补偿吗_开关电源的建模和环路补偿设计(1):小信号建模的基本概念和方法(一)...