游戏框架使用ECS有什么好处

文章目录

前几天面试,看到公司的开发的FPS端游采用了ECS框架进行开发。问为什么用ECS框架?在最近的游戏框架中ECS是比较流行,使用它到底有什么好处?
我当时的答复是这样的:
E表示Entity,C表示Component,纯数据,S表示System,纯方法。(解释什么是ECS)
entity无逻辑,组合大于继承的思想。(设计思想)
优点:
1.Component是纯数据, 逻辑全在System上,状态和逻辑分离,适合做网络同步。
2.Entity和Component是有Cache的(使用了Entitas框架,对Component可以做缓存,即添加和删除快速,Entity也是有缓存的,可以复用),即有Entity和Component的缓存,效率比较高。
当时答得不好,一直没有给面试官一个满意的答复。
为什么纯数据就适合同步?我把一个类中需要同步的数据发送到服务器不是也可以吗?

答得不好原因:并没有完全理解ECS。
参考云风的博客:https://blog.codingnow.com/2017/06/overwatch_ecs.html
原因
1.面向对象设计,一个对象会有许多部分聚合而成(一个角色对象可能包含角色模型,角色名字,业务等),但是这些模块是不相关的。模块内聚性差,模块间耦合。使用ECS,采用组合的思想,对应一个System,只需要考虑自己关系的Component即可(比如移动模块,它只关心PositionComponent,VelcotyComponent, InputComponent,并不关系GamePlayComponent),使得逻辑清楚,模块间分离不耦合,内聚性好。
2.关注对象不一样。面向对象是以对象优先,每次是对自己对象的处理,对其他对象的影响,需要使用消息驱动。ECS是以Component优先,不会有这个问题 ,因为颗粒度更加小,比如A对B造成伤害,oo会纠结于在A中计算还是B中计算,但是ecs在system中完成。
3.网络同步问题。ecs适合做预测,回滚,回放。compnent的数据就是状态的数据,适合做同步。(我觉得非常适合FPS和MOBA这种游戏)。

个人觉得ECS带来的问题:
1.system之间的执行次序,对component的影响,写system需要明确system的执行顺序。
2.enity包含了所有的component,即entity是一坨屎,如过传入了enity作为参数处理,可以访问所有的component,并且修改值,也不利于做单元测试。
3.增加代码理解难度。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值