Unity实战(11):项目非启动状态下使用代码批量替换材质

目录

前言

配置环境

一、场景准备

二、代码演示

三、效果呈现

四、关于Resources.Load()的说明


前言

本文内容为unity在编辑状态(非启动状态)下使用代码批量替换材质,该方法也适用于其他在编辑状态下对物体的操作需求。

配置环境

win10

unity2021.2.13f1

visual studio2022

一、场景准备

在建模软件中做一个场景并导入unity如下

现在的目标是在不启动项目的情况下,将场景中的物体批量替换材质 

二、代码演示

替换单个物体材质

在Assets下新建一个文件夹名为Editor,在这个文件夹下新建一个脚本名为ChangeModelMaterials.cs,需要注意的是该类继承自Editor。这个Editor文件夹下的脚本不参与项目编译

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;public class ChangeModelMaterils : Editor {public static GameObject targetModel;public static Material srcTargett;//创建多级菜单并声明顺序[MenuItem("自定义工具/材质替换", false, 100)]public static void Menu1() {// 获取场景中的物体targetModel = GameObject.Find("mod_06");// 遍历处理的静态方法,当遍历到一个子物体后就会触发相应的处理事件,此处的事件是替换指定的材质GetGOAllChilren<Renderer>(targetModel, (Renderer r) => {Material mat = Resources.Load<Material>("Materials/mod_06_lightmap 1") as Material;//r.material = mat;Debug.Log(mat);targetModel.GetComponent<MeshRenderer>().material = mat;});}// 遍历获取所有子物体public static void GetGOAllChilren<W>(GameObject go, Action<W> a) {if (go.transform.childCount > 0) {for (int i = 0; i < go.transform.childCount; i++) {GameObject g = go.transform.GetChild(i).gameObject;GetGOAllChilren<W>(g, a);}}if (go.TryGetComponent<W>(out W w)) {a?.Invoke(w);};}
}

 保存后可以看到unity中多了一栏

三、效果呈现

当点击工具时便会执行上述代码中的Menu1方法,这里选择替换材质的模型是mod_06(茶壶),会将其材质替换为mod_06_lightmap 1

替换前:

替换后:

 这样便在不启动项目的前提下替换了物体的材质。

批量替换材质只需要修改上述代码即可。

四、关于Resources.Load()的说明

这个方法加载本地文件时需要在Assets下新建一个Resources的文件夹,路径“Materials/mod_06_lightmap 1”是在Resources下Materials下面的mod_09_lightmap 1.mat文件,在写路径的时候不要加上文件的后缀。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ResponseEntity下载包含点的文件名无法下载

ResponseEntity下载包含点的文件名无法下载 原因&#xff1a;这可能是因为浏览器或服务器不正确地解析文件名的问题。文件名中的点通常被解释为文件扩展名的一部分 1.UriUtils String filename "file.name.with.dot.txt"; // 替换为你的文件名 filename UriUtil…

ros2与web通信实例

ros2与web通信实例 最近需要进行ros2与web端进行通信操作&#xff0c;目标是ros2发送的消息web端能够显示在界面&#xff0c;并且前端能够发布数据&#xff0c;最终实例如下&#xff1a; 然而网上查的的资料如古月居的&#xff1a; 利用Websocket实现ROS与Web的交互 https:/…

子网掩码的作用

1.子网掩码的作用 子网掩码是用来给ip划分网络位和主机位的。 子网掩码是为了给ip确定谁是网络地址、谁是主机地址的。子网掩码的二进制位是1的对应的是网络地址&#xff0c;子网掩码的二进制位是0的对应的是主机地址。

Ribbon负载均衡器

两种&#xff1a; 1.1 集中式负载均衡&#xff0c;服务端负载均衡 硬件 nginx 轮询、负载、哈希、随机、权重 为什么要做负载均衡&#xff1f; 1.2 客户端负载均衡器 用客户端 负载均衡器 很多机制可以自定义 小知识&#xff1a;不想让别人调自己&#xff0c;只想用别人的…

使用Arduino简单测试HC-08蓝牙模块

目录 模块简介模块测试接线代码测试现象 总结 模块简介 HC-08 蓝牙串口通信模块是新一代的基于 Bluetooth Specification V4.0 BLE 蓝牙协议的数传模块。无线工作频段为 2.4GHz ISM&#xff0c;调制方式是 GFSK。模块最大发射功率为4dBm&#xff0c;接收灵度-93dBm&#xff0c…

[2023-09-12]Oracle备库查询报ORA-01187

一个多表关联的语句在备库执行查询时提示ORA-01187: cannot read from file because it failed verification tests&#xff0c;单独对某一个表查询则正常返回&#xff08;因为不需要排序等&#xff0c;没有用到临时表空间&#xff09;。 查看报错信息发现是提示的临时数据文件…

51单片机光照强度检测自动路灯开关仿真( proteus仿真+程序+报告+讲解视频)

