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