40 lines
1.5 KiB
C#
40 lines
1.5 KiB
C#
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("批量替换完成!");
|
|
}
|
|
} |