I’m trying to load the standard shader from a script onto an object and make it transparent and set the emission color. I was able to get this working in the editor, but no matter what I build to (PC, Web, Android) the shader settings that I saw in the editor do not take place in the final build. There’s no transparency and no emission.
The code I’m using is
rend = go.GetComponent<Renderer>();
rend.material.shader = Shader.Find("Standard");
rend.material.renderQueue = 3000;
I think you have to manually include the shader variants in the build. Standard shader uses:
“If none of the used materials use a particular variant, then it is not included into the build.”
To force specific shader variants into the build you can setup a small scene where you have like 1 primitive with a material for each variant you want (or play the game until your material(s) created by script is visible).
Then go in Edit / Project Settings / Graphics, at the bottom you can create a ShaderVariantCollection with the button ‘Save to asset…’
A specific variant can be added manually in the inspector by selecting a ShaderVariantCollection asset but I would not recommend it for Standard shader.
Finally add your new collection in Preload Shaders array in the Graphic Settings.
More informations can be found here: Unity - Manual: Shader variant collections
Also, take a look at #pragma multi_compile. All of the variants that stem from it are automatically included in build. Just be careful it works a subtly differently from shader_feature. You need to specify the off variant as well as the on using an additional underscore. As in:
“#pragma multi_compile _ SOME_FEATURE_ON”