Unity ECS 之 Entitas 的简单介绍,插件下载、导入,和简单使用(一篇文入门搞懂ECS是什么)

ECS框架学习(Entitas)入门 公司要求使用ECS框架经行开发,没办法只能自己学习了。记录一下学习过程。 框架的含义可以去其他地方查看,我这里写一点我的理解(新人,不对请谅解)。ECS即Entity-Component-System(实体-组件-系统) 的缩写。它做到了行为、数据分开,Component存数据。Entity用来就是由各个Component组成。System用来经行他们中间的通信。对于网上或者官方说速度更快、更容... 阅读详情

Unity ECS 之 Entitas 的简单介绍,插件下载、导入,和简单使用(一篇文入门搞懂ECS是什么)

 

目录

Unity ECS 之 Entitas 的简单介绍,插件下载、导入,和简单使用(一篇文入门搞懂ECS是什么)

一、简单介绍

二、一些专有项简介

Entity

Context

Group

Collector

Matcher

System

Feature

三、注意实现

四、ECS 的下载

Github 上下载

Unity Asset Store 中下载

Unity 的 Package Manager 中下载

五、ECS 框架导入

六、ECS 的配置

七、ECS 的简单使用( Hello ECS Entitas)

八、关键代码

九、参考博文:


 

一、简单介绍

Entitas是一个运行效率高的轻量级C# Entity-Component-System(ECS)框架,专门为unity订制。提供内部缓存和快速的组件访问。它经过精心设计,可以在垃圾收集环境中发挥最佳作用。

面向对象思想强调对象,通过对象自身属性等完成具体实现。ECS则强调过程,通过并无实际意义的实体来收集作为数据的容器来完成具体实现。

  • E:Entity无实际意义,仅作为收集组合C的容器。

  • C:Component包含数据的组件,无方法实现。

  • S:处理数据的系统,自身无任何数据,通过方法来实现。

 

目前的优点:

  • 遵循这个框架的规则去写代码,代码结构清晰。

  • ECS这种模式,耦合度就很低,所有的游戏物体都是组件的组合而已,可扩展性强,通过合理组合component就能配置出一个新的游戏物体。

  • 很方便的管理所有实体状态,entitas提供了类似状态机的功能,当感兴趣的某个属性发生变化时,能在System中很方便的做出响应,不管什么状态,都能很方便的做出对应处理。

  • unity本身的开发模式就类似ECS,unity2018更是推出了最新的ECS框架,entitas很符合这种开发模式

  • entitas自开源以来,一直在更新维护,并受到了unity官方的认可,在unite大会上都有提到。所以,这个框架还是很靠谱的。

目前的缺点:

  • 国内资料少,上手难度高。国内用这个框架开发的特别少,遇到问题需要自己爬坑。

  • 不适合小项目。小项目用entitas反而麻烦

  • entitas更新太快,官方wiki文档更新没有跟上,比如,我在看官方Demo-MatchOne的时候,有个Event的Attribute, wiki上暂时还没有这个的

  • 代码热更方面是个问题, entitas基本对unity开发定了一套完整的规则,特别是有Code Generate,如果项目发布后想要更新加入新的代码会很麻烦,官方对此也没有说明,目前好像也没有人分享在entitas中加入lua热更的功能

 

二、一些专有项简介

Entity

entity是一个存储数据的容器,用以表现程序中存在的对象。你可以添加,替换和移除数据通过IComponent。Entitas也有相应的事件event来通知你这些变化。
Entitas通过代码生成器可以自然的产生很多易读的代码如下文中的方法便是代码生成器自动产生的API调用。

Entitas中的Atrributes

Code Generator(代码生成器)目前支持与类、接口和结构一起使用的以下特性:

  • Context: 可以使用此特性使组件仅在指定的context中可用;例如 [MyContextName], [Enemies], [UI]....提高内存效率。它还可以创建组件。

  • Unique: 代码生成器将提供额外的方法,以确保最多存在一个具有该组件的实体,相当于单例。

  • FlagPrefix:仅可用于支持标记组件的自定义前缀。

  • PrimaryEntityIndex: 可用于将实体限制为唯一的组件值。

  • EntityIndex: 可用于搜索具有组件值的实体。

  • CustomComponentName: 为一个类或接口生成具有不同名称的多个组件。

  • DontGenerate]: 代码生成器不会使用此属性处理组件。

  • Cleanup: 代码生成器将生成删除组件或销毁实体的系统。

 

