做3D方面的同学们不知道是否会频繁碰见这样的问题:
1.美术给的模型或者动画的材质因为第三方渲染器的原因导入unity后就只剩下无贴图的原始材质球,只好苦逼的一个个上贴图材质,上了一个也就罢了,后面的一个个都要上。
2.为了整理工程资源一不下心把材质球和模型关联全搞无了,大量重复的去一个个拖材质球。
3.存在多维材质的模型无法用传统的右键复制材质球属性然后粘贴过去。
我就碰到了。。。。。。美术那边给的人物动画是多维材质,一个物体上20多个材质球,因为动画好几个,所以有多个存在多维材质的FBX。我们知道FBX导入unity后你要修改导入材质的Location,要不然材质没法修改属性,但是这样的话就会生成一套材质球,如果这些FBX所用材质球完全不一样那倒没什么,但是如果他们用的材质大部分都是一样的,那生成的多套材质球就造成了空间和性能上的浪费。

因此我选择自己生成材质球然后其余的FBX都不导入材质,痛苦的事情就来了,我需要一个个的去把材质球赋给它们该在的模型上。光上材质有时候就能花费一天的时间,时间的浪费、重复的工作,那这些是万万不能忍受的啊,除非你忍受的住。于是我就想啊,既然代码可以复制材质球属性,我直接代码复制不就行了?

using UnityEngine;
using System.Collections;public class ExampleClass : MonoBehaviour {public Material mat;void Start() {GetComponent<Renderer>().material.CopyPropertiesFromMaterial(mat);}
}

但是这个复制只能在运行的时候搞,那我总不能运行的时候花费一段时间和性能去干这个事情啊,于是又想到了编辑器扩展。于是,靠百度大法写了一个复制材质、多维材质的编辑器脚本,也分享给有需要的小伙伴们。

using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
public class CopyMaterials : EditorWindow
{public GameObject mOrigin;public GameObject mTarget;protected GUIStyle mFirstTitleLabelStyle = new GUIStyle();protected GUIStyle mSecondTitleLabelStyle = new GUIStyle();[MenuItem("Window/CopyMaterials")]protected static void OnMenuClick(){OpenWindow();}protected static void OpenWindow(){EditorWindow window = EditorWindow.GetWindow<CopyMaterials>();window.autoRepaintOnSceneChange = true;window.titleContent = new GUIContent("CopyWindow");int screenWidthInt = 1920;int screenHeightInt = 1080;int windowWidthInt = 480;int windowHeightInt = 400;window.position = new Rect(screenWidthInt / 2 - windowWidthInt / 2,screenHeightInt / 2 - windowHeightInt / 2,windowWidthInt,windowHeightInt);}private void OnGUI(){mOrigin = Selection.activeGameObject;mFirstTitleLabelStyle.fontSize = 14;mFirstTitleLabelStyle.normal.textColor = Color.white;mSecondTitleLabelStyle.fontSize = 12;mSecondTitleLabelStyle.fontStyle = FontStyle.Bold;mSecondTitleLabelStyle.normal.textColor = Color.white;EditorGUILayout.BeginVertical();EditorGUILayout.Space();EditorGUILayout.LabelField("[ 目标物体 ]", mSecondTitleLabelStyle);EditorGUILayout.Space();EditorGUILayout.LabelField("当前选中物体");mOrigin = (GameObject)EditorGUILayout.ObjectField(mOrigin, typeof(GameObject), true, GUILayout.MaxWidth(200));EditorGUILayout.Space();EditorGUILayout.LabelField("[ 复制物体 ]", mSecondTitleLabelStyle);mTarget = (GameObject)EditorGUILayout.ObjectField(mTarget, typeof(GameObject), true, GUILayout.MaxWidth(200));EditorGUILayout.Space();EditorGUILayout.Space();if (GUILayout.Button("复制")) CopyButtonClick();EditorGUILayout.EndVertical();}void CopyButtonClick(){if (mOrigin.transform.childCount == 0){List<Material> materials = new List<Material>();mOrigin.GetComponent<Renderer>().GetSharedMaterials(materials);mTarget.GetComponent<Renderer>().materials = materials.ToArray();}else{foreach (Transform item in mOrigin.transform){if (item.GetComponent<Renderer>() == null) continue;if (mTarget.transform.Find(item.name)){List<Material> materials = new List<Material>();item.GetComponent<Renderer>().GetSharedMaterials(materials);mTarget.transform.Find(item.name).GetComponent<Renderer>().materials = materials.ToArray();}}}}}


打开的选项放在unity window下面了。脚本是根据判断名字是否一致来进行材质复制粘贴的。
对了,我把这脚本直接上传资源了,链接:unity编辑器扩展——材质快速复制
小伙伴们有钱的捧个钱场,没钱的尽管白嫖,代码都在博客里,自取自取。

