【UnityDOTS 小知识】如何通过DOTS修改材质属性以及替换材质与网格

如何通过DOTS修改材质属性以及替换材质与网格

一、DOTS修改材质属性

1.利用 Material Overide Asset

Material Overide Asset是一个Unity资产,可以通过Create创建。
创建后指定要修改的材质,以及对应材质的属性,即可完成这个资源创建。
然后在要修改的预制上添加脚本(Unity内置的)Material Overide,然后指定刚刚创建的Material Overide Asset即可标记这个Prefab对应材质的哪个属性想要被修改。
这时会自动添加要修改的对应属性的DOTS中的Component。比如下图,要修改材质的颜色与金属度属性。
在这里插入图片描述
则会给这个Prefab 自动添加上对应的Component。

这个时候,在DOTS系统中,就能通过DOTS中获取组件,修改组件属性的方法来修改对应值达到效果。

这个方法比较笨重,且不够灵活。

2.利用代码创建对应的材质属性的组件

用常规方式创建一个IComponentData组件,重点是给这个组件打上对应的材质属性标签,即可映射为要修改的材质属性组件(类似上图的两个组件)

[MaterialProperty("_Color")]
public struct MyOwnColor : IComponentData
{public float4 Value;
}

剩下的和普通组件一样,去获取这个组件值,然后就行修改即可修改材质里面的属性。除了Unity提供的内置材质属性外,还可以修改Shader Graph自定义属性。具体操作见官方文档:

在这里插入图片描述

二、# 一、DOTS修改替换材质与网格

1.引用材质与网格

因为材质与网格都是托管对象,所以要建立一个托管Component去引用你想要替换上去的材质与网格。
同时,也要建立托管的System(继承SystemBase)来操作这个Component。

2.注册材质与网格到

利用World.GetOrCreateSystemManaged()获取到对应EntitiesGraphicsSystem系统,然后利用RegisterMaterial与RegisterMesh接口分别注册你要替换的材质与网格到Graphics系统中去。同时这两个接口会返回对应BatchMaterialID与BatchMeshID,保存好这个ID。

3.注册材质与网格到

获取到对应Entity的MaterialMeshInfo组件,设置对应的字段值为上面你要替换的值即可完成替换。
在这里插入图片描述
运行时,可以看到对应MaterialMeshInfo组件值被成功修改。

在这里插入图片描述

总结

修改材质属性,以及替换材质与网格,都需要对相应Graphic组件进行修改。材质属性需要映射到组件,而替换材质与网格,需要进行注册后,再进行替换(也是一种映射)。
要注意的是,由于材质与网格都是托管对象,所以只能用托管ECS的方法进行逻辑处理。但是还是可以利用JOB进行效率提升(虽然不能用Burst了),例如使用Entities.ForEach。
与ISystem的差异见下图
在这里插入图片描述

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

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

相关文章

Kubernetes 入门篇上

❖ Kubernetes核心概念 ❖ 快速部署一个Kubernetes集群 ❖ Kubernetes将弃用Docker! ❖ kubectl管理工具 ❖ Kubernetes基本资源概念 ❖ 资源编排(YAML) ❖ 深入理解Pod对象:基本管理 ❖ 深入理解Pod对象:调度 …

如何操作MySQL数据库基本数据

目录 一、MySQL数据库概念 数据 表(数据表) 数据库 数据库管理系统 数据库的建立和维护功能 数据定义功能 数据操纵功能 数据库的运行管理功能 通信功能 数据流向 二、主流数据库分类 1.SQL Server 数据库 (微软分公司产品&…

QT分屏按钮

效果&#xff1a;按钮弹出分屏选择 // gridpopwidget.h #ifndef GRIDPOPWIDGET_H #define GRIDPOPWIDGET_H#include <QWidget> #include <QMouseEvent>class GridPopWidget : public QWidget {Q_OBJECT public:explicit GridPopWidget(QWidget *parent nullptr);~…

杨氏模量——从宏观(应力-应变曲线)到微观(原子键)尺度解释杨氏模量

杨氏模量&#xff08;Young’s Modulus&#xff09;是三个主要弹性常数之一&#xff0c;与剪切模量&#xff08;shear modulus&#xff09;、体积模量&#xff08;bulk modulus&#xff09;一起用于描述材料在载荷下如何变形 以下展示了拉伸试验的应力应变曲线 如果施加的应力…

基于servlet的简单登录界面

前端登录发起请求 1.安装axios axios 是一个 HTTP 的网络请求库 安装 npm install axios &#xff08;脚手架中&#xff09; 在 main.js 中配置 axios //导入网络请求库 import axios from axios; //设置访问后台服务器地址&#xff1a;ip&#xff0c;端口和项目名字&#xff0…

hbuilderX自定义主题仿vscode暗黑主题

目录 hbuilderX自定义主题仿vscode暗黑主题 效果图 设置方式&#xff08;把主题代码复制进来即可&#xff09; 是基于雅蓝主题自定义的 设置好后需要切换到雅蓝主题 hbuilderx保存时自动整理代码 1.首先在顶部栏&#xff0c;找到工具&#xff0c;打开设置 2.点击旁边的编…

盖子的c++小课堂——第十八讲:栈

目录 前言 栈的定义 栈&#xff0c;是什么&#xff1f; 例1-弹夹 问题 例2-停车场 问题 栈的概念 空栈 进栈、出栈 特点 例题 车厢调度 如何操作 数组模拟栈 入栈 出栈 栈的基本操作 判断空栈 求栈的元素数量 读栈顶元素 总结 前言 OK呀&#xff0c;说到做…

【unity细节】为什么有时候修改了脚本中的数据但是面板中的数据还是不改变

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 秩沅 原创 收录于专栏&#xff1a;unity细节和bug ⭐为什么有时候修改了脚本中的数据但是面板中的数据还是不改变⭐ 文章目录 ⭐为什…

微服务之Eureka服务注册中⼼

关于务注册中⼼服 服务注册中⼼本质上是为了解耦服务提供者和服务消费者,尽可能量使两者联系可控在一定的范围外 1.在父项目下下引入 Spring Cloud 依赖 <dependencyManagement> <dependencies> <!-- SCN --> <dependency> <groupId> org.sp…

分销商城系统有哪些模式,有什么功能和特点?

随着微信的广泛使用&#xff0c;微信在营销方面的发展呈现出多元化趋势&#xff0c;衍生出很多基于社交环境的营销模式。分销商城系统就是其中之一&#xff0c;很多企业都通过分销商城系统发展自己的分销商&#xff0c;充分挖掘微信社交体系的私域资源。下面我们一起来了解一下…

【单周期CPU】LoongArch | LA32R | 二选一控制器MUX | 数据通路

前言&#xff1a;本章内容主要是演示在vivado下利用Verilog语言进行单周期简易CPU的设计。一步一步自己实现模型机的设计。本章先介绍单周期简易CPU中数据通路的设计。 &#x1f4bb;环境&#xff1a;一台内存4GB以上&#xff0c;装有64位Windows操作系统和Vivado 2017.4以上版…

嵌入式Linux领域中的C++:应用层主力与挑战

嵌入式Linux领域中&#xff0c;C是应用层的主要编程语言之一。尽管QT/C在某些领域被Android/Java逐渐替代&#xff0c;但在医疗、工控、车载导航等领域仍占主导地位。对于嵌入式人员学习C的观点存在一定片面性。C的难点在于移动语义、模板偏特化、lambda表达式、模板元编程等知…