编辑器设计¶
设计目标:具备 Able 级别的编辑效率,但结构、布局与功能组合都刻意不同; 并把 AbilityKit 的"可解释 / 溯源"思想变成编辑器的一等视图。
法律基线:时间轴、轨道、拖拽、缩放、吸附、验证器这些是业界通用形态与通用交互,不受版权保护; 受保护的是具体表达。因此下表把每一处都标明性质:通用 / 刻意不同 / UAK 独创。
1. 三个视图(而不是"时间轴 + 蓝图图")¶
| 视图 | 作用 | 类比 |
|---|---|---|
| 时间轴(默认) | 编排:什么时候发生什么 | 通用形态 |
| 血缘(Explain) | 解释:这条技能会对 GAS 产生什么影响,一跳一跳展开 | UAK 独创(AbilityKit 的 explain 思想 + GAS 落地) |
| 校验 | 治理:全量规则结果,可导出 | 通用思想的另一种形态 |
Able 是「Timeline 模式 + Blueprint Graph 模式」双模式;我们的资产是纯数据资产(非 Blueprint), 所以没有图模式,取而代之的是「血缘视图」。这既是架构必然,也是最强的差异化点。
2. 布局¶
┌──────────────────────────────────────────────────────────────────────────────┐
│ UAK · Fireball [⏮][▶][⏭] 18 / 90 f 60fps [⚙] │ 工具条
├───────────┬──────────────────────────────────────────────┬───────────────────┤
│ 视图 │ │ Inspector │
│ ⌾ 时间轴 │ 0.0 0.3 0.6 0.9 1.2 │ ┌ 时间 ─────────┐ │
│ ○ 血缘 │ ├────────┼────────┼────────┼────────┼─────┤ │ Start 0.30 s │ │
│ ○ 校验 │ M ▓▓▓▓▓▓▓▓▓▓░░░░░░░░░░ │ │ Dur 0.10 s │ │
│ ○ 预览 │ E ▓▓▓▓ │ ├ 目标 ─────────┤ │
│ │ P ▓▓▓▓▓▓ │ │ 前方扇形 5m/90°│ │
│ 轨道 │ Q ▓▓ │ ├ 效果 ─────────┤ │
│ ☑ Main │ M ▓▓▓▓ │ │ GE_Damage │ │
│ ☑ Effect │ │ │ └ Damage=120 │ │
│ ☑ Cue ├────────────────────────────────────────────┤ ├ 表现 ─────────┤ │
│ ☐ Motion │ GAS 影响 @0.30s │ │ Cue.Fire.Hit │ │
│ ☐ Rule │ Tags Ability.Fire · State.Casting │ └ ───────────────┘ │
│ │ GE 2 待施加 · Cue 1 · Targets 3 │ [定位] [复制] [删]│
├───────────┴──────────────────────────────────────────────┴───────────────────┤
│ ⚠ 2 警告 · 0 错误 ▸ GE_Damage 未设置 SetByCaller ▸ 时间轴末端溢出 0.20s │ 常驻校验条
└──────────────────────────────────────────────────────────────────────────────┘
| 区域 | 职责 |
|---|---|
| 工具条 | 资产名、播放控制、帧/时间切换、帧率、保存与导出、设置 |
| 左栏 | 视图切换 + 轨道列表(开关 / 静音 / 折叠 / 增删 / 排序)——属性不在这里 |
| 中央 | 时间轴画布(标尺 + 轨道 + 片段 + 光标 + Markers),主工作区 |
| GAS 影响条 | 随光标实时汇总"此刻生效的 Tag / 待施加 GE / Cue / 命中目标数" |
| 右栏 Inspector | 分层卡片:时间 / 目标 / 效果 / 表现 / 条件(不是平铺属性表) |
| 底栏 | 常驻校验结果,双击定位 |
| 预览 | 独立 Tab(不常驻),播放时自动弹出浮窗 |
3. 与 Able 的逐处对照¶
| 位置 | Able | UAK | 性质 |
|---|---|---|---|
| 模式 | Timeline + Blueprint Graph 双模式 | 时间轴 / 血缘 / 校验 三视图(无图模式) | 刻意不同 |
| 左栏 | Ability 属性 | 视图切换 + 轨道列表 | 刻意不同 |
| 右上 | 常驻预览视口 | 预览为独立 Tab,可关闭 | 刻意不同 |
| 右栏 | 平铺属性表 | Inspector 分层卡片 | 刻意不同 |
| 校验 | 弹窗(SAbilityValidatorResultsDlg) |
常驻底栏,边改边报 | 刻意不同 |
| 校验实现 | 外部 Validator 按 Task 类绑定 | Task 自带 Validate()(内聚,错误无法被配置出来) |
刻意不同 |
| 分支 | 时间轴里的 BranchTask |
独立 Rule 轨道 + GAS Tag/属性条件 | 刻意不同 |
| — | 无 | GAS 影响条(随光标实时计算) | UAK 独创 |
| — | 无 | 血缘视图(Explain,可下钻到属性数值) | UAK 独创 |
| — | 无 | 轨道级开关(整体静音"表现"轨道,只跑逻辑) | UAK 独创 |
| 轨道拖拽 / 缩放 / 吸附 / 播放 / 单帧步进 / 复制粘贴 | 有 | 有 | 通用交互(不受保护) |
| 动画长度对齐 | 一键按动画长度裁剪技能 | 拖入 Montage → 按 Notify/NotifyState 生成片段与 Marker | 通用思路,实现不同 |
| 运行时调试 | UMG 列表 + 世界 Billboard | 时间轴与 PIE 联动(光标跟随 + Trace 实时写入血缘视图) | 通用思路,形态不同 |
4. 血缘视图(Explain)¶
设计期:由各 Task 的 GetGASImpact() 静态汇总;运行时(PIE):由 UAKTrace 写入真实数据。
Fireball @ 0.30s
├─ [Query] CollisionQuery → 3 targets(扇形 5m / 90°)
│ └─ [Effect] ApplyGE(GE_Damage, Instant)
│ ├─ Attribute: Health -120 (SetByCaller: Damage=120)
│ ├─ Cue: GameplayCue.Fire.Hit
│ └─ Targets: A(-120) B(-120, 格挡 -60) C(miss)
└─ [Effect] ApplyGE(GE_Burn, Duration 3s)
├─ GrantedTags: State.Burning
└─ Periodic: 每 0.5s -10(共 6 跳)
价值:回答"这 120 点伤害是哪来的"——Able 只能告诉你"现在在跑哪个 Task"。
5. 交互约定¶
通用交互(业界通用,直接采用):拖拽移动片段 / 拖两端改时长 / Alt+拖拽复制 / Ctrl+滚轮缩放 /
空格播放暂停 / ,/.单帧步进 / Ctrl+C/V 复制粘贴 / 右键上下文菜单。
UAK 自己的交互:
| 交互 | 说明 |
|---|---|
| 轨道整体静音 | 左栏轨道勾选框,一键关掉"表现"类轨道做纯逻辑校验 |
| 从 Montage 生成 | 拖入 AnimMontage → 按 Notify/NotifyState 生成 Main 轨道片段与 Marker |
| GAS 影响条下钻 | 点击影响条上的条目 → 跳到血缘视图对应节点 |
| 校验双击定位 | 底栏条目双击 → 选中并滚动到对应片段 |
| PIE 联动 | PIE 中激活技能 → 编辑器时间轴光标跟随,血缘视图切换为实况 |
| 帧/秒切换 | 时间标尺可在 0.30s 与 18f 之间切换显示(工具条"按帧显示") |
| 从 Montage 生成 | 读取预览 Montage:按长度设置技能长度 → 放一个全长 PlayMontage 任务 → 把动画 Notify 转成命名时间点 |
工具条¶
回到起点 / 播放·暂停 / 上一帧 / 下一帧 · 按帧显示 ·
资产属性 / +标记 / 从 Montage 生成 · +轨道 / -轨道 / 上移 / 下移 · 复制任务 / 删除任务
- "资产属性"用于在 Inspector 里编辑资产本身(长度、Tags、Markers、中断顺序)—— 否则点空白处只会清空选中,资产级属性无处可改。
- "从 Montage 生成" 比 Able 的"按动画长度裁剪"多做一步:把 Notify 变成 Marker, 让后续编排能对齐到动画的关键帧。
快捷键¶
| 键 | 作用 |
|---|---|
空格 |
播放 / 暂停 |
← → |
单帧步进(按住 Ctrl 为十帧) |
Ctrl+D |
复制当前选中的任务(复制件紧接在原任务之后) |
Delete / Backspace |
删除当前选中的任务 |
滚轮 |
时间轴缩放 |
点轨道头色条 |
整轨静音 |
点轨道头名称 |
选中轨道,在 Inspector 改复合模式 |
6. 技术实现要点(M2)¶
FAssetEditorToolkit派生(FUEAbilityKitAssetEditor),Tab 管理用FWorkflowCentricApplication或简单FTabManager。- 时间轴画布自绘 Slate(
SWidget+OnPaint):标尺、网格、片段、光标、Markers。 - Inspector 复用
FPropertyEditorModule的DetailsView,通过自定义分类实现"分层卡片"。 - GAS 影响条与血缘视图共用
GetGASImpact()/UAKTrace的同一份数据(FAKGASImpact)。 - 校验底栏:聚合
Task::Validate()结果,改动后增量重算(不必全量)。 - 预览 Tab:独立预览场景(
FPreviewScene)+ 预览角色 + Montage 播放。
7. M2 拆解顺序¶
- 编辑器骨架与 Tab 布局 → 2. 时间轴画布自绘 → 3. Inspector 卡片 →
- GAS 影响条 → 5. 校验底栏 → 6. 预览 Tab → 7.(M4)血缘视图接
UAKTrace实况数据