Unity DOTS Component概述

编程入门 行业动态 更新时间:2024-10-11 05:31:18

<a href=https://www.elefans.com/category/jswz/34/1771418.html style=Unity DOTS Component概述"/>

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 的文档,可以关注我们,获取相关的学习资料与代码。

更多推荐

Unity DOTS Component概述

本文发布于:2023-12-06 06:52:57,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1666779.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:Unity   DOTS   Component

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!