跳转至

校验设计(已定稿,M3)

1. 与 Able 的关键差异

Able UAK
规则归属 外部 Validator 按 Task 类绑定 Task 自带 Validate(),内聚
触发时机 手动点按钮,结果弹窗 改动即增量重算,常驻底栏
目标 事后报错 让错误无法被配置出来

2. 两级规则

资产级(UAKAbilityAsset::Validate)

  • 长度必须 > 0(Error)
  • 没有任何轨道(Warning)
  • 没有任何任务(Warning)

任务级(各 Task 的 Validate,基类提供通用规则)

  • 任务结束时间超出技能长度(Warning)
  • 勾选 bNeedsTick 却是单帧任务(Warning)
  • ApplyGameplayEffect 未指定 GE(Error)
  • PlayMontage 未指定 Montage(Error)
  • SendGameplayCue 的 Cue Tag 无效(Error)
  • Branch 未指定目标轨道 / 目标轨道不存在(Error)

3. 三个消费方

消费方 行为
SUAKValidationBar(编辑器底栏) 用"任务名+时间"指纹判断变化,0.5s 节流增量重算
UAKValidateCommandlet(CI) 全量扫描,-strict 时按错误数返回非零退出码
Json 导入 导入后可立即校验,发现 Tag/引用丢失

4. 规则编写约定

void UMyTask::Validate(const UAKAbilityAsset* Asset, FAKValidationResult& Out) const
{
    Super::Validate(Asset, Out);   // 必须先调 Super
    ...
    Out.Add(EAKValidationSeverity::Error, Message, const_cast<UMyTask*>(this));
}
  • 必须调用 Super::Validate,保证通用规则不丢。
  • 传 this 以便 UI 双击定位(基类方法是 const,需 const_cast)。
  • 严重度:Error = 运行时一定不对;Warning = 可能配错了;Info = 提示。

5. 待补(M5)

  • Tag 有效性检查(当前 RequestGameplayTag 会静默返回空 Tag)。
  • 资源引用存在性检查(GE / Montage / Cue 路径是否有效)。
  • "查询任务之后没有效果任务"这类跨任务的模式检查。
  • 规则集可由项目扩展(注册表而非硬编码)。