ECS的核心概念,关于ecs使用规范正确的是ECS的核心概念ECS架构的核心是数据,这也是Unity将这项技术命名为stack DOTS的原因。系统读取实体上方组件的数据流并处理数据。在这里,实体实际上更像一个索引,它不包含任何数据或逻辑。EC由三部分组成:实体、组件和行为。见下图:在此图中,系统读取多个实体的平移和旋......
ECS架构的核心是数据,这也是Unity将这项技术命名为stack DOTS的原因。系统读取实体上方组件的数据流并处理数据。在这里,实体实际上更像一个索引,它不包含任何数据或逻辑。
EC由三部分组成:实体、组件和行为。见下图:
在此图中,系统读取多个实体的平移和旋转组件,然后在计算和处理后将结果更新到LocalToWorld组件。
如图所示,实体A和B仍然有渲染器组件,但C没有。但是,这不会影响系统的计算逻辑,因为这个系统不关心渲染器组件。
也可以写一个需要处理渲染器组件的系统,让系统忽略实体c,也可以写一个排除包含渲染器组件的实体的系统,让系统忽略实体A和实体b。
以下是ECS中一些重要的核心概念:
原型原型
多个组件的组合称为原型。
例如,3D对象可以包含用于变换的组件,包括移动、旋转和渲染。每个3D对象对应一个实体,但它们都有相同的组件,因此ECS会将它们归类为一种原型。
上图中,实体A和实体B的原型都是M,实体C的原型是n。
您还可以通过在运行时添加或删除组件来更改实体的原型。例如,如果实体B的渲染器组件被移除,则实体B的原型将变成n。
内存块
为什么先说原型的概念?因为实体的原型是什么决定了ECS将实体的组件即数据存储在哪里。Ec以块为单位分配内存,每个块由一个原型块对象表示。
一个块只包含一个原型,原型可以包含多个实体的数据。如果一个块的内存已满,ECS将分配一个新的块来存储新实体的组件。
如果修改了实体的组件,就相当于修改了实体的原型。此时,ECS会将实体的组件数据移动到另一个块。
原型和内存块的关系是一对多的关系。这意味着,如果您想要查询一组给定组件类型的所有实体,您只需要在这些原型中进行搜索。这将比在所有实体中搜索高效得多。
ECS在存储实体到内存块中没有特殊的顺序。当一个实体被创建或者一个实体的原型发生变化时,ECS会把它放到对应原型中第一个有空间的内存块中。块中的数据将紧密排列。如果要将一个实体移出当前原型的内存块,此时会有一个空位,ECS会将这个内存块的最后一个实体数据移到这个空位上。
注意:原型中共享组件的数据(后面会详细描述)也会影响实体将存储在哪个内存块中。同一内存块中所有实体的共享组件中的数据值是相同的。如果修改共享组件中的数据,实体将被移动到另一个块中,这有点类似于修改实体的原型。
将共享组件的实体划分到一个内存块中将提高处理它们的速度。例如,Hybird Renderer定义了RenderMesh组件来实现这一目标。
实体查询
系统在什么基础上决定处理哪些实体?这将使用称为实体查询的东西。实体查询首先需要一些组件类型,然后根据你传入的组件类型组合,在包含这些组件的原型中查询符合要求的实体。查询时可以指定以下三种类型:
All必须包含所有组件类型。
任何必须在任何中包含至少一个组件类型。
None中不能包含任何组件类型。
实体查询的结果将返回满足查询要求的所有内存块。您可以使用IJobChunk遍历所有组件。(IJobChunk后面会讲到。)
作业作业
如前所述,ECS只有在与Job一起使用时才能发挥多线程的威力。ECS提供了包含实体的SystemBase类。ForEach方法,还包含IJobChunk的Schedule()和ScheduleParallel()方法,可以处理子线程中的数据。实体。ForEach是最简单的方法,只需几行代码就可以实现。IJobChunk可以用来处理更复杂的情况。
ECS将根据系统的顺序在主线程中调度作业。当调度作业时,ECS将跟踪哪些作业正在读取和写入哪些组件。需要读权限的作业需要等到上一个具有写权限的作业完成执行,反之亦然。作业调度器将使用作业相关性来决定哪些作业可以并行,哪些作业必须串行。
系统的组织
欧共体通过世界和集团组织系统。默认情况下,ECS将使用一些预定义的组创建一个默认世界。它将找到项目中的所有系统,实例化它们,并将它们添加到预定义的组中。
您可以在同一组中指定系统更新的执行顺序。组也是一个系统,所以您可以将一个组添加到另一个组中。如果不指定顺序,系统的执行顺序将是不确定的,它不会遵循它们被创建的顺序。但是,同一组中的所有系统将在下一组中的系统之前执行。
系统的更新是在主线程中执行的,但是您可以使用Job将工作分配给子线程。
ECS世界的视觉创作(创作)
在Unity中,没有办法直接在视觉上创建DOTS世界。不过可以先用GameOjbect和MonoBehaviour创建,然后通过转换系统把GameObject转换成实体和组件。我们以后再谈这个。
来源:Unity官方平台
原文:https://mp.weixin.qq.com/s/Tvtqz51Np7vWeYwKcQtHdQ
特别声明:以上文章内容仅代表作者本人观点,不代表ESG跨境电商观点或立场。如有关于作品内容、版权或其它问题请于作品发表后的30日内与ESG跨境电商联系。
二维码加载中...
使用微信扫一扫登录
使用账号密码登录
平台顾问
微信扫一扫
马上联系在线顾问
小程序
ESG跨境小程序
手机入驻更便捷
返回顶部