51单片机光照强度检测自动路灯开关仿真( proteus仿真程序报告讲解视频&#xff09; 仿真图proteus7.8及以上 程序编译器&#xff1a;keil 4/keil 5 编程语言&#xff1a;C语言 设计编号&#xff1a;S0052 讲解视频 基于51单片机的光照检测自动路灯控制仿真设计( proteus仿…

如何搭建游戏平台?

搭建游戏平台是一个复杂的任务&#xff0c;涉及多个方面的工作。下面是一些关键步骤和注意事项&#xff0c;以帮助您搭建游戏平台&#xff1a; 平台开发&#xff1a;开发游戏平台的关键部分&#xff0c;包括网站或应用程序的开发、数据库设计、用户界面设计、游戏上传和管理工具…

ES7新特性深度解析:提升JavaScript开发效率的利器

前言 ES7&#xff08;ECMAScript 2016&#xff09;是JavaScript的最新版本&#xff0c;引入了一些强大的新特性&#xff0c;旨在提升开发者的工作效率。本篇博客将深度解析ES7的一些重要特性&#xff0c;并且以不超过50%的代码比例展示其用法。 包含属性初始化器的类(Class)定…

加速新药问世,药企如何利用云+网的优势?

随着计算能力的不断提高和人工智能技术的迅速发展&#xff0c;药物研发领域正迎来一场革命。云端强大的智能算法正成为药物研发企业的得力助手&#xff0c;推动着药物的精确设计和固相筛选。这使得药物设计、固相筛选以及药物制剂开发的时间大幅缩短&#xff0c;有望加速新药物…

MyBatis之增删查改功能

文章目录 一、创建各种类二、MyBatis的各种功能 1、查询<select>2、增加<insert>3、修改<update>4、删除<delete>三、总结 前言 在MyBatis项目中编写代码实现对MySql数据库的增删查改 一、创建各种类 1、在Java包的mapper文件下创建一个接口 我创建…

vmware NAT模式配置方式

VMware在NAT模式下宿主机与多台虚拟机互相访问&#xff0c;可连接外网 虚拟机的网络连接类型的选择&#xff0c;网络连接类型一共有桥接、NAT、仅主机和不联网四种。 桥接&#xff1a;选择桥接模式的话虚拟机和宿主机在网络上就是平级的关系&#xff0c;相当于连接在同一交换机…

滚雪球学Java(25):动态代理

&#x1f3c6;本文收录于「滚雪球学Java」专栏&#xff0c;专业攻坚指数级提升&#xff0c;助你一臂之力&#xff0c;带你早日登顶&#x1f680;&#xff0c;欢迎大家关注&&收藏&#xff01;持续更新中&#xff0c;up&#xff01;up&#xff01;up&#xff01;&#xf…

Java中使用BigDecimal类相除保留两位小数

问题 遇到2个数相除&#xff0c;需要保留2位小数的结果。 解决 BigDecimal sum ...; BigDecimal yearValue ...;MathContext mathContext new MathContext(2, RoundingMode.DOWN); yearValue.divide(sum, mathContext);

【echart 】legend.icon传递svg图标,图标不显示的原因。

问题描述&#xff1a; echart的折线图设置legend.icon传递自定义的svg图标&#xff0c;由于线条图标太细&#xff0c;itemWidth&#xff0c;itemHeight设置不够大&#xff08;30px以下&#xff09;导致看不到图标。 解决&#xff1a; 让UI帮忙把细图标加粗上传到自家的字体图…

SpringBoot配置加载优先级

1.SpringBoot配置文件 SpringBoot使用一个以application命名的配置文件作为默认的全局配置文件。支持properties后缀结尾的配置文件或者以yml/yaml后缀结尾的YAML的文件配置。 以设置应用端口为例: properties文件示例(application.properties)&#xff1a; server.port80 Y…

pytorch学习2

分类问题 手写数字数据集 其中&#xff0c;每个数字图片大小是28 x 28&#xff0c;矩阵中每个元素的大小为[0&#xff0c;1]区间的灰度值&#xff0c;将二维矩阵拉平(flat)为一维784&#xff0c;数据量不变&#xff0c;这样能忽略上下位置相关性&#xff0c;甚至左右位置相关性…

编译opencv-3.4.5 [交叉编译]

在unbuntu20.04环境下编译opencv3.4.5&#xff0c; cmake 版本&#xff1a;3.27.4 gcc 版本&#xff1a;11.4.0 g版本&#xff1a;11.4.0 在此环境下编译opencv4.5.4正常。 1. 编译时遇到的问题 &#xff08;1&#xff09; Built target libprotobuf make: *** [Makefile:163…

10 种超好用的 MyBatis 写法

MyBatis 虽说给我们的开发带来了很多的便捷&#xff0c;但有些地方写起来依旧比较的麻烦&#xff0c;比如配置XML的时候&#xff0c;但是一个好的写法&#xff0c;不仅能为我们节省不少时间、还能能降低出错的概率&#xff0c;下面就给大家分享一些优质的写法&#xff1a; 1用来…

Android编译snowboy

如果Ubuntu是新创建的&#xff0c;可以安装build-essential软件包 sudo apt install build-essential该命令将安装一堆新软件包&#xff0c;包括gcc&#xff0c;g和make。 一、Ubuntu安装git 1.打开终端 在Ubuntu系统中&#xff0c;我们可以使用终端输入命令进行操作。打开…