Unity材质快速复制相关推荐

  1. unity材质球属性无法修改

    unity材质球属性无法修改 出现的问题情况: 解决办法 出现的问题情况: 如图,unity材质球属性是灰色的无法修改 解决办法 找到材质球然后对原来的材质球进行复制(Crtl+D),再将复制后的材质 ...

  2. 快速复制快捷键_复制粘贴额效率之王Ctrl+D都不掌握,那就真的Out了

    在Excel中,如果要批量填充,大家会怎么做? 一般情况下,小编用到最多的就是快捷键Ctrl+Enter,其实还有一个批量填充的高效率快捷键就是Ctrl+D. 一.快捷键Ctrl+D:批量填充内容.目 ...

  3. sublime关于行操作的快捷键:如快速复制整行等

    一.复制当前行 ctrl+shift+d 快速复制当前行代码并插入到下一行 二.删除当前行 1.系统默认的是Ctrl+shift+k ,Sublime 删除一行快捷键 2.Shift+Delete 也 ...

  4. excel 复制数据 sql server 粘贴_win32 实现 excel 快速复制粘贴

    直接简明说:该方法可以直接将一张代码的区域内容直接 copy 到另一张表上,并且字体颜色.背景.格式都不变,另外还可以 copy 公式(相当于 excel 下拉公式) from win32com.cl ...

  5. java nio copy_使用NIO快速复制Java文件

    package com.test.test; import java.io.File; import java.io.FileInputStream; import java.io.FileOutpu ...

  6. mysql 快速复制_MySQL中快速复制数据表方法汇总

    本文将着重介绍两个MySQL命令的组合,它将以原有数据表为基础,创建相同结构和数据的新数据表. 这可以帮助你在开发过程中快速的复制表格作为测试数据,而不必冒险直接操作正在运行 的数据表. 示例如下: ...

  7. html批量导入excel表格,html 导入excel表格数据格式-如何将网页中的表格快速复制到EXCEL中...

    html读取本地excel文件并展示 我们打开上的一个包含表格内容的页点击菜单栏-文件-另存为. 弹出选择保存路径,将保存类型选为"htm 或Html格式". 在计算机上新建一个E ...

  8. mysql 复制数据_MySQL快速复制数据库数据表的方法

    某些时候,例如为了搭建一个测试环境,或者克隆一个网站,需要复制一个已存在的mysql数据库.使用以下方法,可以非常简单地实现. 假设已经存在的数据库名字叫db1,想要复制一份,命名为newdb.步骤如 ...

  9. Eclipse用法和技巧十二:快速复制一行

    写代码的总有那么个时候需要Ctrl+c,Ctrl+v,在eclipse中如果遇到需要快速在一行代码的上下复制一行的话,有很方便的快捷键可以使用.将光标放到某一行,按住Ctrl+Alt+Down,即可以 ...

最新文章

  1. java游戏开发--连连看-让程序运行更稳定、更高效
  2. Android为TV端助力 同时setTag两次,保存多种值
  3. lindex.php,Redis学习笔记:命令
  4. Snmp学习总结系列——开篇
  5. 【存储过程】Merge Into语句实现Insert/Update在Oracle中的应用
  6. svn之bash: syntax error near unexpected token `(‘ 解决办法
  7. php处理XML数据
  8. 模仿SpringMVC的DispatcherServlet 手撸300行代码提炼精华设计思想并保证功能可用(1.0版本)
  9. 传统词向量nlp处理的优缺点_吴恩达深度学习笔记(126) | NLP | GloVe 词向量
  10. CSS控制显示超出部分,用省略号显示
  11. zend studio php 接口,通过PHP环境ZendStudio轻松实现webservice接口
  12. QQ空间技术架构之深刻揭秘
  13. 少年派的奇幻漂流-解读与感悟
  14. Python字符串格式化占位操作解析
  15. Spring学习笔记(二十三)——实现网站微信扫码登录获取微信用户信息Demo
  16. 第三方软件测试z5x电池,vivo Z5x第三方续航测试结果公布,刷新手机业续航排行榜...
  17. SSD固态硬盘优化方案,让新买的SSD速度不再慢
  18. 小桥流水人家(python)
  19. 《区块链革命》读书笔记3 新商业模式:在区块链上寻找新机会
  20. 【智能制造】设备故障诊断基础知识:振动、噪声、温度、探伤

热门文章

  1. 算法之递归回溯(四)
  2. 网络工程师常用的命令整理-windows版,还不快收藏起来
  3. linux常用命令整理-02-服务器-系统-内存-磁盘-优化
  4. NT151应用案例:西门子PLC S7-1200与派克ACR9000的通信(Part 3)
  5. Educational Codeforces Round 112 (Rated for Div. 2)(补题)
  6. 在pc端上操作手机工具分享
  7. ROS系列(四):ROS通信机制系列(3):参数服务器
  8. SIM卡交换方案的工作原理
  9. 仿真中的连续系统和离散系统
  10. 侍魂哪个服务器人最多,经典街机游戏《侍魂》里帅气的人物,你最喜欢哪个?...