ECS的核心概念,关于ecs使用规范正确的是-ESG跨境

ECS的核心概念,关于ecs使用规范正确的是

来源网络
来源网络
2022-04-28
点赞icon 0
查看icon 674

ECS的核心概念,关于ecs使用规范正确的是ECS的核心概念ECS架构的核心是数据,这也是Unity将这项技术命名为stack DOTS的原因。系统读取实体上方组件的数据流并处理数据。在这里,实体实际上更像一个索引,它不包含任何数据或逻辑。EC由三部分组成:实体、组件和行为。见下图:在此图中,系统读取多个实体的平移和旋......

ECS的核心概念,关于ecs使用规范正确的是




ECS的核心概念

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


文章推荐
Cloudflare是针对站点安全性和性能的终极解决方案,国内使用cloudflare有效果吗
Facebook新号养号细节一览!,facebook新号养号怎么用
F5 CIO直通车  从多云到跨云
Facebook商务管理平台BM创建和设置,facebook商务管理平台怎么设置


特别声明:以上文章内容仅代表作者本人观点,不代表ESG跨境电商观点或立场。如有关于作品内容、版权或其它问题请于作品发表后的30日内与ESG跨境电商联系。

搜索 放大镜
韩国平台交流群
加入
韩国平台交流群
扫码进群
欧洲多平台交流群
加入
欧洲多平台交流群
扫码进群
美国卖家交流群
加入
美国卖家交流群
扫码进群
ESG跨境专属福利分享群
加入
ESG跨境专属福利分享群
扫码进群
拉美电商交流群
加入
拉美电商交流群
扫码进群
亚马逊跨境增长交流群
加入
亚马逊跨境增长交流群
扫码进群
《开店大全-全球合集》
《开店大全-主流平台篇》
《开店大全-东南亚篇》
《CD平台自注册指南》
《开店大全-俄罗斯篇》
《韩国站内推广指南》
《韩国热销品预测》
《开店大全-日韩篇》
《开店大全-拉美篇》
《开店大全-欧洲篇》
通过ESG入驻平台,您将解锁
绿色通道,更高的入驻成功率
专业1v1客户经理服务
运营实操指导
运营提效资源福利
平台官方专属优惠
联系顾问

平台顾问

平台顾问 平台顾问

微信扫一扫
马上联系在线顾问

icon icon

小程序

微信小程序

ESG跨境小程序
手机入驻更便捷

icon icon

返回顶部

Baidu
map