Example #1
0
 public static void SetMaterialShaderProperty(Material material, string templateName)
 {
     if (material != null)
     {
         string templateJson = FileTools.ReadFileUTf8(Application.streamingAssetsPath + "/" + templateName + ".json");
         if (!string.IsNullOrEmpty(templateJson))
         {
             StandardMaterialTemplate standardMaterialTemplate = JsonTools.ResolutionJsonFromString <StandardMaterialTemplate>(templateJson);
             //设置RenderingMode
             if (!string.IsNullOrEmpty(standardMaterialTemplate.RenderingMode))
             {
                 SetMaterialRenderingMode(material, standardMaterialTemplate.RenderingMode);
             }
             //设置_Color
             if (!string.IsNullOrEmpty(standardMaterialTemplate.MainMapsColor))
             {
                 SetColor(material, "_Color", standardMaterialTemplate.MainMapsColor);
             }
             //设置Alpha Cutoff
             if (!string.IsNullOrEmpty(standardMaterialTemplate.AlphaCutoff))
             {
                 SetFloatRange(material, "_Cutoff", standardMaterialTemplate.AlphaCutoff, 0f, 1f);
             }
             //设置Metallic
             if (!string.IsNullOrEmpty(standardMaterialTemplate.Metallic))
             {
                 SetFloatRange(material, "_Metallic", standardMaterialTemplate.Metallic, 0f, 1f);
             }
             //设置Smoothness
             if (!string.IsNullOrEmpty(standardMaterialTemplate.Smoothness))
             {
                 SetFloatRange(material, "_Glossiness", standardMaterialTemplate.Smoothness, 0f, 1f);
             }
             //设置EmissionColor
             if (!string.IsNullOrEmpty(standardMaterialTemplate.EmissionColor))
             {
                 if (standardMaterialTemplate.EmissionColor.Length == 6)
                 {
                     standardMaterialTemplate.EmissionColor += "00";
                 }
                 SetColor(material, "_EmissionColor", standardMaterialTemplate.EmissionColor);
             }
             //设置GlobalIllumination
             if (!string.IsNullOrEmpty(standardMaterialTemplate.GlobalIllumination))
             {
                 MaterialGlobalIlluminationFlags globalIlluminationFlags = EnumTools.GetEnum <MaterialGlobalIlluminationFlags>(standardMaterialTemplate.GlobalIllumination);
                 if (globalIlluminationFlags != (MaterialGlobalIlluminationFlags)(-1))
                 {
                     material.globalIlluminationFlags = globalIlluminationFlags;
                 }
             }
             //设置Emission
             if (!string.IsNullOrEmpty(standardMaterialTemplate.Emission))
             {
                 SetKeyword(material, "_EMISSION", standardMaterialTemplate.Emission);
             }
             //设置MainMaps Tiling X
             if (!string.IsNullOrEmpty(standardMaterialTemplate.MainMapsTilingX))
             {
                 float?x = StringToFloat(standardMaterialTemplate.MainMapsTilingX);
                 if (x != null)
                 {
                     material.mainTextureScale = new Vector2(x.Value, material.mainTextureScale.y);
                 }
             }
             //设置MainMaps Tiling Y
             if (!string.IsNullOrEmpty(standardMaterialTemplate.MainMapsTilingY))
             {
                 float?y = StringToFloat(standardMaterialTemplate.MainMapsTilingY);
                 if (y != null)
                 {
                     material.mainTextureScale = new Vector2(material.mainTextureScale.x, y.Value);
                 }
             }
             //设置MainMaps Offset X
             if (!string.IsNullOrEmpty(standardMaterialTemplate.MainMapsOffsetX))
             {
                 float?x = StringToFloat(standardMaterialTemplate.MainMapsOffsetX);
                 if (x != null)
                 {
                     material.mainTextureOffset = new Vector2(x.Value, material.mainTextureOffset.y);
                 }
             }
             //设置MainMaps Offset Y
             if (!string.IsNullOrEmpty(standardMaterialTemplate.MainMapsOffsetY))
             {
                 float?y = StringToFloat(standardMaterialTemplate.MainMapsOffsetY);
                 if (y != null)
                 {
                     material.mainTextureOffset = new Vector2(material.mainTextureOffset.x, y.Value);
                 }
             }
             //设置SpecularHighlights
             if (!string.IsNullOrEmpty(standardMaterialTemplate.SpecularHighlights))
             {
                 bool?specularHighlights = StringToBool(standardMaterialTemplate.SpecularHighlights);
                 if (specularHighlights != null)
                 {
                     if (specularHighlights.Value)
                     {
                         material.SetFloat("_SpecularHighlights", 1f);
                     }
                     else
                     {
                         material.SetFloat("_SpecularHighlights", 0f);
                     }
                 }
             }
             //设置Reflections
             if (!string.IsNullOrEmpty(standardMaterialTemplate.Reflections))
             {
                 bool?reflections = StringToBool(standardMaterialTemplate.Reflections);
                 if (reflections != null)
                 {
                     if (reflections.Value)
                     {
                         material.SetFloat("_GlossyReflections", 1f);
                     }
                     else
                     {
                         material.SetFloat("_GlossyReflections", 0f);
                     }
                 }
             }
             //设置RenderQueue
             if (!string.IsNullOrEmpty(standardMaterialTemplate.RenderQueue))
             {
                 int renderQueue;
                 if (int.TryParse(standardMaterialTemplate.RenderQueue, out renderQueue))
                 {
                     material.renderQueue = renderQueue;
                 }
             }
             //设置EnableInstancing
             if (!string.IsNullOrEmpty(standardMaterialTemplate.EnableInstancing))
             {
                 bool?enableInstancing = StringToBool(standardMaterialTemplate.EnableInstancing);
                 if (enableInstancing != null)
                 {
                     material.enableInstancing = enableInstancing.Value;
                 }
             }
         }
     }
 }