ToB企服应用市场:ToB评测及商务社交产业平台
标题:
Unity 编辑器扩展 一键替换指定物体下的所有材质球
[打印本页]
作者:
王國慶
时间:
2024-6-14 23:10
标题:
Unity 编辑器扩展 一键替换指定物体下的所有材质球
先看效果
实现方案
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,然后就完成啦,
同样你也可以按照我的思路再扩展扩展,可以替换你自己想要的内容
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4