关注

在代码中为材质(Material)分配纹理(Texture)时没有更新纹理(Material)。

问题

  • 在代码中为材质(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

 

这篇文章有帮助吗?
1 人中有 1 人觉得有帮助
还有其它问题?提交请求

0 评论

登录写评论。