Unity游戏开发中ECS思想介绍
ECS是啥?
ECS是一種編程思想,和傳統的面向對象有區別
有一篇文章說的挺好,大家可以看看,這里只簡要概括一下!
淺談《守望先鋒》中的ECS架構
ECS:
E(Entity)實體
C(Component)組件
S(System)系統
這個是一種編程思想,也算是一種游戲內容的開發框架
游戲里任何對象都可以抽象成 Entity ,我們也可以理解的 Entity=游戲對象
舉個例子:一個技能實體算是Entity、一個特效實體、一個玩家實體等等。
游戲對象上的任何一個數據,就是一個Component,可以理解為 Component=對象的具體數據
舉個例子:一個玩家的Entity上面有坐標信息,那么就是一個PositionCompoent,還有模型信息,那么就是一個ModelComponent
這個不包含任何方法,只是單純的存儲數據
管理游戲對象上的數據,就是一個System,可以理解為 System=具體邏輯
舉個例子:對于玩家實體,我們想修改玩家的坐標,那么就需要一個MoveSystem,操作PositionComponent
用官方的圖舉個例子
額外特殊說明下,我認為框架有兩種:
1.偏工具向的框架:
只是整合了一些工具,比如:資源系統、狀態機、UI框架等等。這種框架和游戲內容完全無關
2.偏游戲內容向的框架:
就比如今天說的ECS框架,是會影響到游戲對象怎么更新,數據怎么存儲。偏向于游戲的一個具體邏輯
那么ECS有什么好處呢?
從以下關鍵的幾點介紹:
1.邏輯表現分離
因為我們現在要研究幀同步邏輯,幀同步就必須要做到邏輯表現分離
同時也可以針對數據記錄關鍵幀,很容易做到預測以及回滾
2.組合模式優于繼承原則
Componet的組合可以提高復用性
對某個功能進行拓展時,幾乎不會影響到其它功能模塊
3.提升性能
ECS面向數據變成的方式,使得內存排列天然緊密,可以增加CPU的緩存命中率
而且最新的DOTS也可以針對ECS進行性能提升
綜上所述,最近就開始研究ECS了,使用的是Unity的Entitas這個插件:傳送門
什么要用它呢?
其實ECS只是一種思想,并不依賴于任何插件,你只需要:
1.實現一個 IComponent 接口
2.實現一個 Entity 基類,實現 Get/Add/HasCompoent 等相關方法
3.實現一個 System 基類,獲取相關的 Component 進行處理
自己也可以做,但是會有幾個不方便的地方:
1.沒有現成的可視化窗口(開發耽誤時間)
2.沒有代碼生成器,Compoent里面的變量訪問不到等問題
有興趣的可以自己試試,這里就不多闡述了
那么下一章的內容,就是使用Entitas實現一個簡單的邏輯表現分離的Demo!
總結
以上是生活随笔為你收集整理的Unity游戏开发中ECS思想介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java 开发者如何入门 Node.js
- 下一篇: Socket套接字通信 TCP UDP详