模型的default-shader材质清除 工具

This commit is contained in:
qiangye2 2021-12-27 21:04:21 +08:00
parent cee467a1d3
commit c4d8904ee6
2 changed files with 118 additions and 0 deletions

View File

@ -0,0 +1,107 @@
using System.IO;
using UnityEditor;
using UnityEngine;
using System.Collections;
public class ModelMatTool : AssetPostprocessor
{
private static bool _needWaiting = false;
/// <summary>
/// 是否启用删除操作
/// OnPostprocessModel回调在模型导入的时候就会调到
/// 通过这个标记位保证只在调用脚本函数的时候执行。
/// </summary>
private static bool _enableDelete = false;
/// <summary>
/// 批量删除模型上的材质
/// </summary>
public static IEnumerator DelModelMats(Object[] models)
{
foreach (Object obj in models)
{
while (_needWaiting) yield return null;
DelModelMat(obj as GameObject);
}
}
/// <summary>
/// 删除模型上绑定的材质
/// </summary>
/// <param name="model">模型对象</param>
public static void DelModelMat(GameObject model)
{
if (null == model) return;
string assetPath = AssetDatabase.GetAssetPath(model);
ModelImporter importer = AssetImporter.GetAtPath(assetPath) as ModelImporter;
if (null == importer) return;
_enableDelete = true;
_needWaiting = true;
importer.importMaterials = true;
importer.importMaterials = false;
AssetDatabase.ImportAsset(assetPath);
}
public static void DelModelMatByPath(string assetPath)
{
ModelImporter importer = AssetImporter.GetAtPath(assetPath) as ModelImporter;
if (null == importer) return;
_enableDelete = true;
_needWaiting = true;
importer.importMaterials = true;
importer.importMaterials = false;
AssetDatabase.ImportAsset(assetPath);
}
private void OnPostprocessModel(GameObject model)
{
if (null == model) return;
if (!_enableDelete) return;
_enableDelete = false;
Renderer[] renders = model.GetComponentsInParent<Renderer>();
if (null == renders) return;
foreach (Renderer render in renders)
{
render.sharedMaterials = new Material[render.sharedMaterials.Length];
}
renders = model.GetComponentsInChildren<Renderer>();
if (null == renders) return;
foreach (Renderer render in renders)
{
render.sharedMaterials = new Material[render.sharedMaterials.Length];
}
_needWaiting = false;
}
[MenuItem("Tools/删除模型的默认材质")]
static void DelSelectedModelMat()
{
/*
Object[] objs = Selection.GetFiltered(typeof(Object), SelectionMode.DeepAssets);
if ( objs != null)
{
DelModelMat(objs[0] as GameObject);
return;
}
*/
string[] m_folder = { "Assets" };
var mesh_assets = AssetDatabase.FindAssets("t:mesh", m_folder);
var i = 0;
foreach(var meshGuid in mesh_assets)
{
var assetPath_ = AssetDatabase.GUIDToAssetPath(meshGuid);
DelModelMatByPath(assetPath_);
EditorUtility.DisplayProgressBar("重新导出assets", string.Format("更改Mesh的材质 {0}/{1}", i, mesh_assets.Length), (i * 1.0f) / mesh_assets.Length);
i++;
}
EditorUtility.ClearProgressBar();
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: e4784156e87165e4c9d91947bf4d7d73
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: