Net.Like.Xue.Tokyo/Packages-Local/Net.BITKit.Bounds.Unity/ReplaceShaderToLit.cs

40 lines
1.5 KiB
C#
Raw Permalink Normal View History

2025-06-24 23:49:13 +08:00
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<Material>(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("批量替换完成!");
}
}