參加實習一個月了 公司新項目准備使用ET框架進行開發 在走通et的流程之前 我們必須了解一個概念:ECS組件式編程
這個概念有區別於我們我們常見的unity開發思路(雖然unity本身也是采用了給go添加component) ,在unity開發中,常見的思路是 entity-manager,就是說把業務抽象成 實體 - 管理器的模式 ,實體就是抽象出來的 比如說主角啊 怪物等等類(實例),管理器就是那些protomanager,scenemanager,uimanager之類的封裝一些相對抽象的邏輯的類(實例)。對象和管理器各自遵循oop的思想設計 ,玩家類繼承角色類,實現不同接口 ;角色類可以被npc類繼承,也可以被玩家類繼承;每個階段的類都封裝了這個階段該(繼承)有的屬性和操作,manager和enity的交互通過相應事件系統(有可能是某些manager本身)從而組成一個相對完整的生態系統。
這樣做的話,數據和邏輯的耦合程度比較高,於是人們嘗試把mvc(puremvc,strangeioc)框架加入其中,將實體的數據和邏輯進行解耦,實體和管理器被分為view和controller和model。然而,游戲本來就是一個相當復雜的產品,邏輯和邏輯,邏輯和數據有的時候強行解耦的話並不能使得開發變得簡單,有時候反而會加大工作量(比如說開發一個相對簡單的項目)。那么除了這種常見的開發思路有沒有其他的想法呢?答案是肯定的。
組件式開發ECS其實不是新的東西,在非游戲開發的領域(特別是服務器開發)其實這個概念十分常見,而ecs在游戲開發領域的開發概念最早是從守望先鋒服務器開發流傳出來的(不敢肯定,雖然大家都這么說,畢竟我沒有親自去考證過),感興趣的朋友可以自己去搜索。
什么是ecs呢?e即是enity 實體 c即是component s即是system 。
最純粹的ecs開發就是將數據和邏輯強解耦(我認為的,不一定正確),System承載邏輯,Enity承載數據,Component定義數據(和unity的component,即我想當然以為的"組件"不同,ecs的component是純數據不包含邏輯)。
打個比方,描述:一個紅色蟲吃面積為5葉子。這句話中 ,蟲-entity,葉子-entity,吃-system,蟲的屬性(食量)-component,葉子的屬性(面積)-component。
一個紅色蟲吃面積為5葉子->一個的不管什么樣的蟲可以吃葉子->蟲吃葉子->......->生物吃生物->......->名詞動詞名詞
virtualEntiy擁有x個specificComponent組成了specificEnity,virtualSystem實現了具體邏輯變成specificSystem,實體需要對另一個實體產生作用,就掛載需要的組件,系統面向組件實現,組件和系統關聯。實體和系統之間強行解耦(除開特殊情況,除非這系統是為一個特定組件設計的,而這個組件又是某個實體的特定必不可缺的)。這個是我自己對於ecs總結或者說是感想(不一定正確)
說完了基本的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的看法比較稚嫩,還請各位去分享鏈接里面看********************************************/