Unity游戏开发中ECS思想介绍

ECS是啥?
ECS是一种编程思想,和传统的面向对象有区别

有一篇文章说的挺好,大家可以看看,这里只简要概括一下!
浅谈《守望先锋》中的ECS架构

ECS:
E(Entity)实体
C(Component)组件
S(System)系统

这个是一种编程思想,也算是一种游戏内容的开发框架

游戏里任何对象都可以抽象成 Entity ,我们也可以理解的 Entity=游戏对象
举个例子:一个技能实体算是Entity、一个特效实体、一个玩家实体等等。
游戏对象上的任何一个数据,就是一个Component,可以理解为 Component=对象的具体数据
举个例子:一个玩家的Entity上面有坐标信息,那么就是一个PositionCompoent,还有模型信息,那么就是一个ModelComponent
这个不包含任何方法,只是单纯的存储数据
管理游戏对象上的数据,就是一个System,可以理解为 System=具体逻辑
举个例子:对于玩家实体,我们想修改玩家的坐标,那么就需要一个MoveSystem,操作PositionComponent


用官方的图举个例子


额外特殊说明下,我认为框架有两种:
1.偏工具向的框架:
只是整合了一些工具,比如:资源系统、状态机、UI框架等等。这种框架和游戏内容完全无关
2.偏游戏内容向的框架:
就比如今天说的ECS框架,是会影响到游戏对象怎么更新,数据怎么存储。偏向于游戏的一个具体逻辑


那么ECS有什么好处呢?
从以下关键的几点介绍:
1.逻辑表现分离
因为我们现在要研究帧同步逻辑,帧同步就必须要做到逻辑表现分离
同时也可以针对数据记录关键帧,很容易做到预测以及回滚

2.组合模式优于继承原则
Componet的组合可以提高复用性
对某个功能进行拓展时,几乎不会影响到其它功能模块

3.提升性能
ECS面向数据变成的方式,使得内存排列天然紧密,可以增加CPU的缓存命中率
而且最新的DOTS也可以针对ECS进行性能提升


综上所述,最近就开始研究ECS了,使用的是Unity的Entitas这个插件:传送门
什么要用它呢?
其实ECS只是一种思想,并不依赖于任何插件,你只需要:
1.实现一个 IComponent 接口
2.实现一个 Entity 基类,实现 Get/Add/HasCompoent 等相关方法
3.实现一个 System 基类,获取相关的 Component 进行处理

自己也可以做,但是会有几个不方便的地方:
1.没有现成的可视化窗口(开发耽误时间)
2.没有代码生成器,Compoent里面的变量访问不到等问题

有兴趣的可以自己试试,这里就不多阐述了
那么下一章的内容,就是使用Entitas实现一个简单的逻辑表现分离的Demo!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值