一键更换对象材质,包括对象的所有子对象

  • Post author:
  • Post category:其他


应用场景,模型同事要求把模型的材质统一换成特殊的材质,比如全息投影,纯白模,如果建模的结构做的乱七八糟,一个一个的去更换,究极浪费时间,于是,在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 版权协议,转载请附上原文出处链接和本声明。