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; } } } } }