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

news2024/9/27 9:21:48

目录

前言

配置环境

一、场景准备

二、代码演示

三、效果呈现

四、关于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.coloradmin.cn/o/1026413.html

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

相关文章

Mysql003:用户管理

前言&#xff1a;本章节讲解的是mysql中的用户管理&#xff0c;包括&#xff08;管理数据用户&#xff09;、&#xff08;控制数据库的访问权限&#xff09;。 目录 1. 查询用户 2. 创建用户 3. 修改用户密码 4. 删除用户 5. 权限控制 1. 查询用户 在mysql数据库中&#xff0…

华为手机如何开启设置健康使用手机模式限制孩子玩手机时间?

华为手机如何开启设置健康使用手机模式限制孩子玩手机时间&#xff1f; 1、在手机上找到「设置」并点击打开&#xff1b; 2、在设置内找到「健康使用手机」并点击进入&#xff1b; 3、开启健康使用手机后&#xff0c;选择孩子使用&#xff1b; 4、在健康使用手机内&#xff0c…

已解决 Java Error: Exception in thread ‘main‘ java.lang.ClassNotFoundException

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页: &#x1f405;&#x1f43e;猫头虎的博客&#x1f390;《面试题大全专栏》 &#x1f995; 文章图文并茂&#x1f996…

Godot配置C#语言编写脚本(使用VSCode作为外部编辑器)

文章目录 Godot部分查看VSCode的所在位置配置外部编辑器 配置VSCode编写脚本中文注释 其他文章字符编码 Godot部分 打开编辑器-编辑器设置&#xff1b; 查看VSCode的所在位置 右键单击你的VScode快捷方式&#xff0c;选择属性。 这里的目标就是你的VSCode所在的位置。 配…

并发编程——synchronized

文章目录 原子性、有序性、可见性原子性有序性可见性 synchronized使用synchronized锁升级synchronized-ObjectMonitor 原子性、有序性、可见性 原子性 数据库事务的原子性&#xff1a;是一个最小的执行的单位&#xff0c;一次事务的多次操作要么都成功&#xff0c;要么都失败…

【探索Linux】—— 强大的命令行工具 P.9(进程地址空间)

阅读导航 前言一、内存空间分布二、什么是进程地址空间1. 概念2. 进程地址空间的组成 三、进程地址空间的设计原理1. 基本原理2. 虚拟地址空间 概念 大小和范围 作用 虚拟地址空间的优点 3. 页表 四、为什么要有地址空间五、总结温馨提示 前言 前面我们讲了C语言的基础知识&am…

【智慧工地源码】智慧工地助力数字建造、智慧建造、安全建造、绿色建造

智慧工地围绕建设过程管理&#xff0c;建设项目与智能生产、科学管理建设项目信息生态系统集成在一起&#xff0c;该数据在虚拟现实环境中&#xff0c;将物联网收集的工程信息用于数据挖掘和分析&#xff0c;提供过程趋势预测和专家计划&#xff0c;实现工程建设的智能化管理&a…

Python实验一

1.计算圆椎体体系积。 要求: 交互式输入圆椎体的底面半径和高。 提示&#xff1a;&#xff08;1&#xff09;使用两个函数 input()和 eval()&#xff0c;其中 input()函数用于接收用户的输入&#xff0c;接收的值 是字符串&#xff1b;eval()函数用来执行一个字符串表达式&…

2023护网行动面试题目汇总

目录 一、常用的外围打点工具有哪些&#xff1f; 二、描述一下外围打点的基本流程&#xff1f; 三、怎么识别CDN? 四、怎么判断靶标站点是windows系统还是Linux系统&#xff1f; 五、举常见的FOFA在外网打点过程中的查询语句&#xff1f; 六、常见的未授权访问漏洞有哪些…

【官宣】游戏革命刚刚开始!

