參加實習一個月了 公司新項目準備使用ET框架進行開發 在走通et的流程以前 咱們必須瞭解一個概念:ECS組件式編程html
這個概念有區別於咱們咱們常見的unity開發思路(雖然unity自己也是採用了給go添加component) ,在unity開發中,常見的思路是 entity-manager,就是說把業務抽象成 實體 - 管理器的模式 ,實體就是抽象出來的 好比說主角啊 怪物等等類(實例),管理器就是那些protomanager,scenemanager,uimanager之類的封裝一些相對抽象的邏輯的類(實例)。對象和管理器各自遵循oop的思想設計 ,玩家類繼承角色類,實現不一樣接口 ;角色類能夠被npc類繼承,也能夠被玩家類繼承;每一個階段的類都封裝了這個階段該(繼承)有的屬性和操做,manager和enity的交互經過相應事件系統(有多是某些manager自己)從而組成一個相對完整的生態系統。git
這樣作的話,數據和邏輯的耦合程度比較高,因而人們嘗試把mvc(puremvc,strangeioc)框架加入其中,將實體的數據和邏輯進行解耦,實體和管理器被分爲view和controller和model。然而,遊戲原本就是一個至關複雜的產品,邏輯和邏輯,邏輯和數據有的時候強行解耦的話並不能使得開發變得簡單,有時候反而會加大工做量(好比說開發一個相對簡單的項目)。那麼除了這種常見的開發思路有沒有其餘的想法呢?答案是確定的。github
組件式開發ECS其實不是新的東西,在非遊戲開發的領域(特別是服務器開發)其實這個概念十分常見,而ecs在遊戲開發領域的開發概念最先是從守望先鋒服務器開發流傳出來的(不敢確定,雖然你們都這麼說,畢竟我沒有親自去考證過),感興趣的朋友能夠本身去搜索。編程
什麼是ecs呢?e便是enity 實體 c便是component s便是system 。c#
最純粹的ecs開發就是將數據和邏輯強解耦(我認爲的,不必定正確),System承載邏輯,Enity承載數據,Component定義數據(和unity的component,即我想固然覺得的"組件"不一樣,ecs的component是純數據不包含邏輯)。服務器
打個比方,描述:一個紅色蟲吃麪積爲5葉子。這句話中 ,蟲-entity,葉子-entity,吃-system,蟲的屬性(食量)-component,葉子的屬性(面積)-component。mvc
一個紅色蟲吃麪積爲5葉子->一個的無論什麼樣的蟲能夠吃葉子->蟲吃葉子->......->生物吃生物->......->名詞動詞名詞 框架
virtualEntiy擁有x個specificComponent組成了specificEnity,virtualSystem實現了具體邏輯變成specificSystem,實體須要對另外一個實體產生做用,就掛載須要的組件,系統面向組件實現,組件和系統關聯。實體和系統之間強行解耦(除開特殊狀況,除非這系統是爲一個特定組件設計的,而這個組件又是某個實體的特定必不可缺的)。這個是我本身對於ecs總結或者說是感想(不必定正確)oop
說完了基本的ecs概念,就來講一下在unity開發中的一些經常使用的基於ecs概念設計的框架:學習
ET--u3d雙端開發框架
Entitas-c#框架
unity2018 ecs&jobsystem
這三個算是在unity開發中比較常見的ecs框架。感興趣的朋友能夠本身先去搜索
最後,我必須說的一點是,並非說ecs是unity開發絕對惟一,無敵棒的開發模式。軟件開發的核心不在於用了什麼牛逼的框架,造了牛逼的輪子,代碼是爲產品服務的,只要框架有助於提高產品質量,速度就是好框架。每一個框架須要真正深刻思考過,才能真正用好這些框架。
下面是我本身看過,感受對本身有收穫的文章,分享出來
https://www.cnblogs.com/yangrouchuan/p/7436533.html --Entitas框架簡介
https://www.zhihu.com/question/286963885/answer/452979420 --ecs開發的思考(會成爲將來的主流嗎?)、
https://zhuanlan.zhihu.com/p/32787878 --ecs無框架原理級實現
https://github.com/egametang/ET --et的Github地址
最後:本人只是一個大四在公司實習的小菜鳥,不少地方寫的很差還請你們見諒。
有興趣的朋友能夠加個人qq你們一塊兒學習一塊兒成長 qq:872732381
/***************************************這個是好久以前寫的,許多對ECS的見解比較稚嫩,還請各位去分享連接裏面看********************************************/