(个人思考)实现游戏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种是一样的,只是函数内的实现不一样 

posted @ 2025-07-03 22:20  sun_dust_shadow  阅读(22)  评论(0)    收藏  举报