84 lines
2.3 KiB
C#
84 lines
2.3 KiB
C#
using UnityEngine;
|
|
using UnityEditor;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
|
|
/**
|
|
这是替换全局材质shader的脚本不要删
|
|
Default Lit在Package/Universal RP下面
|
|
By:Shiraka
|
|
**/
|
|
|
|
public class ChangeShaderTool : EditorWindow
|
|
{
|
|
private Shader sourceShader;
|
|
private Shader targetShader;
|
|
private List<Material> materialsToChange = new List<Material>();
|
|
|
|
[MenuItem("Tools/ShirakaTool/Change Shader Tool")]
|
|
public static void ShowWindow()
|
|
{
|
|
GetWindow<ChangeShaderTool>("Change Shader Tool");
|
|
}
|
|
|
|
private void OnGUI()
|
|
{
|
|
GUILayout.Label("批量替换 Shader 工具", EditorStyles.boldLabel);
|
|
sourceShader = EditorGUILayout.ObjectField("原始 Shader", sourceShader, typeof(Shader), false) as Shader;
|
|
targetShader = EditorGUILayout.ObjectField("目标 Shader", targetShader, typeof(Shader), false) as Shader;
|
|
|
|
if (GUILayout.Button("查找使用源 Shader 的材质"))
|
|
{
|
|
FindMaterialsUsingSourceShader();
|
|
}
|
|
|
|
if (materialsToChange.Count > 0)
|
|
{
|
|
GUILayout.Label($"找到 {materialsToChange.Count} 个材质使用了源 Shader。", EditorStyles.label);
|
|
|
|
if (GUILayout.Button("执行替换"))
|
|
{
|
|
ReplaceShaders();
|
|
}
|
|
}
|
|
}
|
|
|
|
private void FindMaterialsUsingSourceShader()
|
|
{
|
|
materialsToChange.Clear();
|
|
|
|
string[] materialGuids = AssetDatabase.FindAssets("t:Material");
|
|
foreach (string guid in materialGuids)
|
|
{
|
|
string path = AssetDatabase.GUIDToAssetPath(guid);
|
|
Material mat = AssetDatabase.LoadAssetAtPath<Material>(path);
|
|
if (mat != null && mat.shader == sourceShader)
|
|
{
|
|
materialsToChange.Add(mat);
|
|
}
|
|
}
|
|
|
|
Debug.Log($"找到 {materialsToChange.Count} 个材质使用了源 Shader。");
|
|
}
|
|
|
|
private void ReplaceShaders()
|
|
{
|
|
if (targetShader == null)
|
|
{
|
|
Debug.LogError("请指定目标 Shader。");
|
|
return;
|
|
}
|
|
|
|
foreach (Material mat in materialsToChange)
|
|
{
|
|
Undo.RecordObject(mat, "Change Shader");
|
|
mat.shader = targetShader;
|
|
EditorUtility.SetDirty(mat);
|
|
}
|
|
|
|
AssetDatabase.SaveAssets();
|
|
AssetDatabase.Refresh();
|
|
|
|
Debug.Log("Shader 替换完成。");
|
|
}
|
|
} |