应用场景,模型同事要求把模型的材质统一换成特殊的材质,比如全息投影,纯白模,如果建模的结构做的乱七八糟,一个一个的去更换,究极浪费时间,于是,在ai的帮助下开发了一个Editor插件。
上代码
using UnityEditor;
using UnityEngine;
public class ChangeMaterialEditor : EditorWindow
{
Material newMaterial;
[MenuItem("Tools/Change Material")]
static void Init()
{
ChangeMaterialEditor window = (ChangeMaterialEditor)EditorWindow.GetWindow(typeof(ChangeMaterialEditor));
window.Show();
}
void OnGUI()
{
GUILayout.Label("Change Material", EditorStyles.boldLabel);
// 绑定材质球,ObjectField是用于在编辑器中显示和选择Unity对象的控件
// 其中typeof(Material)是指定该类型,后面参数false是不允许选择空对象
newMaterial = (Material)EditorGUILayout.ObjectField("更换成的材质", newMaterial, typeof(Material), false);
if (GUILayout.Button("更换选中对象材质"))
{
GameObject[] selectedObjects = Selection.gameObjects;
foreach (GameObject obj in selectedObjects)
{
Renderer renderer = obj.GetComponent<Renderer>();
if (renderer != null)
{
renderer.material = newMaterial;
}
}
}
if (GUILayout.Button("更换选中对象以及其子对象的材质"))
{
GameObject[] selectedObjects = Selection.gameObjects;
foreach (GameObject obj in selectedObjects)
{
MeshRenderer[] meshRenderers = obj.GetComponentsInChildren<MeshRenderer>();
foreach (MeshRenderer meshRenderer in meshRenderers)
{
Material[] materials = meshRenderer.sharedMaterials;
for (int i = 0; i < materials.Length; i++)
{
materials[i] = newMaterial;
}
meshRenderer.sharedMaterials = materials;
}
}
}
}
}
将脚本创建并放置到工程Editor文件夹中,在菜单栏可以找到Tools的选项,点击ChangeMaterial即可打开
点击要更换的对象!Hierachy面板里的那个!
放入需要更换的材质,点击“更换选中对象以及其子对象的材质”就完成更换啦
版权声明:本文为qq_41302243原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。