Reemplazo con un clic de los materiales del objeto, incluidos todos los subobjetos del objeto

En el escenario de la aplicación, los colegas modelo requieren que el material del modelo se reemplace uniformemente con un material especial, como proyección holográfica, modelo blanco puro, si la estructura del modelo está en mal estado, es una pérdida de tiempo reemplazar uno por uno, entonces, en ai Se desarrolló un complemento Editor con ayuda.

código superior

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;
                }
            }
        }
    }
}

Cree y coloque el script en la carpeta del Editor del proyecto, puede encontrar la opción Herramientas en la barra de menú, haga clic en Cambiar material para abrirlo

¡Haga clic en el objeto a reemplazar! ¡El que está en el panel de Jerarquía!

 

 Coloque el material que necesita ser reemplazado, haga clic en "Reemplazar el material del objeto seleccionado y sus subobjetos" para completar el reemplazo

Supongo que te gusta

Origin blog.csdn.net/qq_41302243/article/details/130925239
Recomendado
Clasificación