问题
- 在代码中为材质(Material)分配纹理(Texture)时没有更新纹理(Material)。只有在查看器中打开材质窗口才可以。
原因
使用脚本变更 Material(材质)会导致Standard Shader(标准着色器)使用不同的变体。
例如将一个 Normal Map赋值给一个没有Normal Map的材质,或者将 Emissive 等级设为大于零的值,但这个值本身是0时。
解决方案
首先要使用EnableKeyword 函数来启用 Standard Shader变体。如果您使用了材质原本没有使用的着色器特性,您就需要使用不同的着色器变体。
Standard Shader中的特定关键字及其功能如下:
_NORMALMAP (Normal Mapping)
_NORMALMAP (法线映射)
_ALPHATEST_ON (“Cut out” Transparency Rendering Mode)
_ALPHATEST_ON (“裁剪” 透明渲染模式)
_ALPHABLEND_ON (“Fade” Transparency Rendering Mode)
_ALPHABLEND_ON (“凋谢 ” 透明渲染模式)
_ALPHAPREMULTIPLY_ON (“Transparent” Transparency Rendering Mode)
_ALPHAPREMULTIPLY_ON (“透明” 透明渲染模式)
_EMISSION (Emission Colour or Emission Mapping)
_EMISSION (发散颜色或发散映射)
_PARALLAXMAP (Height Mapping)
_PARALLAXMAP (高度映射)
_DETAIL_MULX2 (Secondary “Detail” Maps (Albedo & Normal Map)
_DETAIL_MULX2 (二次“详细信息”地图(反照率和法线贴图)
_METALLICGLOSSMAP (Metallic/Smoothness Mapping in Metallic Workflow)
_METALLICGLOSSMAP (金属工作流中的金属/平滑映射)
_SPECCGLOSSMAP (Specular/Smoothness Mapping in Specular Workflow)
_SPECCGLOSSMAP (镜面工作流中的镜面/平滑映射)
更多信息
http://docs.unity3d.com/Manual/MaterialsAccessingViaScript.html