[Unity ECS 入门]0.前言-想不想学ECS?

笨木头  2019-12-5 14:10   ECS入门   阅读(7,703)   2条评论

转载请注明,原文地址:http://www.benmutou.com/archives/2772
文章来源:笨木头与游戏开发

 

教程目录:

[Unity ECS 入门]0.前言-想不想学ECS?

[Unity ECS 入门]1.最简单的ECS程序

[Unity ECS 入门]2.筛选实体数据的方式1——ComponentSystem和ForEach

[Unity ECS 入门]3.筛选实体数据的方式2——JobComponentSystem和ForEach

[Unity ECS 入门]4.筛选实体数据的方式3——IJobForEach

[Unity ECS 入门]5.块(Chunk)和原型(Archetype)

[Unity ECS 入门]6.筛选实体数据的方式4——IJobChunk

[Unity ECS 入门]7.创建实体的方式——通过Prefab

[Unity ECS入门]8.System执行顺序

[Unity ECS入门]9.如何回到主线程搞事情——EntityCommandBufferSystem

[Unity ECS入门]10.筛选实体数据的方式5——IJobForEachWithEntity

[Unity ECS 入门]11.更多组件类型

[Unity ECS入门]12.EntityQuery

[Unity ECS入门]13.结束

1.ECS是什么?

先不管ECS是什么,首先要知道它为什么火起来的。是因为暴雪做的一款游戏——守望先锋。它告诉我们,守望先锋用ECS解决了很多性能问题。(唔,大致是这样,实际情况大家得自己去搜,我随口说说的)

 

于是,爸....是暴雪,暴雪这分明是给我们广大开发者树立标杆,于是,大家就把ECS这么传开了。

大神:ECS可以解决部分游戏的部分性能问题!

小牛:ECS可以解决游戏的性能问题!

新闻:ECS可以让所有游戏的性能得到大幅提升!

群众:开发游戏必须用ECS,效率高!性能好!不学就落后了!

木头:不想学不想学

 

ECS大致是这么传到了我们的身边。

(以上言论是作者瞎掰的,请勿当真唔,当真也行

 

所以,ECS到底是什么?

它是一种开发模式——Entity、Component、System的缩写。

 

基本的概念如下:

实体(Entity)由若干组件(Component)组合而成;

实体(Entity)本身不具备任何逻辑;

实体(Entity)的逻辑由系统(System)来控制。

2.想不想学ECS

反正我本来是不想的,我游戏的瓶颈压根不在性能那里,我的瓶颈在于不够时间写剧情、配数值、搭UI….性能什么的,我这小游戏,59帧和60帧有区别吗?(开玩笑的,别当真!)

 

然而,据说Unity在主推ECS,未来的Project Tiny(可以开发H5游戏)似乎也要用ECS来开发。

 

而我们公司,未来刚好又需要用到Project Tiny(非游戏公司,人员不足,不考虑Cocos、EGret等其他技术栈)。因此,我只好开始研究Unity的ECS,以便将来能快速上手Project Tiny。

 

我这个入门系列会按照官方示例(HelloCube)走一遍,当然我会转化为我自己的理解写成教程。我也是一边学习一边写教程,可以带着怀疑的态度阅读本系列教程。

 

比较正经地提醒大家:ECS确实不是万能的,要考虑自己的游戏规模、游戏类型,通常来说,ECS更适合弹幕游戏、拥有大量模型的游戏。像剧情游戏之类的,就不要凑热闹了。

3.DOTS是什么?

等等,DOTS又是什么?

其实,ECS还不算什么厉害的东西,更厉害的是,Unity新推出的多线程式数据导向型技术堆栈




对,就是这个什么堆栈,很厉害的。而DOTS本身就包含了ECS:


不过,这个系列的教程仍然会以ECS为主,C#任务系统(C# JobSystem)和Burst编译器不会做过多的介绍(对,我还不懂)。

 

本系列教程基于官方Demo项目:https://github.com/Unity-Technologies/EntityComponentSystemSamples

其中,我会选取HelloCube目录下的Demo来一步步讲解:


官方ECS的示例是由浅入深,一步步推进的,非常适合我们这些从面向对象思维转换到ECS思维的人。

4.参考的资料

在写本系列教程的过程中,我不断重复参考了以下部分或全部文章:

https://connect.unity.com/u/enthervarope (写得比较清晰简洁的ECS教程,细节相对较少,没有木头那么唠叨,但思路清晰,非常值得阅读,我入门也多亏了这位大神的教程。)

 

https://blog.csdn.net/qq_30137245/category_9213857.html (比较多的ECS教程,包括对官方示例的逐一解释)

 

https://blog.csdn.net/andrewfan/category_8967683.html (某位博主对官方手册的中文翻译,部分内容与最新手册有出入,建议做辅助参考使用,比如先看一遍翻译,再去看原文)

 

https://docs.unity3d.com/Packages/com.unity.entities@0.3/manual/index.html (官方英文手册,虽然有人翻译了中文,但有时候有些知识点还是看原文比较能理解,建议结合中文翻译一起看)

 

以上的资料都很不错,既然如此,为什么我还要写这个系列的教程?

首先呢,是为了装逼(啊,不!心里话是不会说出来的)

 

其次,只有把自己学习过程中的感悟记录下来,这样才会印象深刻。

并且在写教程的过程中,很多细节我都要去弄懂,明明大家10分钟就能看懂的东西,我可能要折腾大半天。

在这样不断折腾的过程中,我能学到更多东西。

 

因此,如果大家觉得以上那些资料更好的话,直接去看那些资料就可以了。

ECS的入门大致上就是这么些东西,看谁的都一样。

至于后续的进阶知识,等我掌握之后再和大家分享。

 

注意,本系列教程基于DOTS相关预览版的Package包,是预览版,不代表正式版的时候也适用。

转发本系列文章的朋友请注意,带上原文链接和原文日期,避免误导未来使用正式版的开发者。

2 评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注