[Unity ECS 入门]5.块(Chunk)和原型(Archetype)

笨木头  2019-12-5 14:25   ECS入门   阅读(2,099)   0条评论

转载请注明,原文地址:http://www.benmutou.com/archives/2805
文章来源:笨木头与游戏开发

1.块(Chunk

什么是块(Chunk),这是一个很重要的概念。

先来看看一张官方的图:


我们有三个实体:

EntityA:包含了Translation、Rotation、LocalToWorld、Render四个组件。

EntityB:包含了Translation、Rotation、LocalToWorld、Render四个组件。

EntityC:包含了Translation、Rotation、LocalToWorld三个组件。

 

这些组件是什么意思大家不用管,但是,很明显的,EntityA和EntityB拥有的组件是一模一样的。

在ECS中,底层会把这些拥有相同组件的实体放在一起,也就是我们所说的内存块(Chunk)。

这涉及到一种”反正我也听不懂”的原理,把相同类型的数据连续存放在一块内存里,会提高提取数据的效率。

 

这个”反正我也听不懂”原理是什么呢?大家感兴趣的可以移步官方文档:

https://docs.unity3d.com/Packages/com.unity.entities@0.3/manual/ecs_core.html

 

本系列是入门教程,不会有过多的原理解说。

 

OK,于是,EntityA和EntityB是放在一个块(Chunk)里的,而EntityC则放在另一个块(Chunk)里。

这种分块的概念,大家以后会一直接触,因为这是很重要的东西。

2.原型(Archetype

有了块(Chunk)的概念后,很自然地就会有分类的概念了。

来张更厉害的图:


我们刚刚说到,对于组件完全相同的那些实体,会放在一个块(Chunk)里。

但是,块的大小是有上限的,当某个块里的实体数量达到某个程度时,就不能再增加了。

 

这时候怎么办?简单了——再开一个块(Chunk)。

 

比如上面那张图,一共有三个块,其实这三个块里存放的都是拥有相同组件的实体,只不过数量太多,所以分开存放到不同的块里了。

而这是存放相同组件的实体的所有块,都属于同一个类型,也就是官方所说的原型(Archetype)。

 

某个原型(Archetype)下的所有块(Chunk),它们都存放了相同组件的实体。

 

实际上,原型(Archetype)更多的是一种概念,实际在写代码的过程中,我们可能没法直接对原型进行操作。

 

对于某种原型下的所有块,它们的大小是一样的。

相当于预先申请了内存空间,不管塞没塞满,都占用一样的内存空间,一个块塞满之后,就又申请一个新的空的块。

 

好了,本篇就介绍这么多。

 

注意,本系列教程基于DOTS相关预览版的Package包,是预览版,不代表正式版的时候也适用。

转发本系列文章的朋友请注意,带上原文链接和原文日期,避免误导未来使用正式版的开发者。

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注