質問
モデルのエフェクト シェーダはシーン エフェクトで呼び出され、プログラムはシェーダの属性を動的に変更する必要があります。属性は次のとおりです。
[Toggle(_USELINE_ON)] _UseLine("Use Line", Float) = 0
私の以前の理解によれば、Float の値を 1 または 0 に直接変更しても問題ないはずです。
//关闭
AniMat2.SetFloat("_UseLine", 0);
//打开
AniMat2.SetFloat("_UseLine", 1);
しかしうまくいかず、Webページを長時間検索しても結果が見つからず、ついにシェーダーが生成したコードに突破口が見つかりました。
解決
シェーダー コードで同様のスニペットを多数参照してください。
#ifdef _USELINE_ON
...
#else
...
#endif
[Toggle(_USELINE_ON)] は _USELINE_ON に関連付けられています。
これはマクロ定義であり、マクロ定義を動的に変更してコントロールを完成させることができます
これを行う方法は次のとおりです = 動的変更マクロの定義 =
このマテリアルのローカル シェーダー キーワードを無効にします。Material.DisableKeyword メソッド:
このマテリアルのローカル シェーダ キーワードを有効にします。Material.EnableKeyword メソッド:
このようにして、シェーダのトグル効果を制御できます
//关闭
AniMat2.DisableKeyword("_USELINE_ON");
//打开
AniMat2.EnableKeyword("_USELINE_ON");
梱包後は無効
パッケージング後にこの機能が無効になる問題は、https://www.jianshu.com/p/32f6e8a217d6で解決しました。
方法3でShader - multi_compileを修正することで解決しました。