using System.Collections; using System.Collections.Generic; using UnityEngine; public static class ShaderExtension { /// /// 对于从AssetBundle中加载的材质,修改Shader参数可能会出现异常情况。 /// 此时需要在生成物体的时候,重新初始化Shader。 /// public static void InitializeShader(this Renderer renderer) { // 关键改动:使用 sharedMaterials Material[] sharedMats = renderer.sharedMaterials; foreach (var material in sharedMats) { if (material == null) continue; string shaderName = material.shader.name; Shader shader = Shader.Find(shaderName); if (shader != null) { // 只有当 Shader 真的不一致时才重新赋值,节省性能开销 if (material.shader != shader) { material.shader = shader; } } else { Debug.LogWarning($"Shader '{shaderName}' not found for material '{material.name}' on renderer '{renderer.name}'."); } } /*foreach (Material material in renderer.materials) { string shaderName = material.shader.name; Shader shader = Shader.Find(shaderName); if (shader != null) { material.shader = shader; } else { Debug.LogWarning($"Shader '{shaderName}' not found for material '{material.name}' on renderer '{renderer.name}'."); } }*/ } }