ECS

游戏设计模式——ECS架构 1.ECS概述        ECS全称Entity-Component-System(实体-组件-系统),是基于组合优于继承(将不变的部分使用继承以方便复用, 将多变的部分用组合来方便拓展)的原则的一种模式,游戏中的每一个单元(怪物、相机等)都是一个实体,每个实体又是由一个或多个组件构成的,每个组件仅包含该组件需要关注的数据(例如技能组件保存技能伤害、范围),而系统则用来处理这些实体的集合,其... 阅读详情

初步了解

ECS

基于面向数据的架构模式

简介

Entity-Component-System(实体-组件-系统)
在这里插入图片描述

Entity-独立物体

只是一个概念上的定义,指的是存在你游戏世界中的一个独特物体,是一系列组件的集合(ID区分)。

Player(Position, Sprite, Velocity, Health)
Enemy(Position, Sprite, Velocity, Health, AI)
Tree(Position, Sprite)
注:括号前为实体名,括号内为该实体拥有的组件

Component-数据

一堆数据的集合,可以使用C语言中的结构体来进行实现。它没有方法,即不存在任何的行为,只用来存储数据。

思路:
每一个组件都继承(或实现)同一个基类(或接口),通过这样的方法,我们能够非常方便地在运行时动态添加、识别、移除组件。每一个组件的意义在于描述实体的某一个特性。
例如:
PositionComponent(位置组件),其拥有x、y两个数据,用来描述实体的位置信息
EnemyComponent空组件标识敌人
特殊组件:如 Singleton Component (单例组件),单例组件在一个上下文中有且只有一个。
PositionComponent(x, y)
VelocityComponent(X, y)
HealthComponent(value)
PlayerComponent()
EnemyComponent()
注:括号前为组件名,括号内为该组件拥有的数据

System-行为

对拥有一个或多个相同组件的实体集合进行操作的工具,它只有行为,没有状态,即不应该存放任何数据。

解释:
游戏中玩家要操作对应的角色进行移动,由上面两部分可知,角色是一个实体,其拥有位置和速度组件,那么怎么根据实体拥有的速度去刷新其位置呢,MoveSystem(移动系统)登场,它可以得到所有拥有位置和速度组件的实体集合,遍历这个集合,根据每一个实体拥有的速度值和物理引擎去计算该实体应该所处的位置,并刷新该实体位置组件的值,至此,完成了玩家操控的角色移动了。
注意,我强调了移动系统可以得到所有拥有位置和速度组件的实体集合,因为一个实体同时拥有位置和速度组件,我们便认为该实体拥有移动的能力,因此移动系统可以去刷新每一个符合要求的实体的位置。这样做的好处在于,当我们玩家操控的角色因为某种原因不能移动时,我们只需要将速度组件从该实体中移除,移动系统就得不到角色的引用了,同样的,如果我们希望游戏场景中的某一个物件动起来,只需要为其添加一个速度组件就万事大吉。

例子
由于代码逻辑分布于各个系统中,各个系统之间为了解耦又不能互相访问,那么如果有多个系统希望运行同样的逻辑,该如何解决,总不能把代码复制 N 份,放到各个系统之中。UtilityFunction(实用函数) 便是用来解决这一问题的,它将被多个系统调用的方法单独提取出来,放到统一的地方,各个系统通过 UtilityFunction 调用想执行的方法,同系统一样, UtilityFunction 中不能存放状态,它应该是拥有各个方法的纯净集合。
样例:
MoveSystem(Position, Velocity)
RenderSystem(Position, Sprite)
注:括号前为系统名,括号内为该系统关心的组件集合

问题

目前问题

以前我们基于Unity的GameObject/MonoBehaviour机制,可以非常简单为创作游戏编写代码,但最终往往让代码陷入难以阅读,维护和优化的境地。这是一系列因素联合导致的:
面向对象模型
由Mono编译的非最优机器码
GC机制
单线程开发
…

解决问题

采用ECS不但在设计上可以更好的进行游戏编程,还可以利用Unity提供的JobSystem和Brush编译器充分发挥多核处理器的性能。
Unity2017以后已经发布了JobSystem,基于JobSystem可以在C#代码中更好的实现多线程批处理技术,JoySystem底层为多线程间的竞争提供的安全保障。
对于开发者而言,更重要的是要使用一种新的思维方式和编码方式来充分利用JobSystem。
…

