用途:为 Unity 项目实现 Gameplay Ability System(GAS)框架,提供技能(Abilities)、效果(Gameplay Effects)、属性(Attributes)和 Gameplay Tag 的安全实现模式与常见陷阱说明。适用于战斗技能、增益减益与伤害、基于属性的角色数值、基于标签的玩法查询和状态效果系统。
主要能力:
- AbilitySystemComponent(ASC)作为核心组件,持有 Granted Abilities、Active Effects、Attribute Sets 和 Owned Tags。
- 技能以 ScriptableObject(GameplayAbilitySO)定义,包含技能 ID、技能标签、激活阻塞/必需标签、取消标签、冷却、消耗与施加效果;激活前依次检查冷却、阻塞标签、必需标签与消耗,激活时取消冲突技能、支付消耗、施加冷却并执行。
- Gameplay Effect(GameplayEffectSO)定义持续时间类型(Instant、HasDuration、Infinite)、叠加策略、属性修改器、授予标签、条件效果、施加所需标签与移除标签;提供施加、堆叠处理、移除与按标签批量移除的安全模式。
- 属性系统用 AttributeSet 管理数值,支持 Add、Multiply、Override 三种修改操作,并按顺序计算当前值。
- Gameplay Tag 容器支持层级标签匹配、HasAny、HasAll、添加与移除。
必要用法要点:效果施加需带递归保护,示例中设 MaxRecursionDepth = 16,超过时记录错误并返回 GameplayEffectHandle.Invalid;条件效果递归走同一条受保护路径。生命周期更新建议逆序遍历活动效果,处理持续时间、移除标签与周期效果。
常见陷阱与解决:效果递归导致无限循环(用递归深度上限与来源跟踪防止 A→B→A 链);目标被销毁导致空引用(做空检查或使用带有效性校验的目标句柄);遍历集合时修改集合(逆序遍历或先收集再移除);属性计算循环依赖(用计算标志与缓存)。此外还给出死亡/复活时的清理模式:移除全部效果、清空标签、结束活动技能、重置属性基础值并重新施加默认效果。
限制:资料为技能参考文档,仅含模式与示例代码,未提供安装命令、依赖版本、收费方式、平台支持范围与效果数据,这些信息暂未提供。