有了解的知道ECS出名是因為《屁股》的火爆,在Unite大會上介紹了他們使用了ECS架構。
不同于傳統的OOP程式設計思想,ECS不強調繼承而是強調功能子產品的組合。
上個圖爽爽眼:
這個最主要還是變成了一種資料驅動的設計。變得更加單純純粹。往上面的這種概念上的介紹好多多的。讓我們看看官方怎麼介紹的——》官方ECS介紹網頁。請自行跳轉學習。
是以說下來就是:高性能,大場景,大數量,低延遲,多處理?。是以一句話下來就是:輕松并且牛逼着。
事實當然确實如此了 Intel 官網都有專門的說明——》Intel的ECS原理介紹。也有好多中文的博文,再此不贅述了
當然網上說最早的ECS架構寫遊戲的都可以追溯到上個世紀的事情了?,當時太小都還尿床呢。
當然要清楚ECS并不一定會用在遊戲上哦。
這是官方放在Github上的ECS架構代碼——》位址
現在unity2018.3中添加ECS隻需要打開Windows菜單按鈕下的Packages然後點選安裝就可以了,可能網絡要讀取需要時間
安裝成功之後就可以在項目工程中Packages中看到:
現在添加ECS架構要簡單傻瓜多了。
什麼是DOD
Unity實際上在做的大計劃,是一個在程式屆流行了一陣子,最近越來越火的概念DOD (Data Oriented Design) 即 面向資料設計. 他是與我們所熟知的OOD (Object Oriented Design) 即面向對象設計相對的概念.
ECS
執行個體元件系統,是程式設計思想的改變,從基于對象的運作,改變為"流水線式運作"(我自己的比喻).雖然顯然破壞了"程式對現實的模拟"這樣美好的願望,但是卻大大的增強了解耦性,可測性,擴充性.并且天然是以下要描述的幾個元件的好夥伴~
Job System
Job System是Unity對CPU多核程式設計的應用.通過把工作分散到CPU的各個核心上來大大提升運作效率.而ECS跟他之間的搭配則是由于ECS的System部分天然是以批量處理為核心的,是以隻要稍加改動,就可以轉變為批量的分Job交到多核去處理.實作性能的提升.
HPC#
HPC#(High Perform C#)是Unity開發的一個C#子集,通過抛棄對象,指針,等進階特性,從語言層面加速性能. 截圖裡沒有直接列出這個,但是NativeContainer是HPC#的一環. 而由于ECS本身的去對象化,可見又是天然的好夥伴.
Burst Compiler
這又是Unity自己開發的,一個全新的快速編譯器,最重要的是由于不用考慮通用性,僅僅針對Unity,針對遊戲,再配合HPC#, 使得性能有了更大的提升.由于牽扯到編譯器層面,這個部分我的了解是最薄弱的,如有錯誤敬請指正.
ECS入門
我建議首先不要考慮Unity, 而是先單純對ECS有一個基本的學習,首推這兩篇文章:
http://blog.lmorchard.com/2013/11/27/entity-component-system/
他的圖很形象,脫離代碼,給你一個最基本的認識
然後是https://www.richardlord.net/blog/ecs/what-is-an-entity-framework.html
結合遊戲引擎的實際需要,更為詳細的介紹.
繼續了解ECS的可以看一下提供的幾個網址連結,他們都寫得不錯:
雲風的Blog時間有點久隻是作為了解,現在還是有一些變動的(其實我也說不上來):網頁傳送門
unity2016大會的視訊介紹 一切罪惡的開始:視訊傳送門(YouTube)
CSDN文章一:網頁傳送門
CSDN文章二,不建議看這個的代碼部分:網頁傳送門
知乎各路大聲的讨論:網頁傳送門
等等吧網上有很多的概念介紹,這些概念我也沒必要重新說一遍。這個和很多人的面向對象程式設計思路排斥。面向對象很重要但是不應該是唯一,這樣也确實提供能面向對象無法提供的實作的功能,現在隻能說各有利弊,并且ECS用在現有的遊戲項目中弊要大于利。?