模型的default-shader材质清除 工具
This commit is contained in:
parent
cee467a1d3
commit
c4d8904ee6
107
Assets/Editor/InstantGame/ModelDelShaderTool.cs
Normal file
107
Assets/Editor/InstantGame/ModelDelShaderTool.cs
Normal 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();
|
||||
}
|
||||
}
|
||||
11
Assets/Editor/InstantGame/ModelDelShaderTool.cs.meta
Normal file
11
Assets/Editor/InstantGame/ModelDelShaderTool.cs.meta
Normal file
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e4784156e87165e4c9d91947bf4d7d73
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Loading…
x
Reference in New Issue
Block a user