(轉)我所理解的Entitas——入門(一)

關於ECS框架
ECS框架被大家所熟知是源於2017年GDC大會上《守望先鋒》針對他們關於ECS架構的做了一次技術分享,在此之前ECS框架只是並未被廣泛使用和流傳。和傳統的OOP框架以類爲基礎將數據和邏輯放在類中處理的方式不同,ECS是以功能爲基礎,遵循組合優於繼承的原則將功能分開處理。這樣一個遊戲物品有着什麼功能取決與他有什麼組件,其他關於ECS和傳統框架的區別或者ECS的優點可以自行百度。這裏主要介紹ECS的概念以便之後理解Entitas。

在ECS中每個基本單位都是一個實體,一個實體由N個組件組成。然後擁有相同組件的實體會被特定的系統處理特定的邏輯。E(ntity)——C(omponent)——S(ystem):

  Entity 實體,組件的載體本身並無意義,擁有什麼功能完全取決於擁有什麼組件。但是可以通過在遊戲中增加或刪除組件來改變實體的型爲。
  Component 組件,包含了代表其對應特性的數據,所以組件中沒有任何方法。
  System 系統,用來處理一個或多個具有相同組件的實體,即系統中沒有任何數據。
例如一個物體有移動的特性,那麼我們可能有SpeedComponent,DirectionComponent,PositionComponent三個組件分別用來表示速度,方向和位置,還有一個MoveSystem用來處理每幀的移動,那麼擁有上面三個組件的實體都會具有移動功能,哪怕這個實體是一棟房子或者一座山。

Entitas

 

關於Entitas
Unity在2018年也發佈了自己的ECS框架entities。而Entitas發佈時間會比Unity的ECS框架發佈的早的多。據說在2015年就已經發布,同時在Github上有着4K+的Star。我是項目需要才粗略研究了一下Entitas並在這裏形成文檔記錄一下自己的學習筆記。

下載安裝
官方發佈了Github和AssetStore兩個版本。AssetStore上的版本售價90$。望而卻步選擇了丐版(Github版本)。兩個版本的區別在於AssetStore版本提供了Jenny插件,可以不依賴於Unity的編輯器生成代碼。這樣的好處是我們使用Github版本在開發過程中每次生成代碼的時候必須沒有語法錯誤。
下載地址:
Github版本 :https://github.com/sschmid/Entitas/releases
AssetStore版本 :https://assetstore.unity.com/?q=entitas&orderBy=1

下載後將壓縮包中的Assets文件夾下的DesperateDevs和Entitas兩個文件夾拷貝到項目的Assets文件夾中。然後等待Unity編譯完成可以在菜單欄Tools下看到Jenny和Entitas兩個按鈕。

自動生成代碼

  • 在菜單欄Tools->Jenny->Preferences打開Jenny的設置面板,如下:

  •  

  • 點擊上圖紅色箭頭指向的Auto Import按鈕導入Jenny插件,然後上圖會多出來幾行。
  •  

  • 點擊上圖中紅色箭頭指向的Generate按鈕。如果是新建的項目可能會有報錯提示:
  •  

  • 這時候需要在項目的Assets同級檢查一下是否有C#項目工程文件或者C#項目工程文件和下圖標識的文件名稱是否一直。如果沒有隻需要在VS或者其他編輯器打開一次項目。如果有但是名稱不同只需要在下圖的地方修改。然後重新點擊Generate按鈕生成代碼。
  •  

  • 自動生成的代碼會在Assets/Generated文件夾下:

 

Jenny設置面板

 

這裏是Jenny生成代碼的過程中的進度條顯示或者AssetStore版本可以使用Jenny Server生成代碼的進度條顯示等其他的一些設置項,我沒有深入瞭解。咱們可以不用管默認就行了。

 

  Project Path 剛纔說了C#項目工程文件路徑
  Target Directory 自動生成代碼的路徑。
  Assemblies 引用程序集的路徑,這裏的默認值也是Unity自動引用的路徑,除非自己修改過
  Contexts 需要生成的上下文,後面會介紹上下文
  Ignore Namespaces 生成的代碼文件名稱是否忽略名稱空間。
總結:這裏主要介紹了一下ECS和Entitas框架。我就是將自己學習過程中的理解寫下來,如果有錯誤的地方歡迎指正。
ECS框架也是短短几句話可以說清楚的。下面是覺得還不錯參考:

淺談《守望先鋒》中的 ECS 構架  :https://blog.codingnow.com/2017/06/overwatch_ecs.html
ECS架構簡介  :https://johnyoung404.github.io/2019/06/27/ECS%E6%9E%B6%E6%9E%84%E7%AE%80%E4%BB%8B/

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章