转载请注明,原文地址:http://www.benmutou.com/archives/2772
文章来源:笨木头与游戏开发
教程目录:
[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入门]9.如何回到主线程搞事情——EntityCommandBufferSystem
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包,是预览版,不代表正式版的时候也适用。
转发本系列文章的朋友请注意,带上原文链接和原文日期,避免误导未来使用正式版的开发者。
从cocos就开始看你的教程, 支持木头,感谢
谢谢支持!