美术创建材质的时候如果没有选择shader,那么创建的是默认shader材质,文本编辑器打开材质文件(.mat),会发现有很多没有默认的texture,如下图,此时美术切换材质到目标shader,虽然编辑器里面的inspector会变化,但是查看材质文件(.mat),发现那些贴图的定义还是在,这种情况下会被uwa检测为 “包含空纹理采样的材质”。如果在创建材质时选中shader,则没有这个问题。

因为美术创建材质之后要不停切换shader测试效果,所以写了一个工具,在美术调完效果后,操作材质,生成一份该shader的材质,并把属性赋值过去,以此删除掉空引用。

!!!注:该问题不清楚unity打包时是否会自动清除,因为没法检测。但是unity切换shader,导致贴图引用冗余依赖的问题,经测试在打包时会自动去除掉无效依赖,所以如果没有需要使用编辑器依赖的情况下,是不需要再写脚本处理冗余依赖的。

以下为材质优化脚本:

using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
using UnityEngine.Rendering;public class MaterialOptimize : Editor
{[MenuItem("Assets/MaterialOptimize(重新导出当前shader及属性的材质)", false)]static void MaterialOptimizeMethod(){var objs = Selection.objects;foreach (var obj in objs){var sourcePath = AssetDatabase.GetAssetPath(obj);Material sourceMaterial = obj as Material;Material newMaterial = new Material(sourceMaterial.shader);//创建shader对应的材质var s = sourceMaterial.shader;int length = s.GetPropertyCount();//获取shader的属性Debug.LogError(length);for (int i = 0; i < length; i++){Debug.LogError($"{i} =>  {s.GetPropertyName(i)}  => {s.GetPropertyType(i)}");string pName = s.GetPropertyName(i);//获取对应的属性名ShaderPropertyType pType = s.GetPropertyType(i);//获取对应的属性类型//根据不同的类型对材质进行赋值switch (pType){case ShaderPropertyType.Color:newMaterial.SetColor(pName, sourceMaterial.GetColor(pName));break;case ShaderPropertyType.Vector:newMaterial.SetVector(pName, sourceMaterial.GetVector(pName));break;case ShaderPropertyType.Float:newMaterial.SetFloat(pName, sourceMaterial.GetFloat(pName));break;case ShaderPropertyType.Range:newMaterial.SetFloat(pName, sourceMaterial.GetFloat(pName));break;case ShaderPropertyType.Texture:newMaterial.SetTexture(pName, sourceMaterial.GetTexture(pName));break;default:break;}}//保存,替换AssetDatabase.CreateAsset(newMaterial, sourcePath /*$"Assets/3DCharacter/Test/{obj.name}.mat"*/);}AssetDatabase.Refresh();}[MenuItem("Assets/MaterialOptimize", true)]static bool MaterialOptimizeMethodEnable(){return Selection.activeObject is Material;}
}

Unity优化材质,清除空引用贴图相关推荐

  1. Unity 之 NullReferenceException(空引用异常)问题

    什么是NullReferenceException(空引用异常)? 来自官方的诠释:https://docs.unity3d.com/Manual/NullReferenceException.htm ...

  2. unity 材质球无法编辑_【每天一个Unity技巧】批量修改材质球的主贴图和添加法线贴图...

    注释以后有空再写吧,加班到现在还没吃饭呢 using System.Collections; using System.Collections.Generic; using UnityEngine; ...

  3. Unity 多重材质球替换、多重材质球特定贴图替换、Materials替换

    又被问到多重材质球的特定材质球怎么替换.之前遇到这个问题的时候,天真的以为可以用skinned.materials[0] = xxx替换,结果不能替换,但是材质球特定的贴图是可以替换.想到materi ...

  4. Unity 在编辑器菜单栏里添加清除空文件夹

    在 Assets/App/Editor 路径下新建 ClearEmptyFolder 文件夹,并在该文件夹下新建文件 EmptyFolderClear.cs using System.IO; usin ...

  5. 复习Unity优化技巧

    复习Unity优化技巧 一.引言 新的格局 有推荐的吗? 二.优化 第一章.优化图形性能 1.分析: A.GPU通常受填充率或者内存带宽制约. 填充率 渲染管线 B.CPU 通常受到需要渲染的批次数的 ...

  6. IGDATaiwan上Unity 优化讲座III

    IGDATaiwan上Unity 优化讲座III (罗志达) https://www.youtube.com/user/IGDATaiwan 议程: https://2019.tgdf.tw/agen ...

  7. unity 优化大全

    看到一篇了好文章,虽然中间有些地方有点儿小问题,但是瑕不掩瑜,给赞.原文链接:http://www.jianshu.com/p/1a2b5d045077 最简单的优化建议: 1.PC平台的话保持场景中 ...

  8. Unity 优化建议

    转 https://blog.csdn.net/game_jqd/article/details/51899000 使用Profiler工具分析内存占用情况 System.ExecutableAndD ...

  9. [Unity] 优化您的移动游戏性能2020(上)

    英文原文: OptimizeYourMobileGamePerformance_V6_May2021.pdf 内容 前言 Profiling 内存 自适应性能 编程和代码架构 项目配置 资产 图形和 ...

最新文章

  1. ADO内存数据对象SqlDataAdapter类使用SqlDataAdapter在数据库和DataSet之间架起桥梁:
  2. HDFS设计思路,HDFS使用,查看集群状态,HDFS,HDFS上传文件,HDFS下载文件,yarn web管理界面信息查看,运行一个mapreduce程序,mapreduce的demo
  3. CF-525E(E. Anya and Cubes) Meet-in-the-Middle
  4. volatile关键字的作用-适用场景
  5. pyculiarity解决报错ValueError: data must be a 2 column data.frame, with thefirst column...
  6. 这家公司疑被查封、员工被带走,股东李笑来称“做天使投资人真不容易”
  7. 18年5年制计算机辅助考试题,2018年自考《计算机辅助教育》试题二
  8. 常用文件格式转换大全: PDF转Word,WORD转PDF转换器,DOCX转DOC转换
  9. 网络编程:UDP的socket编程(Linux)
  10. Windows 10怎样不利用第三方付费软件实现对C盘的深度清理
  11. ROS-ubuntu-系统安装
  12. 都说谷歌浏览器翻译插件好用,这些必不可少
  13. 棋牌游戏开发不可缺少的四大技术支持
  14. Emacs-206-Windows上实现org-pomodoro的声音提示播放
  15. win10管理员权限怎么获得_实用技巧:如何在win10中安装没有管理员权限的软件...
  16. easyexcel导出图片到具体excel具体位置并设置大小
  17. 设置<table>表格固定列宽
  18. 010 Editor算法逆向分析之编写注册机
  19. 重磅:2018逐浪字库样本发布
  20. android系统应用程序设置时间,Android应用程序设置系统时间的方法

热门文章

  1. 熔断器-hystrix使用
  2. phpexcel的读取和导出
  3. PHP:PhpSpreadsheet实现Excel的读取和写入
  4. UBT是如何处理Target.cs和Build.cs的?-Unreal4源码拆解-UnrealBuildTool功能流程解析
  5. 服务器i文件夹,IBM i上http server实用技巧之一:访问IBM i多文件系统
  6. coda创建虚拟环境后无法切换到原环境
  7. 国产安路FPGA 替代
  8. 12个View绘制流程高频面试题,震撼来袭免费下载!
  9. vue项目代码格式不统一怎么办?一招教你解决
  10. 数学不好,可以当程序员么?