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

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

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

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专业服务案例
查看
1
1个月孵化,GMV增长4400%
【能解决问题的才叫资源 能赚钱的才叫专业】 >> Gmarket卖家店铺经过ESG跨境客户经理优化,月GMV达到20万美金!
2
对接平台官方关键人,3天解封店铺
【精准资源对接 极速解决问题】 >> ESG跨境帮我解决了韩国平台店铺异常问题——运营韩国平台的卖家
3
ESG速度!5小时,PayPal解封
【用资源解决难题 以效率展现专业】 >> ESG拥有Paypal支付和Onbuy平台双绿通道为卖家保驾护航!
4
据理力争,客户产品喜获0竞争绿洲
【只要资源好 跨境弯路少】>> ESG跨境通过专业市场调研分析产品数据,向平台争取机会,卖家成功上架市场热卖而平台稀缺产品,拓展了西班牙新商机!
ESG跨境福利分享群
加入
ESG跨境福利分享群
扫码进群
跨境福利分享群
加入
跨境福利分享群
扫码进群
亚马逊&跨境增长交流群
加入
亚马逊&跨境增长交流群
扫码进群
韩国平台交流群
加入
韩国平台交流群
扫码进群
美国卖家交流群
加入
美国卖家交流群
扫码进群
拉美电商交流群
加入
拉美电商交流群
扫码进群
欧洲多平台交流群
加入
欧洲多平台交流群
扫码进群
CD平台自注册指南
韩国平台站内推广指南-Gmarket Global
韩国大促热销品预测
开店大全-日韩篇
开店大全-欧洲篇
开店大全-蓝海篇
开店大全-北美篇
开店大全-南亚篇
开店大全-土耳其篇
跨境电商运营大全
通过ESG入驻平台,您将解锁
绿色通道,更高的入驻成功率
专业1v1客户经理服务
运营实操指导
运营提效资源福利
平台官方专属优惠
betvictor代理

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

订阅
联系顾问

平台顾问

平台顾问 平台顾问

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

icon icon

小程序

微信小程序

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

icon icon

返回顶部

进行中
全球平台详解——蓝海篇
报名中
Baidu
map