ECS實現數據驅動的遊戲框架
一. 數據驅動/消息驅動?
由於之前做的項目中游戲邏輯的架構都是以事件/消息驅動功能的方式實現,雖然結構清晰功能模塊和遊戲模塊劃分清晰但在做的過程中遇到過很多問題。直到最近項目中遇到一種遊戲框架 ECS 以數據驅動邏輯的框架,才豁然開朗。
以主角行走功能爲例,只需找到主角組件修改其速度,方向及動作屬性,在行走系統中根據速度方向移動主角對象,並根據當前動作屬性播放行走動作。從而實現數據驅動邏輯。
二.實體-組件-系統(ECS)基本結構
實體是遊戲中的基本單元包含多個組件,組件是一些屬性的集合(一般組件沒有方法),而系統則是針對某一屬性集合的邏輯處理。
例如: 主角可以作爲一個實體(Entity), 主角又包含很多組件 如移動相關組件MoveCompent包含了速度 朝向等屬性, 渲染組件RenderCompent包含了avatar信息 縮放等信息。 而系統的作用則是針對每個組件的功能實現, 如對應移動有MoveSystem用來控制主角移動 RenderSystem用來控制渲染等。
ECS 的基本思想就是數據與邏輯分離,數據的改變驅動邏輯的變化,實體組件中只存放數據屬性,系統中僅僅針對所關心的組件們進行邏輯處理。
三.實體-組件-系統(ECS)結構