ToB企服应用市场:ToB评测及商务社交产业平台

标题: Unity 编辑器扩展 一键替换指定物体下的所有材质球 [打印本页]

作者: 王國慶    时间: 2024-6-14 23:10
标题: Unity 编辑器扩展 一键替换指定物体下的所有材质球
先看效果

实现方案
1:创建几个用于测试的Cube

2:创建一个脚本

3:编写脚本内容
主要是这部分的逻辑

附上完整代码
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEditor;
  4. using UnityEngine;
  5. public class Tool
  6. {
  7.     [MenuItem("TOOL/ReplaceMaterial")]
  8.     public static void Open()
  9.     {
  10.         var window = EditorWindow.GetWindow(typeof(ReplaceMA));
  11.         window.title = "材质球替换工具";
  12.     }
  13. }
  14. public class ReplaceMA : EditorWindow
  15. {
  16.     private GameObject _GameObject;
  17.     private Material _Material;
  18.     private void OnGUI()
  19.     {
  20.         if (!Application.isPlaying)
  21.         {
  22.             GUILayout.Label("拖入一个你想替换材质球的游戏物体");
  23.             _GameObject = (GameObject)EditorGUILayout.ObjectField(_GameObject, typeof(GameObject), true);
  24.             GUILayout.Label("拖入一个你想替换的材质球");
  25.             _Material = (Material)EditorGUILayout.ObjectField(_Material, typeof(Material), true);
  26.             if (GUILayout.Button("点击替换"))
  27.             {
  28.                 if (_GameObject == null || _Material == null)
  29.                 {
  30.                     Debug.LogError("你要替换材质的游戏物体或者材质球为空");
  31.                     return;
  32.                 }
  33.                 var RenderList = new List<Renderer>();
  34.                 RenderList.Add(_GameObject.gameObject.GetComponent<Renderer>());
  35.                 RenderList.AddRange(_GameObject.GetComponentsInChildren<Renderer>());
  36.                 Undo.RecordObjects(RenderList.ToArray(), "Replace");//这句话非常重要,不然得气死个人!!!
  37.                 foreach (var item in RenderList)
  38.                 {
  39.                     var materials = item.sharedMaterials;
  40.                     for (int i = 0; i < materials.Length; i++)
  41.                     {
  42.                         materials[i] = _Material;
  43.                     }
  44.                     item.sharedMaterials = materials;
  45.                 }
  46.             }
  47.         }
  48.     }
  49. }
复制代码
4,然后就完成啦,同样你也可以按照我的思路再扩展扩展,可以替换你自己想要的内容

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4