Context

Context是一个让你可以创建和销毁实体entities的工厂。通过它可以过滤感兴趣的实体。

 

Group

通过组Group,可以对上下文中的实体进行超快速过滤。 当实体更改时,它们会不断更新,并且可以立即返回实体组。 想象一下,您有成千上万个实体,而您只需要那些具有PositionComponent的实体-只需询问该组Group的上下文,它的结果就已经被筛选完成。

Group和获取的entities都被缓存下来,所以该方法运行速度非常高。尽可能的优先使用Group。gameContext.GetEntities(GameMatcher.Moveble)同样可以内部地使用groups。
Groups有OnEntityAdded,OnEntityRemoved,OnEntityUpdated来对group变化作出响应。

 

Collector

Collector提供了便捷的方法来对group的变化作出反应。比如你想汇总和处理所有添加或替换PositionComponent的实体entities。

 

Matcher

Matcher匹配器由代码生成器生成,可以组合。匹配器通常用于从感兴趣的上下文中获取实体组。需要在匹配器前加上你感兴趣的上下文名称(例如GameMatcher, InputMatcher等)。

 

System

entitas中有四种Systems:

Unity ECS入门:用Entitas插件重构游戏逻辑的实战指南 游戏项目中,随着单位数量与逻辑复杂度不断上升,传统的面向对象组件模式常常导致高耦合、难调试、性能下降等痛点。ECS(Entity Component System)作为一种数据与逻辑分离的架构模式,通过实体、组件、系统三个核心要素,将游戏行为拆解为可复用的数据与规则,从而在大量同构实体场景下实现更清晰的代码组织和更高的运行效率。理解ECS的筛选与批量处理原理,有助于开发者从“对象思维”转向“数据思维”,让系统只关注自己需要的组件组合,这也正是现代游戏性能优化与架构演进的重要方向。无论是策略塔防、模拟经营,还 阅读详情

相关推荐

Unity ECS入门:用Entitas理清数据与逻辑,摆脱MonoBehaviour混乱

从面向对象到数据驱动,实体组件系统(ECS)正在改变复杂游戏逻辑的组织方式。其核心思想是将对象拆分为纯数据组件与处理逻辑的系统,通过实体索引实现高内聚低耦合。Entitas作为Unity生态中应用广泛的纯C#实现,相比官方DOTS学习曲线平缓,支持自动生成代码,适合中小型项目及数字孪生、状态同步等场景。理解Entity、Component、System的职责边界后,开发者可以逐步替换臃肿的Manager脚本,用ReactiveSystem驱动表现层更新。本文从ECS基础概念入手,逐步演示Entitas插件下

weixin_33164198的博客 223

【推荐100个unity插件之36】Unity6使用DOTS基础篇——Entities(非常适合做一些弹幕射击游戏)

Unity DOTS(Data-Oriented Technology Stack)是 Unity 推出的数据驱动型技术栈,旨在帮助开发者构建高性能的游戏和应用,特别是在需要处理大量实体(Entities)时。DOTS 通过提供不同的工具和框架(如 ECS、Jobs 和 Burst),能够极大提升性能,尤其是在大规模的并行计算和高帧率下的优化。在传统的面向对象(OOP)编程方式中,游戏开发者通常依赖继承和类之间的关系来管理数据和行为,这会导致性能瓶颈,尤其是在面对大规模实体时。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 4018

整合Entitas源碼的Ecs unity 簡單demo

Entitas1.5.1正式版 Unity项目 源代码集成 簡單demo,ECS简单使用学习,适合入门的

Entitas简单移动项目

该资源对应Unity3D ECS框架 Entitas入门学习3文章的内容。 主要承接上一节的内容来实现点击右键创建角色、点击左键移动角色的功能。 这边会在IComponent中保存Unity场景中GameObject的引用,以便在各个System中使用,并使用Link方法可以在场景中的看到调试信息。 如果你第一次学习该内容,请根据第二节内容input相关的内容完成EmitSystem。

