UnityShader_缺省属性贴图默认透明得方法和如何解决Assetbundle打包的坑

凡事先戴头盔

网上很多说法都说,设置 = "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需手动

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

avi9111

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值