当前位置: 首页 > news >正文

Unity DOTS Component概述

最近DOTS终于发布了正式的版本, 我们来分享以下DOTS里面地几个关键概念,方便大家上手学习掌握Unity DOTS开发。

Unity DOTS 中Entity作为实体不直接去存放数据,而是将数据以一个个的组件为载体来存放起来。每个Entity会得到一些不同的ComponentData的组合,这些组合代表着不同的Entity类型,描述这些组合的对象叫做ArchType。Component包含了Entity中的数据,同时给System来进行读写访问。

当我们定义一个Component,我们需要继承IcomponentData接口类。IcomponentData什么方法都没有定义,只是标记这个结构类型是一个ECS中ComponentData的组件类。当我们使用struct 来定义ComponentData的时候,意味着我们使用的是一个非托管(垃圾回收)的对象,里面的数据成员也是需要用非托管的,如果你要用托管的数据成员与对象,你可以把struct 改成class来定义。

Component的内存基于Chunk(16kib)来分配特定ArchType的大小(不同组件组合后的内存大小)的内存,Component属于这个内存块中的某一个部分。比如A类Entity是由A,B,C组件组成,那么ArchType就是[A, B, C] ArchType就是每个组件的总和。通过Chunk,分配一个ArchType的内存出来,这样Entity某个ComponentData就是这个内存块中的一个部分。

Chunk(16Kib): 【[A, B, C, …],[A, B, C, …],[A, B, C, …],[A, B, C, …],[A, B, C, …]】

我们在做DOTS开发中常用的有几种常用的Component类型,总结如下:

Unmanaged Component: 使用最多的非托管的组件类型,但是里面的数据成员必须是非托管的,所以类型有限。

Managed Component: 可以托管的组件类型, 里面的数据成员也可以是任意的类型;

Shared Component: 多个Entity实例公用一个ComponentData的内存。

Cleanup Component: 如果我们的某个Entity有一个CleanupComponent的时候,当我们销毁一个Entity的时候,会清理掉其它所有的组件。

Tag Component: 非托管的组件对象,起到标记的作用,可以使用tag component来筛选Entity。

Buffer Component: 定义了一个可以改变数组大小的数组数据。

Enable Component: 可以enable/disable某个组件,而不是像Remove组件一样改变entity的ArchType, 因为改变ArchType非常消耗性能。

更多的Unity DOTS 的文档,可以关注我们,获取相关的学习资料与代码。

http://www.lryc.cn/news/196665.html

相关文章:

  • element ui 下拉框 选择月份和天数
  • 用Java包com.sun.net.httpserver下面的类实现一个简单的http服务器demo
  • unity 浏览器插件【embedded browser(原zfbrowser)】简单教程,使unity支持web h5页面,附软件下载链接
  • LeetCode算法位运算—只出现一次的数字
  • vcpkg manifest 的使用
  • 选择什么电容笔比较好?平板手写笔推荐
  • pdf转二维码怎么做?pdf二维码制作简单技巧
  • 【CANoe】TX Self-ACK自应答配置与CPAL实现
  • (Python)MATLAB mat矩阵和Python npy矩阵转换
  • Flink1.14 SourceReader概念入门讲解与源码解析 (三)
  • PS运行中缺失d3dcompiler_47.dll问题的5个有效修复方法总结
  • 【MATLAB-Retinex图像增强算法的去雾技术】
  • 使用 2 个 HSplitView 在 swiftUI 中创建一个 3 窗格界面
  • 【C++ 操作符重载:定制自己的运算符行为】
  • Android Fragment 基本概念和基本使用
  • xml schema中的all元素
  • Java8实战-总结42
  • 实现日期间的运算——C++
  • 云上攻防-云原生篇K8s安全Config泄漏Etcd存储Dashboard鉴权Proxy暴露
  • ChatGPT 的工作原理学习 难以理解 需要先找个容易的课来跟下。
  • 5.DApp-前端网页怎么连接MetaMask
  • 手机应用app打开游戏显示连接服务器失败是什么原因?排查解决方案?
  • 【Java学习之道】指引篇:从入门到入世
  • pytorch_quantization安装
  • 开源项目汇总
  • android.mk介绍
  • 极光笔记 | 发送功能使用技巧分享
  • Oracle database 开启归档日志 archivelog
  • 【学一点儿前端】ajax、axios和fetch的概念、区别和易混淆点
  • 互联网Java工程师面试题·Java 总结篇·第五弹