1、shader_feature_local声明方式
带_local只在局部(自己所在的shader生效)
与multi_compile_local和multi_compile区别:
变体是局部的所以不会增加全局变体的数量,全局变体会受限制在几十个以内,所以当你确实不需要全局时 应当尽可能地使用_local的。(multi_compile_local同理)
最关键区别:shader_feature声明的变体 它必须要在材质球默认激活才会打到游戏包体里,如果默认没有激活,在打出包体后会找不到这个变体。而multi_compile(_local)声明的变体都会全部打进去。
如果发现变体不生效,基本可以检查是否默认开启,可以将全部shader_feature的默认开启 或 改成multi_compile(_local)声明。或者强制将一个带有开启shader_feature声明变体的shader拖拽进"always included shaders"列表。
2、shader_feature声明方式(不在阐述)
3、multi_compile_local声明(不在阐述)
带_local只在局部(自己所在的shader生效)
4、multi_compile声明(不在阐述)
5、坑爹点:
代码使用
[Toggle(_FLOWLIGHT)]
_EnableFlowLight("Enable Flow Light", Int) = 0
使用了一个Toggle去开启/关闭变体_FLOWLIGHT。
在C#代码里直接去写SetInt("_EnableFlowLight", 1)或SetInt("_EnableFlowLight", 0)都是无法正常激活或关闭变体_FLOWLIGHT的。
必须使用Material的EnableKeyword和DisableKeyword才可行。
不过应该也有办法能刷新材质球状态可能就会切到正确的状态,因为Insperator窗口的toggle已经是设置成正确的状态了。我懒得找了怎么刷了,反正就必须要使用这2个API才能正常设置变体。