当前位置: 首页> 文旅> 艺术 > Unity 编辑器扩展 一键替换指定物体下的所有材质球

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

时间:2025/7/10 8:29:09来源:https://blog.csdn.net/qq_58870988/article/details/139455305 浏览次数:1次

先看效果

实现方案

1:创建几个用于测试的Cube

2:创建一个脚本

3:编写脚本内容

主要是这部分的逻辑

附上完整代码

using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;public class Tool
{[MenuItem("TOOL/ReplaceMaterial")]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[i] = _Material;}item.sharedMaterials = materials;}}}}
}

4,然后就完成啦,同样你也可以按照我的思路再扩展扩展,可以替换你自己想要的内容

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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: