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

2023-11-02

目录

前言

配置环境

一、场景准备

二、代码演示

三、效果呈现

四、关于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文件,在写路径的时候不要加上文件的后缀。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • unity网络资源导入

    1 找到需要导入的文件 这里导入fbx格式 2 打开unity界面 在Asset目录下创建文件夹FBX 将需要导入的fbx预制体或整个文件夹拖入创建的FBX文件夹下 3 选中需要的fbx预制体并拖至场景中 4 双击定位到当前物体 5 找到需
  • Unity 分块延迟渲染01 (TBDR)

    现代移动端图形体系结构的概述 现代SoC通常会同时集成CPU和GPU CPU被用于处理需要低内存延迟的序列 大量分支的数据集 其晶体管用于流控制和数据缓存 GPU为处理大型 未分支的数据集 如3D渲染 晶体管专用于寄存器和算术逻辑单元 而不
  • Unity中级客户端开发工程师的进阶之路

    上期UWA技能成长系统之 Unity高级客户端开发工程师的进阶之路 得到了很多Unity开发者的肯定 通过系统的学习 可以掌握游戏性能瓶颈定位的方法和常见的CPU GPU 内存相关的性能优化方法 UWA技能成长系统是UWA根据学员的职业发展
  • Unity-AR 简介

    Unity AR 简介 现有Unity AR Sdk ARKit 苹果推出的AR开发平台 ARCore Google 推出的增强现实 SDK ARFoundation ARFoundation是ARKit XR插件和ARCore XR插件
  • Unity中按钮检测鼠标状态

    改方法主要是用于按钮检测鼠标的进入 滑出 点击 抬起 长按 长按停止 1 先将下面这个脚本挂载到需要检测鼠标状态的按钮上 using System Collections using System Collections Generic u
  • UnityVR--组件3--Line Renderer--线性渲染

    目录 线性渲染组件简介 绘制线条Line Renderer组件介绍 绘制拖尾Trail Renderer组件介绍 应用1 使用Line Renderer绘制线段 应用1实现 使用系统工具或自定义工具绘制线段 应用2 Trail Render
  • Unity3d 插件 系列——DoTweenPro介绍(图文详细+案例)

    Unity3d 插件 系列 DoTweenPro介绍 图文详细 案例 前言 一 DoTweenPro简介 二 DoTweenPro安装 三 DoTweenPro主要组件 1 DoTweenAnimation 2 DoTweenPath 3
  • unity后台加密时间锁

    前言 在做一些项目的时候 有些不良甲方在给完项目后会有不给尾款的情况 之前都是加一些水印啥的 感觉不是很方便 第一不美观 第二如果甲方给完尾款后还得重新打包去水印 然后又做过一个本地的时间锁 等到时间 程序直接退出 但是感觉还是不方便 有时
  • 毕业设计|Python网络爬虫与推荐算法的新闻推荐平台

    作者简介 Java领域优质创作者 CSDN博客专家 CSDN内容合伙人 掘金特邀作者 阿里云博客专家 51CTO特邀作者 多年架构师设计经验 腾讯课堂常驻讲师 主要内容 Java项目 Python项目 前端项目 人工智能与大数据 简历模板
  • 【UE 材质】角色触碰空气墙效果

    效果 步骤 1 新建一个工程 创建一个Basic关卡 添加一个第三人称游戏资源到内容浏览器 2 新建一个材质参数集 这里命名为 MPC Vector 打开 MPC Vector 添加一个向量参数 3 新建一个材质 这里命名为 M Wall
  • 【UE 材质】任务目标点效果

    效果 步骤 1 新建一个工程 创建一个Basic关卡 2 新建一个材质 这里命名为 M GoalPoint 打开 M GoalPoint 设置混合模式为 半透明 勾选 双面 在材质图表中添加如下节点 此时预览效果如下 继续添加如下节点 此时
  • unity小球跟随音乐节奏放大缩小和改变颜色

    放在小球身上 设置对应组件即可 using System Collections using System Collections Generic using Unity VisualScripting using UnityEngine
  • 【Unity】如何让Unity程序一打开就运行命令行命令

    背景 Unity程序有时依赖于某些服务去实现一些功能 此时可能需要类似打开程序就自动运行Windows命令行命令的功能 方法 using UnityEngine using System Diagnostics using System T
  • Unity学习笔记

    一 旋转欧拉角 四元数 Vector3 rotate new Vector3 0 30 0 Quaternion quaternion Quaternion identity quaternion Quaternion Euler rota
  • Unity中URP下的指数雾

    文章目录 前言 一 指数雾 雾效因子 1 FOG EXP 2 FOG EXP2 二 MixFog 1 ComputeFogIntensity 雾效强度计算 2 lerp fogColor fragColor fogIntensity 雾效颜
  • U3D游戏开发中摇杆的制作(UGUI版)

    在PC端模拟摇杆 实现玩家通过控制摇杆让玩家移动 以下是完整代码 using System Collections using System Collections Generic using UnityEngine using Unity
  • 游戏开发常见操作梳理系列之——玩家信息的显示系统

    在游戏中 有不少游戏在左上角会出现玩家的头像和等级以及血量 这就是玩家的信息显示系统 那么这些是如何制作的呢 接下来我将讲讲代码的操作 其它操作我会在其它笔记中一一说明 敬请期待 信息的显示相当简单就是控制一些UI 然后在其它系统里面填写相
  • 游戏开发常见操作梳理之NPC药品商店系统(NGUI版)

    后续会出UGUI Json的版本 敬请期待 游戏开发中经常会出现药品商店 实际操作与武器商店类似 甚至根据实际情况可以简化设置 废话不多说 直接上代码 药品商店的源码 using System Collections using Syste
  • 游戏开发常见操作系列之敌人系统的开发一(U3D)

    在开发游戏的过程中 我们常常会出现一些敌人攻击我们玩家 并且实现掉血以及死亡的现象 敌人还会源源不断地生成 这是怎么制作的呢 接下来为大家提供方法 其中使用了NGUI 后续会更新其它方法 敬请期待 使用HUDText实现扣血时显示文本 直接
  • 【UE】在控件蓝图中通过时间轴控制材质参数变化

    效果 步骤 1 新建一个控件蓝图和一个材质 2 打开材质 设置材质域为用户界面 混合模式设置为 半透明 在材质图表中添加两个参数来控制材质的颜色和不透明度 3 对材质创建材质实例 4 打开控件蓝图 在画布面板中添加一个图像控件 将刚才创建的

