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,然后就完成啦,同样你也可以按照我的思路再扩展扩展,可以替换你自己想要的内容

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/689506.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

20240607每日通信--------VUE3前端引入scoket-io,后端引入Netty-SocketIO,我成功了,希望一起交流沟通

无语 前置&#xff1a; VUE3 前端集成scoket-io socket.io-client Sringboot 3.0JDK17集成Netty-SocketIO Netty-SocketIO 失败原因一&#xff1a; 前期决定要写demo时候&#xff0c;单独了解了&#xff0c;后端引入Netty-SocketIO注意事项&#xff0c;详见我先头写的博客 前…

【因果推断python】24_倾向得分2

目录 倾向加权 倾向得分估计 倾向加权 好的&#xff0c;我们得到了倾向得分。怎么办&#xff1f;就像我说过的&#xff0c;我们需要做的就是以此为条件。例如&#xff0c;我们可以运行一个线性回归&#xff0c;它仅以倾向得分为条件&#xff0c;而不是所有的 X。现在&#xff…

什么是虚拟局域网?快解析有哪些的虚拟化应用功能?

什么是虚拟局域网&#xff1f;从字面上理解就是不是真实存在的局域网。虚拟局域网是将网络用户和设备集中在一起&#xff0c;从而可以对不同地域和商业的需要有一定的支持性。虚拟局域网有它的优点&#xff0c;在使用过程中可以为企业提供更安全、更稳定、更灵活的服务保障体系…

详细分析Mysql中的JSON_OBJECT() 基本知识(附Demo)

目录 前言1. 基本知识2. Demo 前言 对于基本的命令行以及优化推荐阅读&#xff1a; 数据库中增删改常用语法语句&#xff08;全&#xff09;Mysql优化高级篇&#xff08;全&#xff09;命令行登录Mysql的详细讲解 1. 基本知识 JSON_OBJECT() 是 MySQL 中用于生成 JSON 对象…

React实现在线预览word报告/本地选择报告预览

标题使用的核心技术点是docx-preview&#xff0c;读取到文件的File对象&#xff0c;用File去做文件展示&#xff0c;这里是才用将文件转base64字符串存储到localStorage中 在线预览word报告且包含word样式 下载需要使用的min.js文件进项目的public目录中&#xff08;上zip已包…

html--party网页制作

<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>fo安方party</title><style>body {f…

【PythonCode】力扣Leetcode21~25题Python版

【PythonCode】力扣Leetcode21~25题Python版 前言 力扣Leetcode是一个集学习、刷题、竞赛等功能于一体的编程学习平台&#xff0c;很多计算机相关专业的学生、编程自学者、IT从业者在上面学习和刷题。 在Leetcode上刷题&#xff0c;可以选择各种主流的编程语言&#xff0c;如C…

【CS.CN】优化HTTP传输:揭示Transfer-Encoding: chunked的奥秘与应用

文章目录 0 序言0.1 由来0.2 使用场景 1 Transfer-Encoding: chunked的机制2 语法 && 通过设置Transfer-Encoding: chunked优化性能3 总结References 0 序言 0.1 由来 Transfer-Encoding头部字段在HTTP/1.1中被引入&#xff0c;用于指示数据传输过程中使用的编码方式…

OlSoul系统调校程序v2024.06.05

软件介绍 OlSoul是一款能够适配用于Win各个系统的系统调校软件&#xff0c;OlSoul内置有众多调校功能可以直接使用&#xff0c;如有启用无线网络功能、启用打印机功能、系统快速休眠与休眠开关、快捷方式小箭头去除功能等&#xff0c;具体的调校功能多达几十项&#xff0c;可自…

vsCode双击文件才能打开文件,单击文件只能预览?

解决&#xff1a; 1、打开设置 2、搜索workbench.editor.enablePreview 3、更改为不勾选状态 4、关闭设置 效果&#xff1a; 现在单击一个文件时&#xff0c;将会在编辑器中直接打开&#xff0c;而非是预览状态。

51单片机-实机演示(LED点阵)

目录 前言: 一.线位置 二.扩展 三.总结 前言: 这是一篇关于51单片机实机LED点阵的插线图和代码说明.另外还有一篇我写的仿真的连接在这:http://t.csdnimg.cn/ZNLCl,欢迎大家的点赞,评论,关注. 一.线位置 接线实机图. 引脚位置注意: 1. *-* P00->RE8 P01->RE7 …

多源最短路径算法–Floyd算法

多源最短路径算法–Floyd算法 Floyd算法是为了求出每一对顶点之间的最短路径 它使用了动态规划的思想&#xff0c;将问题的求解分为了多个阶段 先来个例子&#xff0c;这是个有向图 Floyd算法的运行需要两个矩阵 最短路径矩阵 从当前这个状态看各顶点间的最短路径长度 例…

网络编程: 高级IO与多路转接select,poll,epoll的使用与介绍

网络编程: 高级IO与多路转接select,poll,epoll的使用与介绍 前言一.五种IO模型1.IO的本质2.五种IO模型1.五种IO模型2.同步IO与异步IO3.IO效率 二.非阻塞IO1.系统调用介绍2.验证代码 三.select多路转接1.系统调用接口2.写代码 : 基于select的TCP服务器1.封装的Socket接口2.开始写…

攻防世界---misc---Hear-with-your-Eyes

1、题目描述&#xff0c;下载附件&#xff0c;是一个.gz后缀的文件&#xff0c;查找资料发现&#xff0c;这个后缀是Linux系统的压缩包后缀。这里题目提示了用眼睛听音频&#xff0c;说明会有个音频&#xff0c;并且信息就在音频&#xff0c;可以用眼睛看到 2、将文件放在linux…

读书笔记-《软件定义安全》之二:SDN/NFV环境中的安全问题

第2章 SDN/NFV环境中的安全问题 1.架构安全 SDN强调了控制平面的集中化&#xff0c;从架构上颠覆了原有的网络管理&#xff0c;所以SDN的架构安全就是首先要解决的问题。例如&#xff0c;SDN实现中网络控制器相关的安全问题。 1.1 SDN架构的安全综述 从网络安全的角度&…

C++面向对象程序设计 - 文件操作与文件流

在实际应用中&#xff0c;常以磁盘文件作为对象&#xff0c;即能从磁盘文件读取数据&#xff0c;也能将数据输出到磁盘文件&#xff0c;磁盘是计算机的外部存储器&#xff0c;能够长期保留信息&#xff0c;能读能写&#xff0c;可以刷新重写等等。 在C中&#xff0c;文件操作通…

【Java】Java18的新特性

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

第四篇红队笔记-百靶精讲之Prime-wfuzz-wpscan-openssl enc

靶机Prime渗透 主机发现 nmap扫描与分析 目录爆破与模糊测试 dirb 目录扫描 dev secret.txt wfuzz发现 file参数 根据secret.txt-location.txt 和 file参数结合 secrettier360 根据filelocation.txt得到的on some other php page&#xff08;改用之前扫到image.p…

mqtt-emqx:设置遗嘱消息

【pom.xml】 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.3.12.RELEASE</version> </dependency> <dependency><groupId>org.eclipse…

新书推荐:2.2.4 第11练:消息循环

/*------------------------------------------------------------------------ 011 编程达人win32 API每日一练 第11个例子GetMessage.c&#xff1a;消息循环 MSG结构 GetMessage函数 TranslateMessage函数&#xff1a;将虚拟键消息转换为字符消息 DispatchMessage函数…