正如标题所言&#xff0c;随着官方 Aavegotchi dApp 游戏中心的推出&#xff0c;我们的 Gotchi 游戏革命今天正式开始。 游戏中心代表着 Aavegotchi.com 向类似于 Steam 和 Epic Games 等完整游戏平台的重大转变。 游戏中心是当今所有 Gotchi 主题游戏的综合目录&#xff0c;…

深度解剖数据在队列的应用

> 作者简介&#xff1a;დ旧言~&#xff0c;目前大一&#xff0c;现在学习Java&#xff0c;c&#xff0c;c&#xff0c;Python等 > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 望小伙伴们点赞&#x1f44d;收藏✨加关注哟&#x1f495;&#x1…

基于微信小程序+Springboot线上租房平台设计和实现【三端实现小程序+WEB响应式用户前端+后端管理】

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

【JAVA-Day28】数组下标越界问题:最佳解决方法

数组下标越界问题&#xff1a;最佳解决方法 数组下标越界问题&#xff1a;最佳解决方法引言一、什么是下标越界问题下标越界的表现 1.1 数组访问异常数组越界异常概述常见情况 1.2 内存访问错误内存访问错误概述常见情况 1.3 未定义行为未定义行为概述 二、下标越界问题如何产生…

Hive 的函数介绍

目录 ​编辑 一、内置运算符 1.1 关系运算符 1.2算术运算符 1.3逻辑运算符 1.4复杂类型函数 1.5对复杂类型函数操作 二、内置函数 2.1数学函数 2.2收集函数 2.3类型转换函数 2.4日期函数 2.5条件函数 2.6字符函数 三、内置的聚合函数 四、内置表生成函数 五、…

msvcp120.dll丢失怎么办?(五种方法快速解决)

首先&#xff0c;让我们来了解一下msvcp120.dll这个文件。msvcp120.dll是一个动态链接库文件&#xff0c;它是Microsoft Visual C 2012 Redistributable Package的一部分。这个文件的作用是支持一些应用程序的运行&#xff0c;例如游戏、办公软件等。当我们在使用这些软件时&am…

基于YOLOv8模型的水果目标检测系统(PyTorch+Pyside6+YOLOv8模型)

摘要&#xff1a;基于YOLOv8模型的水果目标检测系统可用于日常生活中检测与定位苹果&#xff08;apple&#xff09;、香蕉&#xff08;banan&#xff09;、葡萄&#xff08;grape&#xff09;、橘子&#xff08;orange&#xff09;、菠萝&#xff08;pineapple&#xff09;和西…

2054. 两个最好的不重叠活动;1255. 得分最高的单词集合;858. 镜面反射

2054. 两个最好的不重叠活动 核心思想:枚举小堆。因为你最多可以参加两个时间不重叠活动&#xff0c;所以我们就枚举其中一个活动&#xff0c;用一个堆来维护右边界的最小值&#xff0c;因为我们的event是排序的&#xff0c;前面满足的max_r_v&#xff0c;后面的event也肯定满…

局域网下共享文件夹全流程

请注意&#xff1a;配置共享文件夹以便他人无需输入账户和密码访问可能带来安全风险。请确保你明白这一点并在适当的网络环境中操作。 以下说明是基于 Windows 系统的&#xff1a; 步骤 1&#xff1a;共享文件夹 找到你想要共享的文件夹&#xff0c;右击选择“属性”。 转到…

大并发下请求合并(并发处理技巧)

大并发下请求合并 一次请求消耗的资源旧的方式改造后批量请求处理器批量请求包装类使用 性能测试旧的改造后的 一次请求消耗的资源 我们经常碰到查询请求的操作&#xff0c;例如根据用户id查询该用户的信息&#xff0c;接口仓储层查询用户正常的做法是通过id去数据库查询该用户…

小县城蔬菜配送小程序

在这个数字化时代&#xff0c;越来越多的人选择在线上购物。而果蔬作为日常生活中不可或缺的一部分&#xff0c;也越来越多的人选择在线上进行购买。那么如何开发一个果蔬配送小程序&#xff0c;轻松开启线上销售呢&#xff1f;下面就让我们来一起探讨一下。 首先&#xff0c;为…