凡事先戴头盔

网上很多说法都说,设置 = "white"{};或者设为为空

作者实测,确实是能设置 = “” {};但是明显是灰色

并没什么卵用

Shader贴图默认为空要如何实现

(其实就是利用 Shader_feature + 宏判断)

本来Shader就已经不是高级编程语言,加上各种宏编写,其实是难上加难;但对于国内运营,服务器等傻瓜程序员,早就攻克这个难关;所以外人看起来他们就是做的很爽,他们却很少说出来,因为只可意会不能言传(宝宝心里有苦会说出来吗);其他他们不觉得苦,写了一堆程序,但其实是很难重用,很难维护,没什么“”内涵“”的程序。

Shader或其他脚本语言,确实是没有什么独创的方法,反而是我们逆来顺受,各种写法早就玩坏了

最近网上和视频主流出1990 年雷军写的汇编,其实也和一般的脚本语言也不会差多少

Unity 透明图的Uv比图小 unity透明贴图_脚本语言

一般,当你需要贴图的缺省为空,或者是一个透明贴图

(其实,你都会需要代码动态加载)

所以,调用代码为:

matNew.EnableKeyword("_MainTexOn");
                    matNew.SetTexture("TEX_NAME", tex);

 

没想到坑来的那么大,那么快

(shader_feature和mult-compile的区别就不说了,因为也是没啥卵用了,关键原理差不多)

shader_feature

  • 作用
  • 根据编译选项产生shader变体
  • 避免分支语句导致的性能下降
  • 主要用于材质选项上
  • unity打包时如果发现没有材质引用shader_feature产生的变体,不会打包该变体

 

打包AB后,Shader 无效的,解决方法

(或者你并不会遇到这个隐形坑)

主要原理,就是没打包到自定义_freature的变体Shader

在真机上,Shader是正常的,代码也正确执行,但死活Material SetTexture就是无效

就算翻遍了官方的API文档也毫无结果,但基本能定位

在国内论坛稍微找一下就找到解决方法

首先,想看到keyword,你需要在inspector下进行卐解:

Unity 透明图的Uv比图小 unity透明贴图_解决方法_02

这时候 你打开材质球,就能看到 keyword

Unity 透明图的Uv比图小 unity透明贴图_贴图_03

material_keywords

  • 关键
  • 不是分号,而是用空格区分
  • 就算不是用这个材质,只要打包一个,Assetbundle打包时能找到Shader引用即可(需要Shader打包正确)
  • 只要Editor内拖动Shader到Material就会自动填充,但作者其中一个feature需手动