8位可控加减法电路设计

一、设计要求   利用Logisim平台中现有运算部件构建一个8位可控加减法器,可支持八位加减法,利用已经封装全加器和逻辑门进行连接,要求实现相应的输出,判断是否溢出。 二、方案设计 实验原理: [A]补+[B]补 = [A+B]补(mod2^n+1)   公式1        [A-B]补 = [A]补+[-B]补(mod2^n+1)    公式2 FA为全加器,利用全加器实现加减法,难点在于实验减法,对输入的[Y]补各位取反加一即为[-Y]补,利用公式2,就可以将减法转化为加法再利用全加

qq_51700383的博客 1万+

线性代数学习笔记(十)——矩阵运算(二)

本篇笔记讲解矩阵的幂运算和矩阵的转置,其中矩阵进行幂运算的前提是矩阵为方阵,矩阵幂运算的两条性质与数的幂运算规则类似;矩阵转置的定义与行列式转置类似,但要注意由于矩阵的行数和列数不同,所以转置之后行数和列数变换。

li2008kui的专栏 1万+

2019年数学建模美赛经验总结

北京时间2019年1月29号上午9时,数模美赛结束。美赛结束已经10多天了,我在这次竞赛中负责建模和编程,趁现在记忆还比较清晰,写下这篇博客记录第一次参加数学建模美赛的经历。 补更:2019年4月20日公布成绩,笔者最终获得了美赛一等奖 目录 1、基本情况 2、选题 3、分工合作 4、论文写作 5、建模 6、编程 7、入门资源 ...

Smallactive 7万+

自动驾驶仿真 (四)—— 基于PreScan与Simulink的AEB系统多场景验证

本文详细介绍了基于PreScan与Simulink的AEB系统多场景验证方法,涵盖标准场景搭建、复杂工况扩展及控制策略优化。通过仿真技术,显著降低测试成本并提升场景覆盖率,有效解决实车测试中的痛点问题。特别适用于自动驾驶领域的AEB系统开发与验证。

weixin_28273593的博客 244

5分钟搞定三网话费余额查询:手把手教你用PHP+HTML搭建查询系统(含API调用避坑指南)

本文详细介绍了如何使用PHP+HTML快速搭建三网话费余额查询系统,涵盖API调用避坑指南、前端UI设计及性能优化。通过统一处理移动、电信、联通三大运营商接口差异,实现高可用查询功能,并提供安全防护与生产部署建议,帮助开发者高效构建稳定可靠的话费查询工具。

weixin_29016833的博客 251

PCL 将对象模板与点云对齐【2025最新版】

PCL模版匹配算法的使用案例,博客长期更新,本文最近更新时间为:2025年1月18日。

点云侠的博客 5369

【Dify(v1.x) 核心源码深入解析】File 模块

文件模型(File Model)定义了文件的核心属性,如文件类型、传输方法、相关标识符等,是整个文件处理流程的数据基础。文件解析器(UploadFileParser)负责解析上传的文件,根据配置决定以何种方式(URL 或 Base64)提供图像数据。工具文件解析器(ToolFileParser)专注于工具文件的管理,提供工具文件管理器的获取接口。签名验证与生成(helpers.py)包含文件 URL 签名的生成与验证逻辑,确保文件访问的安全性。文件管理器(file_manager.py)

659

【Pytorch实战教程】基于RML2018的融合网络分类 | LSTM网络和ResNet网络融合 | 含数据集的处理

这段代码是从原始数据中读取所选择的数据,画出星座图,并将星座图保存本地,然后将IQ数据保存成mat文件,将图片数据读取之后保存为npy文件,方便后续融合网络使用。

若北辰 921

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

上一篇: Unity 基础 之 Layer(层layer) 、LayerMask (遮罩层) 的 总结 和 使用(CullingMask、Ray 射线的使用等)
下一篇: Unity 常见问题 之 打包编译的报错 Unable to sign the application; please provide passwords!
仙魁XAN
博客等级 码龄13年 3万+粉丝 750原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

仙魁XAN

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值