ECS架构
ECS架構(gòu)
| 淺談《守望先鋒》中的 ECS 構(gòu)架 | https://blog.codingnow.com/2017/06/overwatch_ecs.html#more |
- 熱更新:不經(jīng)過應(yīng)用商店,在應(yīng)用內(nèi)部實(shí)行的即時(shí)更新。尤其常見與游戲軟件,因?yàn)樗麄傿UG的修復(fù)和新(小)功能的添加是很高頻率的。2017年,蘋果由于熱更新下架了70多款軟件,
- SDK:Software Development Kit,軟件開發(fā)者工具包,SDK正是提供了一整套開發(fā)Windows應(yīng)用程序所需的相關(guān)文件、范例和工具的“工具包”。
- gameplay:游戲可玩性
- 疑問,所以現(xiàn)在蘋果支持熱更新嘛?
1:優(yōu)點(diǎn)
- 模式簡(jiǎn)單。如果還是覺得復(fù)雜,推薦看看 GoF 的《設(shè)計(jì)模式》。
- 概念統(tǒng)一。不再需要龐大臃腫的 OOP 繼承體系和大量中間抽象,有助于迅速把握系統(tǒng)全貌。同時(shí),統(tǒng)一的概念也有利于實(shí)現(xiàn)數(shù)據(jù)驅(qū)動(dòng)(后面會(huì)提到)。
- **結(jié)構(gòu)清晰。**Component 即數(shù)據(jù),System 即行為。Component 扁平的表達(dá)有助于實(shí)現(xiàn) Component 間的正交。而封裝數(shù)據(jù)和行為的做法,不仔細(xì)設(shè)計(jì)就會(huì)導(dǎo)致 Component 越來越臃腫。
- **容易組合,高度復(fù)用。**Component 具有高度可插拔、可復(fù)用的特性。而 System 主要關(guān)心的是 Component 而不是 Entity,通過 Component 來組裝新的 Entity,對(duì) System 來說是無痛的。
- **擴(kuò)展性強(qiáng)。**增加 Component 和 System,不需要對(duì)原有代碼框架進(jìn)行改動(dòng)。
- **利于實(shí)現(xiàn)面向數(shù)據(jù)編程(DOP)。**對(duì)于游戲開發(fā)領(lǐng)域來說,面向數(shù)據(jù)編程是個(gè)很重要的思路。天然親和數(shù)據(jù)驅(qū)動(dòng)的開發(fā)模式,有助于實(shí)現(xiàn)以編輯器為核心的工作流程。
- **性能更好優(yōu)化。**接上條,相比 OOP 來說,DOP 有更大的性能優(yōu)化空間。(詳見后面章節(jié))。同時(shí)講數(shù)據(jù)更好的組織,能夠提高 CPU cache的命中率,并行化
2:基本原理
在 ECS 框架中,把每個(gè)可能單獨(dú)使用的對(duì)象屬性歸納為一個(gè)個(gè) Component ,比如對(duì)象的名字就是一個(gè) Component ,對(duì)象的位置狀態(tài)是另一個(gè) Component 。每個(gè) Entity 是由多個(gè) Component 組合而成,共享一個(gè)生命期;而 Component 之間可以組合在一起作為 System 篩選的標(biāo)準(zhǔn)。我們?cè)陂_發(fā)的時(shí)候,可以定義一個(gè) System 關(guān)心某一個(gè)固定 Component 的組合;那么框架就會(huì)把游戲世界中滿足有這個(gè)組合的 Entity 都篩選出來供這個(gè) System 遍歷,如果一個(gè) Entity 只具備這組 Component 中的一部分,就不會(huì)進(jìn)入這個(gè)篩選集合,也就不被這個(gè) System 所關(guān)心了。
總結(jié)