Files
template/docs/advanced/iii/index.md
T

9.2 KiB
Raw Blame History

高级 III 导览

高级 III 不提供新的玩法接口,它解决的是「改动应该落在哪里」。同一段逻辑写进插件、事件、寻路、录像或加载,代码都能运行,但会在读档、回放或换楼层时表现出完全不同的结果。本层把数据端的装配、依赖、收集、执行、通行与存储拆开讲,帮助你在动手前判断归属。

本页只做导航:说明这一层给谁读、与高级 I / II 的边界、七篇正文的分工与阅读顺序。具体机制不在这里展开,遇到系统细节时直接翻对应篇目。

高级 III 是给谁的

  • 能读懂项目里的类型签名,知道一个接口大致约束了哪些能力。
  • 手里有一个具体改动,需要先判断它属于装配、插件、事件、寻路、录像还是加载。
  • 正在排查存档、回放或加载不一致,想弄清数据是在哪一步丢掉的。
  • 接受固定顺序:对象构造、插件阶段、资源加载与读档各有自己的时间线,不能随意互换。

如果只是新增一个事件动作或调用一次寻路,高级 I / II 已经足够。本层适合在改机制之前查阅,也适合在排查「看起来能跑、换一个场景就坏」的问题时建立模型。

与高级 I、高级 II 的区别

层级 回答的问题 典型内容
高级 I 扩展机制怎么接进来 插件、可存档内容、录像一致性、移动器、钩子
高级 II 某个具体系统怎么改 寻路用法、自定义录像指令、点事件、装备系统
高级 III 为什么这样拆、数据怎么流、失败会落在哪一步 装配顺序、依赖图、收集与执行、通行与存储

三层是难度标签,不是领域分类。同一个功能可能同时涉及插件写法(I)、业务系统(II)与装配顺序(III);区别在于本层解释的是「为什么这个位置不能换」,而不是「这个接口怎么调」。

阅读时先做的三个判断

进入某一篇之前,先回答三个问题,能避免把页面当成接口清单来读:

  1. 这次改的是定义、进度、执行还是启动? 定义落在仓库,进度落在可存档状态,执行落在系统层,启动落在加载与插件阶段。判断错层,代码往往能跑,但读档或换楼层时才暴露。
  2. 对象由谁持有、谁负责创建? 同一个能力挂在主对象、插件还是事件环境上,生命周期完全不同。先确认持有者,再看它什么时候被构造。
  3. 失败会出现在哪一步? 构造期是 undefined,加载期是配置为空,读档期是 key 缺失,运行期是状态不一致。页面里的「边界」一节通常就是按这个顺序组织的。

这三个判断不替代系统细节;它们只是帮助你在七篇正文里找到正确的入口。

前置

建议先读完高级 I 导览与高级 II 导览。以下四篇会被反复引用:

CoreState 是本层多数页面的隐性前置:事件、录像与寻路都建立在四层已经装配完成这一前提上。没有这个前提,后面的「收集」「构图」「播放」都会变成孤立的接口说明。

七篇地图

篇目 它回答的问题 什么时候读
CoreState 组装与初始化 四层为什么这样分、构造顺序与入口各自负责什么 新增子系统、排查装配顺序或对象缺失时
插件内部机制 插件表怎么变成确定顺序、状态怎么推进、依赖写错会怎样 插件没有执行、阶段顺序不对或要声明依赖时
事件系统 坐标如何变成候选事件、触发器在哪一步过滤、返回值怎么折叠 事件不触发、收集顺序不对或要新增内建函数时
通行性谓词与寻路原理 一个谓词如何同时服务移动与构图、三种移动结果从哪来 改通行规则、排查「寻路能走但勇士不能走」时
录像系统底层 输入如何被记录、二进制录像如何布局、播放如何消费读取流 新增录像行为、排查回放不一致或读取流过期时
加载系统 资源如何分批加载、阶段之间允许追加什么、配置怎么读取 扩展加载内容、排查加载时机或进度问题时
高级 III 导览 本层给谁读、各页负责什么、遇到问题先翻哪里 第一次进入本层,或需要确认阅读顺序时

表的顺序就是原理线的顺序:先建立对象图与生命周期,再进入插件、事件、通行、录像,最后才是加载。加载放在最后,不是因为不重要,而是它依赖前面几层已经能独立解释。

阅读路径

  • 原理线:CoreState → 插件内部机制 → 事件系统 → 通行与寻路 → 录像 → 加载。适合一次把数据端的结构与主数据流打通。
  • 按需线:先读 CoreState,建立分层与装配顺序,再跳到当前问题对应的页面。除 CoreState 外,各页可以独立阅读,但都需要假设「四层已装配完成」。
  • 排查线:回放不一致先看录像,再看 CoreState 的装配前提;事件不触发先看事件系统的收集与执行;寻路结果与实际移动不符先看通行页的谓词与默认实现;加载时机不对直接看加载系统。

怎么使用这一层

  • 先读模型,再看接口:每页开头的角色表与流程图是整页的骨架;先知道谁负责什么,再去看方法名,才不会把「某个类有哪些成员」当成设计。
  • 示例按任务读:示例通常展示一个完整链路,而不是单个方法。读的时候先看它解决什么问题,再看它把哪几步串起来,最后看它在哪里接入现有系统。
  • 边界当排查入口:每页末尾的「边界与注意」列的是真实失败模式。遇到「能跑但结果不对」时,先从边界里找对应现象,再回到正文确认模型。
  • 跨页概念先查归属:同一个词在不同页面可能有不同职责;不确定某段逻辑该由谁解释时,先看「跨页约定」表,避免在错误页面里找实现。

本层不要求你记住所有接口;它要求你在改动前能说出「这个对象属于哪一层、谁创建它、失败会在哪一步出现」。具体签名回到类型声明或高级 I / II 的对应页面。

跨页约定

概念 归属页 其它页只做什么
四层职责、构造顺序、入口、插件装配 CoreState 默认读者已经拿到装配完成的实例
dataDeps、拓扑序、状态机与三阶段 插件内部机制 只引用「依赖先完成同一阶段」
事件仓库、触发器、收集顺序、执行器、内建函数 事件系统 只说明事件对象如何被脚本执行
通行谓词、默认实现、构图、搜索、系统层 通行与寻路 只说明三种移动结果对应哪些触发器
录像步、IReplayArray、指令、沙箱、读取流 录像 只说明回放会重新走同一套游戏逻辑
加载任务、阶段、配置、自定义内容、进度 加载系统 只说明加载器在启动流程中的位置
可存档对象形状、执行器与压缩 高级 I 本层只在装配或读档边界处引用

统一术语:装配指构造期建对象,加载指资源加载,读档指从存档恢复状态。三者不是同一件事;本层把「构造」与「加载」严格分开,避免把 new CoreState 当成数据已经可读。

本层不覆盖什么

  • 渲染端的结构、动画与输入处理;这里只讲数据端。
  • 编辑器、内容配置格式与资源制作流程。
  • 完整 API 签名清单;接口只在解释机制时出现。
  • legacy 引擎的接口细节;旧实现只作为对比基线,不逐项复述。
  • 高级 I / II 已经讲过的插件写法、存档实现、寻路用法与录像指令注册步骤。

返回高级 III 导览。