存在问题

繁多的组件以及轮询问题,数据共享问题
…

案例

整理来源有Demo
链接Jobs and ECS and Burst

[架构设计] Entity-Component-System (ECS)架构 Entity-Component-System (ECS)架构:这是一种基于数据的架构,将游戏对象(Entity)表示为一组组件(Component)的集合,将游戏逻辑实现为系统(System),系统会根据组件的状态进行处理。这种架构具有高效、可扩展等优点,被广泛应用于游戏引擎中,例如Unity的DOTS框架。 阅读详情

相关推荐

Entity Component System架构

ECS架构是一种高效的游戏开发模式,通过实体(Entity)、组件(Component)和系统(System)三者的解耦设计,实现了数据与行为的分离。相比传统OOP架构,ECS具有低耦合、高扩展性、高性能和更好的并行性等优势,尤其适合处理大量动态实体的场景。然而,ECS也存在学习成本高、调试复杂、缓存利用率可能较低等缺点。通过一个2D物体移动的Demo展示了ECS的具体实现,包括实体标识、组件数据结构和系统逻辑处理。ECS架构在复杂游戏开发中展现出独特价值,但也需要根据项目规模权衡其适用性。

梦的灰色边沿... 1535

【软件架构】ECS游戏架构

通过继承联系起来的对象,一旦某个共同功能需要改动,或增加功能,就要调整类的结构。不处于同一条继承线中的对象如果有相同的功能,也无法通过继承的方式复用代码,造成了代码重复。现在我们尝试。

无数_Mirage的博客 1万+

Unity ECS(一)了解ECS与DOTS

