(個人思考)實現游戲GAS系統中的Tag
UE的GAS中Tag是一個有層級的概念的
https://github.com/BillEliot/GASDocumentation_Chinese?tab=readme-ov-file#42-gameplay-tags
比如 State.DeBuff.Stun。
現在參考UE去實現非網絡版的GAS,而且使用ECS系統的話,Entity上已經有個IEntityTag的概念了。
------------------------------------------------------------------------------------------------------------------------------------------------------------
問題:要不要用這種層級概念的Tag方式?還是直接用IEntityTag,所有Tag都在一層(雖然,GAS里的Tag和Entity無關,但也可以用)。
1.用“層級Tag”的優點: 一些抽象的集合關系(互斥等)可以用上層的Tag就處理,而且好擴展。
2.直接用IEntityTag,無層級Tag方式的優點:簡單,當數量級不大的情況下,反而好維護。而且State.DeBuff.Stun這種Tag,可以用三個離散的Tag代表。而且集合關系,實際上只要用三個中的一個就行了。
當然,這樣造成了,在思考Stun的時候,需要有整體的概念,把Stun上層的概念上的Tag都要加進去。看起來可以維護個文檔,在文檔里標記層級關系。這比較考驗實際操作的編輯了。
--------------------------------------------------------------------------------------------------------------------------------------------------------------
對于實際小項目,我覺得用第2種吧。
原因:1.花費時間少 2.流程和function實際上和第1種是一樣的,只是函數內的實現不一樣

浙公網安備 33010602011771號