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

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

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

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跨境专属福利分享群
扫码进群
拉美电商交流群
加入
拉美电商交流群
扫码进群
亚马逊跨境增长交流群
加入
亚马逊跨境增长交流群
扫码进群
亚马逊跨境增长交流群
加入
亚马逊跨境增长交流群
扫码进群
拉美电商交流群
加入
拉美电商交流群
扫码进群
《TikTok综合运营手册》
《TikTok短视频运营手册》
《TikTok直播运营手册》
《TikTok全球趋势报告》
《韩国节日营销指南》
《开店大全-全球合集》
《开店大全-主流平台篇》
《开店大全-东南亚篇》
《CD平台自注册指南》
《开店大全-俄罗斯篇》
通过ESG入驻平台,您将解锁
绿色通道,更高的入驻成功率
专业1v1客户经理服务
运营实操指导
运营提效资源福利
平台官方专属优惠

立即登记,定期获得更多资讯

订阅
联系顾问

平台顾问

平台顾问 平台顾问

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

icon icon

小程序

微信小程序

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

icon icon

返回顶部