Unity3D Entitas Wooga的ECS Entity Component System入门学习1

版本:unity 2017.1  语言:C#

 

总起:

今天才知道2015年谷歌(是Wooga的)在Github上发布了一个名叫Entitas的ECS框架,它主要基于Unity和C#来进行开发。之前还看到暴雪公司在讲他们的《守望先锋》时就用到了类似的技术。

 

Github地址:https://github.com/sschmid/Entitas-CSharp/wiki。百度上一查也没人来介绍该技术,嘛,我就以一个初学者的眼光来介绍一下该框架的基本原理和用法。

 

所以什么是ECS框架呢?其实Unity本身的组件开发就是ECS框架。但对比着来说,Unity中写脚本,拖到每一个GameObject下,都是一个MonoBehaviour,一个脚本中既包含了数据又包含了方法;而Entitas的目标是让数据和方法分离,在GameObject下只添加数据,而方法由其他系统完成。

 

类似于Java、C#中的垃圾回收机制,如果有对象失去了所有引用,则在一个特定的时间点上,垃圾回收机制将所有的对象统一删除。类似的,Entitas下,GameObject的组件不能有任何方法,只保存数据,数据代表特性,拥有一样特性的执行逻辑(也就是方法)会在特定时间点上统一执行。

 

最终做到数据和方法之间的解耦。有几个非常明显的好处:

1.添加的功能可以逐个做单元测试;

2.代码共享方便;

3.GameObject下只有数据,没有任何方法或者说没有逻辑上的代码;

4.很容易查询到拥有相同类型数据的对象;

5.效率高,因为普通的MonoBehaviour包含方法,例如在创建100个游戏对象时同样会创建100个相同的方法,然而这显然是没有必要的,因为ECS系统可以用一个方法就代替这100个方法的操作。(创建100个相同方法这边被网友指出是不存在的,不管有多少个对象,方法只有一个,这边大家不要被我误导了。我这边想表达的是:Unity在调用Update时需要反射,所以调用100次会比较费。如果有不对、不准确的地方,还希望不吝指教)

 

下面来介绍一下框架具体实现的几个部分。

 

4种概念:

框架的实现上有四种概念,分别是:Entiy实体、Context环境、Group组、Collector收集器,在开始写程序之前必须摸清楚这些概念的职责。

 

我们先来看一张官方提供的图,对几个概念有个感性的认识:

评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值