随机推荐

  • 自动化平台搭建之定制log系统

    log系统概述 我们搭建的自动化平台 无论是Web和Android 都少不了一个重要的模块 那就是log输出模块 该模块记录了整个自动化平台运行期间的日志记录 完成自动化测试后 我们可以通过日志追踪和分析fail项 根据自动化平台log输出
  • Intellj IDEA基础设置

    基础配置 view toolbar 配置jdk configure project defaults project structure new jdk 路径 添加插件 configure plugins 配置jvm内存 configure
  • Bootstrap的CSS类积累学习

    要看哪个的介绍 搜索关键词就行了 001 container 这是Bootstrap中定义的一个CSS类 它用于创建一个具有固定宽度的容器 比如 container类将 div 元素包装成一个固定宽度的容器 详情见 https blog c
  • STL vector的N种构造方式

    1 使用默认无参的构造函数进行构造 vector
  • 设计一算法,将已建立的单链表进行逆置

    单链表逆序有很多种方法 可是好多种方法都是逆序后就不能再使用之前定义的函数了 因为你的头结点变动了 不再是之前所定义的first或是head了 所以之前的方法都要重写 后来我终于想到了种很好的方法了 为了不重开空间 我们可以就在原来的那个单
  • leetcode:37. 解数独

    题目链接 37 解数独 文章目录 题目描述 思路 代码 题目描述 编写一个程序 通过填充空格来解决数独问题 数独的解法需 遵循如下规则 数字 1 9 在每一行只能出现一次 数字 1 9 在每一列只能出现一次 数字 1 9 在每一个以粗实线分
  • git lfs搭建 —— ubuntu20.04

    一直使用git lab 临时需要放一些pdf文档但有不需要git来版本管理 个人感觉比较占用资源 百度了一通 决定用git lfs 同时发现git lab有内置lfs使用说明 结合网上查得 总结如下 也是个人操作留档 本人使用vscode
  • 学生的姓名 ,年龄,性别,班级及爱好IDEA代码

    学生的姓名 年龄 性别 班级及爱好AIDE代码 package zy 学生类 class Person 属性 姓名 年龄 性别 班级 爱好 String name 姓名 int age 年龄 String sex 性别 int classN
  • 【数据结构】LoopQueue 循环队列

    数据结构源码 接口 public interface Queue
  • yarn安装依赖包报错 error An unexpected error occurred: “https://registry.npm.taobao.orgnpm/element-ui: get

    yarn安装依赖包报错 error An unexpected error occurred https registry npm taobao orgnpm element ui getaddrinfo ENOTFOUND registr
  • NAT(网络地址转换协议)

    目录 NAT 网络地址转换协议 作用 NAT转换内部地址范围 主要应用方向 NAT的优点 实验 1 静态NAT 一个内网地址对一个公网地址 2 动态NAT PAT 多个内网地址对多个公网地址 3 Easy ip 多个内网地址对一个接口 4
  • shell脚本实战:linux系统初始化和mysql8.0编译安装

    linux系统初始化脚本 bin bash version v1 author xingdian cat lt lt eof a 关闭防火墙 b 关闭selinux c 网络连通性检测 d 配置yum仓库 q 退出 eof read p 请
  • STM32 USB声卡录音(USB Microphone),基于CubeMX修改

    目录 说明 CubeMX配置 Pinout Clock Configuration Configuration 工程设置 代码工程修改 修改USB设备描述符 修改数据传输配置 声卡测试 说明 CubeMX生成的USB Audio Devic
  • Openwrt下安装Python3.5运行出现异常:Fatal Python error: Py_Initialize: Unable to get the locale encoding

    环境说明 Openwrt Python 3 5 依赖的库 libbz2 expat libopenssl libpthread zlib libffi libcrypto libncurses libpanel 使用说明 之前已经安装过py
  • OpenCV人脸识别

    OpenCV人脸识别与口罩检测 下载文件 人脸检测 人脸检测的检测方法主要有两类 基于知识 根据眼睛 眉毛 嘴巴 鼻子等器官特征及相互几何位置关系来检测 和基于统计 将人脸看作一个二维像素矩阵 通过大量人脸图像样本构造人脸模式空间 由相似度
  • kafka进阶

    kafka进阶 初识kafka 生产者 消费者 主题与分区 springboot kafka 集群 监控 面试题 初识kafka 消息队列 分布式发布 订阅消息系统 日志处理 基础架构 Producer 消息生产者 向Kafka中发布消息的
  • FSDirectory介绍

    其中常用的就是FSDirectory 表示对文件系统目录的操作 RAMDirectory 内存中的目录操作 首先我们看看类FSDirectory的源代码 import java io File import java io FileInpu
  • 2019完整的大数据知识体系,大数据学习路线图

    任何学习过程都需要一个科学合理的学习路线 才能够有条不紊的完成我们的学习目标 大数据所需学习的内容纷繁复杂 难度较大 有一个合理的大数据学习路线图帮忙理清思路就显得尤为必要 在这里还是要推荐下我自己建的大数据学习交流群 199427210
  • DL-深度学习基础

    目录 过拟合与欠拟合 降低过拟合风险的方法 降低欠拟合风险的方法 过拟合与欠拟合 欠拟合指模型不能在训练集上获得足够低的训练误差 过拟合指模型的训练误差与测试误差 泛化误差 之间差距过大 反应在评价指标上 就是模型在训练集上表现良好 但是在
  • Unity实战(11):项目非启动状态下使用代码批量替换材质

    目录 前言 配置环境 一 场景准备 二 代码演示 三 效果呈现 四 关于Resources Load 的说明 前言 本文内容为unity在编辑状态 非启动状态 下使用代码批量替换材质 该方法也适用于其他在编辑状态下对物体的操作需求 配置环境