王國慶 发表于 2024-6-14 23:10:30

Unity 编辑器扩展 一键替换指定物体下的所有材质球

先看效果
https://img-blog.csdnimg.cn/direct/46ba701e9e4f480faaed8e8635b427f1.gif
实现方案
1:创建几个用于测试的Cube
https://img-blog.csdnimg.cn/direct/0568d16b1d2a4f73a2075152e7ec1049.png
2:创建一个脚本
https://img-blog.csdnimg.cn/direct/ee5f0ff4e53d4bcea9f119afc793e342.png
3:编写脚本内容
主要是这部分的逻辑
https://img-blog.csdnimg.cn/direct/3a31ce9e1d2644dbadb2c70602190dcb.png
附上完整代码
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;

public class Tool
{
   
    public static void Open()
    {
      var window = EditorWindow.GetWindow(typeof(ReplaceMA));
      window.title = "材质球替换工具";
    }
}
public class ReplaceMA : EditorWindow
{
    private GameObject _GameObject;
    private Material _Material;

    private void OnGUI()
    {
      if (!Application.isPlaying)
      {
            GUILayout.Label("拖入一个你想替换材质球的游戏物体");
            _GameObject = (GameObject)EditorGUILayout.ObjectField(_GameObject, typeof(GameObject), true);
            GUILayout.Label("拖入一个你想替换的材质球");
            _Material = (Material)EditorGUILayout.ObjectField(_Material, typeof(Material), true);

            if (GUILayout.Button("点击替换"))
            {
                if (_GameObject == null || _Material == null)
                {
                  Debug.LogError("你要替换材质的游戏物体或者材质球为空");
                  return;
                }
                var RenderList = new List<Renderer>();
                RenderList.Add(_GameObject.gameObject.GetComponent<Renderer>());
                RenderList.AddRange(_GameObject.GetComponentsInChildren<Renderer>());
                Undo.RecordObjects(RenderList.ToArray(), "Replace");//这句话非常重要,不然得气死个人!!!
                foreach (var item in RenderList)
                {
                  var materials = item.sharedMaterials;
                  for (int i = 0; i < materials.Length; i++)
                  {
                        materials = _Material;
                  }
                  item.sharedMaterials = materials;
                }
            }
      }
    }
} 4,然后就完成啦,同样你也可以按照我的思路再扩展扩展,可以替换你自己想要的内容

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Unity 编辑器扩展 一键替换指定物体下的所有材质球