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