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