ECS(Entity-Component-System)是什么?

博客主要介绍了Unity中使用ECS的目的,包括高效利用内存、提高运行速度和解决代码耦合。阐述了ECS的本质是数据驱动行为,介绍了Entity和Component的组织方法、System操作Component的方式,还指出在游戏角色设计中组合优于继承,可丰富和解除耦合。

Unity中使用ECS的一个目的是高效的利用内存,提高运行速度,另外一个方面从代码层解决复杂的耦合关系。而一个主要的应用,我想是在角色类的设计上,对象和行为分离。如今,为了热更新,客户端逻辑层主要使用的是Lua,主要解决对象和行为分离,提高角色的扩展性。

ECS的本质是数据驱动行为,拥有什么样的Componet就可以执行对应的行为。

ECS:E(Entity)是实体,是C(Component)的拥有者;C是基本数据的组织者;S(System)是C的控制者。

那么Entity怎样去组织Component?System应该怎么样去操作Component呢?

Entity和Component的组织方法有两种:Entity拥有Component,如

1. Entity是Component的集合

Class Entity
{
    List<Component> components;
}

2. Component拥有Entity的ID,而Entity就只是一个ID就足够了,因为Component标记了其属于谁。

Class Entity
{
    int id;
}

Class Component
{
    int ownerEntity;
    //Data
}

System操作Component,就是不同的System对关心的Component进行操作,使用过滤器就能够做到。

而Entity终究有什么用呢,其实就是标记是一个Object,而只有通过这个Entity才能获取数据,才是一个整体。

这里只说对ECS设计的理解,了解了这些,就可以设计ECS系统。对游戏来说,角色的设计 组合优于继承,原因在于,角色的基础都是一样的,角色拥有的Component不一样,就能拥有不同的行为。比如NPC拥有了移动组件就能够移动。可以丰富和解除很多特定的耦合关系。简单来说,Role是System的扯线木偶。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值