首页 > Unity3D频道 > 【Unity3D研究院之游戏开发】 > Unity3D研究院之更换着色器后删除材质残留宏和属性(一百二十五)
2021
04-24

Unity3D研究院之更换着色器后删除材质残留宏和属性(一百二十五)

Unity的材质有个隐患,当美术同学在切换shader的时候会造成上一个shader里的宏或者属性(如贴图)造成残留,未来在打assetbundle的时候就会造成冗余浪费,Unity这种设计可以更好的解决运行期进行shader的切换,但大部分材质是不需要这种需求的,所以需要一个方法来一键删除残留。

Unity3D研究院之更换着色器后删除材质残留宏和属性(一百二十五) - 雨松MOMO程序研究院 - 1

首先使用ShaderUtil.GetShaderGlobalKeywords和GetShaderLocalKeywords来获取当前着色器有哪些宏,方法是内部方法所以需要用到反射,然后就可以取当前材质保存了哪些宏进行比较,最终删除残留的宏Material.shaderKeywords

接着就是残留属性的删除,比如残留贴图。使用shader.GetPropertyName获取当前shader有哪些属性,然后和当前材质中保留的进行比较删除残留的属性。

最后目前在项目中已经跑通暂未发现问题,如有疑问欢迎大家补充。

最后编辑:
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
捐 赠写博客不易,如果您想请我喝一杯星巴克的话?就进来看吧!

Unity3D研究院之更换着色器后删除材质残留宏和属性(一百二十五)》有 3 条评论

  1. 充电线 说:

    GetPropertyCount和GetPropertyName 在unity2018.4版本中需要从shaderUtil中获取。顺便感谢答主。

  2. 石头 说:

    直接使用旧材质的shader重新创建一个材质,然后把旧材质的数据赋值给新的材质,然后保存新的材质。这样创建出来的材质不会有残留信息,因为它的shader压根就没有修改过。

留下一个回复

你的email不会被公开。