天天看點

(一)ECS:這是什麼鬼?

有了解的知道ECS出名是因為《屁股》的火爆,在Unite大會上介紹了他們使用了ECS架構。

不同于傳統的OOP程式設計思想,ECS不強調繼承而是強調功能子產品的組合。

上個圖爽爽眼:

(一)ECS:這是什麼鬼?
(一)ECS:這是什麼鬼?

這個最主要還是變成了一種資料驅動的設計。變得更加單純純粹。往上面的這種概念上的介紹好多多的。讓我們看看官方怎麼介紹的——》官方ECS介紹網頁。請自行跳轉學習。

是以說下來就是:高性能,大場景,大數量,低延遲,多處理?。是以一句話下來就是:輕松并且牛逼着。

事實當然确實如此了 Intel 官網都有專門的說明——》Intel的ECS原理介紹。也有好多中文的博文,再此不贅述了

當然網上說最早的ECS架構寫遊戲的都可以追溯到上個世紀的事情了?,當時太小都還尿床呢。

當然要清楚ECS并不一定會用在遊戲上哦。

這是官方放在Github上的ECS架構代碼——》位址

現在unity2018.3中添加ECS隻需要打開Windows菜單按鈕下的Packages然後點選安裝就可以了,可能網絡要讀取需要時間

(一)ECS:這是什麼鬼?

安裝成功之後就可以在項目工程中Packages中看到:

(一)ECS:這是什麼鬼?

現在添加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用在現有的遊戲項目中弊要大于利。?