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