本文转自Unity Connect官方博主 EntherVarope ECS是什么?可以做什么?为什么ECS成为我的选择? 什么是ECS(实体组件系统)? 其实ECS的概念早就诞生了,但是它是因为守望先锋才逐渐被人所知。(暴雪的守望先锋是基于ECS模式设计的,用于改善在大场景下多角色运算的效率) ECS是一种软件架构模式,由三个元素组成:实体(Entity),组件(Component)和系统(Sy...

优快云_ONION的博客 2555

游戏开发中的ECS架构

0x00 何为ECS架构 ECS,即 Entity-Component-System(实体-组件-系统) 的缩写,其模式遵循组合优于继承原则,游戏内的每一个基本单元都是一个实体,每个实体又由一个或多个组件构成,每个组件仅仅包含代表其特性的数据(即在组件中没有任何方法),例如:移动相关的组件MoveCo...

白夜的博客 2414

ECS的概念

服务器的部署模式发展历程 单机架构:一台服务器提供给客户所有应用 缺点:单机架构要求服务器的性能非常强大 纵向扩展:换高主频的CPU,增大CPU,增大内存 纵向扩展的缺陷:硬件上限限制,比如主板上接入的CPU数量,CPU主频 集群机构:多台服务器提供应用,把客户分担在不同服务器上 优点:数量取胜 云计算机构:弹性,扩展 弹性:服务样式更多样 扩展: 云服务器ECS的优势 无需自建机房,无需采购以及配置硬件设施 分钟级交付,快速部署,缩短应用上线周期 快速接入部署在全球范围内的数据中心

dream_heheda的博客 6891

创建AWS ECS Fargate

简介 ECS-Elastic Container Service,一种完全托管的容器编排服务,功能与流行的kubernete(k8s)容器编排服务类似,在aws上使用k8s需要通过EKS或自己安装在EC2上,而利用ECS的Fargate模式可以实现无服务器(ec2)容器托管,并且成本只有使用ec2的60%。 k8s管理和使用比较复杂,部署应用时一般都借助helm来实现,不过helm用起来也没那简单。相对来说ECS Fargate的使用和管理要简单的多,学习成本更低。 k8s是开源软件,更新快免费,ECS F

jonest的博客 2140

什么是ECS框架?讲解 + 实战带你入门ECS框架

ECS框架简述+实战

游戏码农一枚,不定时分享技术文章~ 2万+

Unity ECS编程

Unity ECS (Entity Component System) 是Unity引擎中的一种高性能的编程范例。ECS 编程范例由三个核心元素组成:Entity, Component 和 System。通过将数据和逻辑从彼此分离,Unity ECS 使得开发者可以更加轻松地开发高性能游戏和应用程序。

Asklyw的博客 1513

Unity新版ECS框架简介:ECS有什么不同?

https://www.fgba.net/sitemap.xml

ludongguoa的博客 9543

DSPACE仿真平台的使用

DSPACE仿真平台的使用 文章目录DSPACE仿真平台的使用1.ModelDesk新建项目2.MotionDesk引入项目3.ControlDesk引入项目4.项目整合运行 我们使用DSPACE仿真平台软件来模拟小汽车的自动驾驶。 总共需要用到DSPACE大类下的三个软件:ModelDesk、ControlDesk、MotionDesk。 1.ModelDesk新建项目 在桌面上点击ModelDesk图标,打开DSPACE—ModelDesk 选择 File 标签,侧边栏选择 New,点击 New A

qq_42582489的博客 7529

无人驾驶小车调试笔记(六)-- 车轮校准

简介:小车的动力完全来自于两个电机带动的车轮,在理想状态下,给两个电机同样的驱动参数,两个车轮会以同样的转速带动小车直线行驶,而实际情况是每个电机可能都会有个体差异,也就是说给予同样的驱动参数,表现出的转动速度会有些许不同,两个轮子的差速会导致车辆拐弯,后果就是给了直线行驶的控制命令,但是车走着走着就偏离了原本的方向,所以在开始控制之前,我们需要先平衡两个车轮的转速,保证在同样驱动参数下,两个车轮转速大致相同,也就是可以走直线。 车轮校准分为3步,测试、调整后再测试、保存参...

aibingjin的博客 1823

ECS 入门到入土: 一、什么是 ECS

编写本文时,Entities 包更新到了 preview 1 - 0.11.2 版本 主要参考官方文档,同时结合我自己的一些开cai发keng经历,建议英语好的同学直接去啃English — ECS Docs Demo List 入门首选,DOTS的HelloWorld [https://github.com/Unity-Technologies/EntityComponentSystemSamples ] 深入研究,大型战争场面 [https://github.com/Unity-Technologi.

Gyc8787的博客 8253

PCout(n) -- STM32F103RCT6 位带操作

位带操作,sys.h,PCout,PAout,PAout

weixin_50212044的博客 4023

Unity ECS 框架

20180312 ECS编程思想 这种编程思想很早前就已经提出,ECS分别是Entity,Component,System的缩写. - Entity是实例,作为承载组件的载体,也是框架中维护对象的实体. - Component只包含数据,具备这个组件便具有这个功能. - System作为逻辑维护,维护对应的组件执行相关操作. ECS和传统的OOP相比更看重的是组件,附加组件即具备功...

Unity 1万+

从实习生到独立上手:我是如何用海思PQTool搞定IPC图像调试的

本文分享了从实习生到独立使用海思PQTool进行IPC图像调试的成长历程。通过工具搭建、核心参数调整和实战案例,详细介绍了如何高效解决图像质量问题,特别强调了ISP调试中的关键参数和实用技巧,适合刚入门的图像调试工程师参考。

weixin_33756596的博客 313

Kali Linux实战:5分钟复现永恒之蓝漏洞攻击(附Win7靶机配置指南)

本文提供了一份详细的Kali Linux实战指南,指导读者在5分钟内于隔离的虚拟环境中复现经典的永恒之蓝漏洞攻击。内容涵盖从Windows 7靶机配置、网络设置,到使用Nmap进行服务发现、利用Metasploit框架进行漏洞扫描与利用的全过程,并演示了基础的Meterpreter后渗透操作,旨在帮助网络安全学习者通过亲手实践深入理解SMB协议漏洞的攻防原理。

weixin_29313547的博客 199

【ECS】阿里云ECS安装配置各种环境

【ECS】阿里云ECS安装配置各种环境

学习笔记 4770

gerrit 配置 ----Gitweb集成

此外,为了让用户能够查看任何关于 gitweb 的信息 项目中,用户必须能够阅读所有引用(包括 refs/meta/config,refs/meta/dashboards/*等)。或者,如果Gerrit通过反向代理送达,它可以 为gitweb的链接生成不同的URL(需要的) 在网页服务器上重写为)。Gerrit 代码审查可以管理和生成指向 gitweb 的超链接, 允许用户从Gerrit内容跳转到相同信息, 但由 gitweb 显示。默认为,这是 Linux 发行版上“gitweb”包的常见安装路径。

QuanQuanYuanXin的博客 1406

Unity ECS

作者:庞巍伟 链接:https://www.zhihu.com/question/286963885/answer/452979420 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 ECS解决2个问题: 1)性能; 2)减少不必要的内存使用; 放一张图,之前写了demo测试,对于使用ecs,不使用ecs,做instancing优化3中情况下,性能的差别。 可以看到如果你渲染的object在500以内,ecs性能并没有显著提升,当超过1000后,ecs性能.

Momo_Da的博客 5137

【Unity】RPG2D龙城纷争(十九)流程与UI界面(终章)

本章为RPG2D系列的终章,在之前的章节中我们已经完成了游戏的所有基本功能,那么用流程与UI界面将其串联起来才是我们整个游戏原型完善的标志。

神码编程 917

出现 Error:Unable to access jarfile xxxx\target\nacos-server.jar 解决方法

Nacos中的 2.x执行步骤如上,如果需要安装下载1.x版本,执行该步骤之后 自动更新下载的是2.x版本 对此如果需要下载安装1.x的版本,可通过如下连接(windows版本)

码农研究僧的博客 5700

ECS框架初识

ECS框架 Entity(实体) Component(组件) System(系统) ECS框架是一个为了迎合游戏开发,在进几年开始慢慢被推荐熟知的框架,最有代表性的作品就是《守望先锋》 ,其对传统的面向对象设计,组件化思维做了进一步的拆解,分成了Entity,Component,System3个部分,三者关系如图: 下面具体说一下这3个部分的功能和特性。 Entity Entity就是我们的游戏世界的各个实体,如人物、枪支、建筑等等最直接的物体原型。无数个Entity构成勒我们整个游戏世界,同样,我们

黄木木的博客 4833

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

前端ECS简介

• ECS 追求数据和逻辑的分离可以降低代码间的耦合,并且因为较为严格的 Entity/Component/System设计,有利于原生端优化性能和实现多线程的特性• 其缺点是有时显得不那么灵活,System间禁止相互调用,有些OOP容易实现代码思路,在ECS下要进行更多的代码设计• 没有OOP灵活,灵活的OOP也可以实现得相似ECS。

好好学电脑 1289

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Unity ECS 101 教程

Unity ECS 101 教程 项目介绍 本项目【ECS_101】由ArturoNereu在GitHub维护,旨在提供对Unity的新实体组件系统(Entity Component System, ECS)的入门级介绍。随着Unity推出Data Oriented Technology Stack (DOTS),ECS成为核心部分,在2023年达到了Entities包的1.0版本。教程设计目的是...

gitblog_00310的博客 1278

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

ECS实例

选购云服务器ECS 按照用户群体不同,选购云服务器主要有两个分类 个人用户:个人用户只需要完成云服务器的购买即可 企业用户:企业用户需要完成规划后再进行云服务器的购买使用 ECS实例规格 实例 一台云服务ECS实例就等同于一台虚拟机,包括vCPU,内存,操作系统,网络,磁盘等最基础的计算机组件,就是一台完整的能用的电脑。可以方便地定制,更改实例地配置。实例是能够为业务提供计算服务器的最小单位,不同的实例规格可以提供的计算能力不同。 实例规格族 根据业务场景,使用场景和系统架构,ECS实例可以分

dream_heheda的博客 3765

Lua下的ECS框架

转自云风的BLOG: https://blog.codingnow.com/2017/12/lua_ieaae_ecs_oue.html 前段时间,我写了一篇 浅谈《守望先锋》中的 ECS 构架 。最近想试试在 Lua 中实现一个简单的 ECS 框架,又仔细琢磨了一下。 我思考后的结论是:ECS 并不是一个新概念,它的提出其实是和语言相关的。ECS 概念的诞生起于游戏行业,相关框架基本都是基于 C++ 来开发的。它其实是对 C++ 对象模型的一个反思。ECS 针对组件组合对象,而反对 C++ 固有的基于继承

博客 1578
上一篇: Lua源码阅读
mlik5号
博客等级 码龄9年 3粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值