凡事先戴头盔
网上很多说法都说,设置 = "white"{};或者设为为空
作者实测,确实是能设置 = “” {};但是明显是灰色
并没什么卵用
Shader贴图默认为空要如何实现
(其实就是利用 Shader_feature + 宏判断)
本来Shader就已经不是高级编程语言,加上各种宏编写,其实是难上加难;但对于国内运营,服务器等傻瓜程序员,早就攻克这个难关;所以外人看起来他们就是做的很爽,他们却很少说出来,因为只可意会不能言传(宝宝心里有苦会说出来吗);其他他们不觉得苦,写了一堆程序,但其实是很难重用,很难维护,没什么“”内涵“”的程序。
Shader或其他脚本语言,确实是没有什么独创的方法,反而是我们逆来顺受,各种写法早就玩坏了
最近网上和视频主流出1990 年雷军写的汇编,其实也和一般的脚本语言也不会差多少
一般,当你需要贴图的缺省为空,或者是一个透明贴图
(其实,你都会需要代码动态加载)
所以,调用代码为:
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下进行卐解:
这时候 你打开材质球,就能看到 keyword
material_keywords
- 关键
- 不是分号,而是用空格区分
- 就算不是用这个材质,只要打包一个,Assetbundle打包时能找到Shader引用即可(需要Shader打包正确)
- 只要Editor内拖动Shader到Material就会自动填充,但作者其中一个feature需手动