pregunta
El shader de efectos de un modelo se llama en el efecto de escena, y el programa necesita modificar dinámicamente un atributo del shader. Los atributos son los siguientes:
[Toggle(_USELINE_ON)] _UseLine("Use Line", Float) = 0
Según mi entendimiento previo, no debería haber problema si directamente modifico el valor de Float a 1 o 0:
//关闭
AniMat2.SetFloat("_UseLine", 0);
//打开
AniMat2.SetFloat("_UseLine", 1);
Sin embargo, no funcionó, y después de buscar durante mucho tiempo en la página web, no se encontraron resultados.Finalmente, se encontró un gran avance en el código generado por el sombreador.
Solución
Vea muchos fragmentos similares en el código de sombreado:
#ifdef _USELINE_ON
...
#else
...
#endif
[Toggle(_USELINE_ON)] está asociado con _USELINE_ON
Esta es una definición de macro, luego puedo modificar dinámicamente la definición de macro para completar el control
La forma de hacerlo es esta = definición de macro de modificación dinámica =
deshabilitar la palabra clave del sombreador local para este material. Método Material.DisableKeyword:
Habilita la palabra clave del sombreador local para este material. Método Material.EnableKeyword:
De esta forma, puedes controlar el efecto Toggle del shader
//关闭
AniMat2.DisableKeyword("_USELINE_ON");
//打开
AniMat2.EnableKeyword("_USELINE_ON");
Inválido después de empacar
El problema de que esta función no es válida después del empaquetado, lo resolví a través de https://www.jianshu.com/p/32f6e8a217d6 .
Lo resolví modificando Shader - multi_compile por el método 3.