using UnityEditor; using UnityEngine; public class ReplaceShaderToLit : EditorWindow { [MenuItem("Tools/材质批量替换为 URP/Lit")] static void ReplaceShaders() { string[] guids = AssetDatabase.FindAssets("t:Material", new[] { "Assets/MyAsset/Materials" }); foreach (string guid in guids) { string path = AssetDatabase.GUIDToAssetPath(guid); Material mat = AssetDatabase.LoadAssetAtPath(path); if (mat.shader.name != "Universal Render Pipeline/Lit") { Debug.Log($"替换材质:{mat.name}"); // 备份贴图 Texture baseMap = mat.GetTexture("_BaseMap"); Color baseColor = mat.HasProperty("_BaseColor") ? mat.GetColor("_BaseColor") : Color.white; float metallic = mat.HasProperty("_Metallic") ? mat.GetFloat("_Metallic") : 0f; float smoothness = mat.HasProperty("_Smoothness") ? mat.GetFloat("_Smoothness") : 0.5f; // 替换 Shader mat.shader = Shader.Find("Universal Render Pipeline/Lit"); // 恢复贴图和属性 mat.SetTexture("_BaseMap", baseMap); mat.SetColor("_BaseColor", baseColor); mat.SetFloat("_Metallic", metallic); mat.SetFloat("_Smoothness", smoothness); } } AssetDatabase.SaveAssets(); Debug.Log("批量替换完成!"); } }