笨木头与游戏开发
只有你足够强,别人才会和你讲道理。
文章:
280
浏览:
2,956,241
博主:
笨木头
关注:
Unity、Net Core、Blazor
邮箱:
musicvs@163.com
首页
|
留言
分类目录
其它
Cocos2d-x
创业路
Android
LGame
C++
Unity3D
近期评论
Cultist
在
留言...
回复给
迷途的老菜鸟
多谢,这个好啃多了...
迷途的老菜鸟
在
留言...
回复给
笨木头
谢谢大佬的分享,可以学到很多...
笨木头
在
留言...
回复给
迷途的老菜鸟
哈哈,没有更好玩的,就是做其他领域的开发去了。...
迷途的老菜鸟
在
留言...
所以笨木头大佬现在研究啥了? 不做游戏开发,还有更好玩的?...
笨木头
在
[笨木头“创2”路]No.10...
回复给
kkk
唉,我这不知道咋的,年龄越大,感悟越少,都不知道写点什么好...
kkk
在
[笨木头“创2”路]No.10...
一年了,年更博主该更新了...
[Unity ECS 入门]5.块(Chunk)和原型(Archetype)
笨木头 2019-12-05 14:25
ECS入门
阅读
(7289)
评论
(1)
转载请注明,原文地址:
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包,是预览版,不代表正式版的时候也适用。
转发本系列文章的朋友请注意,带上原文链接和原文日期,避免误导未来使用正式版的开发者。
2
上一篇
[Unity ECS 入门]4.筛选实体数据的方式3——IJobForEach(已废弃)
下一篇
[Unity ECS 入门]6.筛选实体数据的方式4——IJobChunk
1 条评论
唐宇
2021-06-30 16:14:10
简单的介绍和解释 但是确实很容易让人理解和知道这个概率
0
回复
发表评论
发表评论
粤ICP备16043700号
本博客基于
Blazor
和
Ant Design Blazor
开发