瀚文微派传记

沈瀚文(ShenHanWen / SHW2002)· 2024—2026 年工作与成长回顾

瀚文微派传记首图:梦幻岛、躲猫猫与小岛的项目画面

沈瀚文在微派的这段经历,可以从一个钓鱼玩法的UI界面讲起。那时关心的是标题固定、列表滚动,后来工作记录里逐渐出现了跨端迁移、动画同步和代码生成。把这些记录连起来,会看到职责一点点变宽:先把手里的功能做完,再让它经得起完整流程,随后开始为下一次开发、为接手的同事准备可以复用的东西。

2024 年,他在实习与毕业的交接中走进商业游戏开发。计算机和游戏原本就是兴趣,真正进入团队后,兴趣有了具体的承载:正在运营的版本、等待接入的资源、需要一起确认的需求,还有上线之后玩家的反馈。梦幻岛、躲猫猫和《小岛有晴天》各自留下了一段不同的经历,而贯穿其中的,是他逐渐学会把眼前的问题处理得更完整,也把解决办法留下来。

2024—2025 梦幻岛

1 2024—2025 年 · 梦幻岛:在成熟项目中建立业务基础

梦幻岛是这段故事的重要起点。项目已经运行着丰富的玩法,也有长期积累的规则,新加入的开发者需要一边做事,一边读懂它。沈瀚文从界面、交互与表现问题入手,逐渐参与钓鱼养成、渔具和载具等成组功能。年度总结里,他特别记下梦幻岛 2.6 在 WePlay 华语服上线:这是他第一次参与研发并跟着走完上线流程,玩家对新玩法的热情让这份工作有了直接的回应。第一次完整交付带来的认识,也具体到了每一个入口:按钮点下去之后,服务器数据、界面和角色状态需要一起接得住。

1.1 钓鱼与载具:从首次上线到状态分工

  • 走完第一次上线: 参与梦幻岛 2.6 钓鱼相关研发,随团队完成华语服上线,开始积累从需求到发布的完整经验。

  • 把角色状态分清楚: 将“已在载具中”与“正在驾驶”拆开,为乘客活动、驾驶和离船建立各自的行为边界。

    • 以 isInVehicle 与 isDriving 分别表达登船和驾驶;进入驾驶必须已经在船上,离船时同步退出驾驶。
    • 镜头与移动模块订阅对应状态变化,使乘客活动和驾驶行为沿各自接口接入。

这段积累有许多很朴素的现场。开发鱼篓界面时,他向 UI 设计同事逐项核对跳转、固定区域、滚动和尺寸规则,双方参照已有界面把交互说清楚,再用实际效果完成确认,得到设计同事的认可。到了载具,同样的辨别逐渐落实为状态接口和模块分工。回看这一阶段,进步就藏在这些具体区分中:先问清一个界面应当怎样使用,再辨明多个玩法怎样共享同一个角色。

1.2 GM 工具重构:让调试命令能够扩展,也容易找到

随着钓鱼和载具持续扩展,团队的调试命令也日益丰富。开发与测试需要按业务快速定位入口,常用操作也适合拥有自己的固定位置。沈瀚文将这些使用需求整理成了新版 GM 工具。它服务于团队每天的调试、复现和验证,把散落在不同功能中的操作组织起来;工具的使用范围也随着协作展开,从开发者延伸到了其他岗位。

梦幻岛 GM 分类与收藏面板
梦幻岛 · GM 分类与收藏面板节选

  • 让命令有地方可放: 支持运行时注册分类与命令,业务扩展沿用同一套面板展示和执行流程。

    • 将命令管理从 NLGMPanel 抽到 NLGMTool,把名称、分类与执行函数组织为可注册的数据。
    • 面板统一生成列表,执行结果与错误统一记录,业务模块沿相同方式增加分类和命令。
  • 让常用操作随手可得: 增加跨次启动保留的收藏夹,测试同事确认查找和说明入口更方便,并提出在小岛沿用类似改进。

    • 以命令名称键保存收藏,在下次启动时恢复,并补齐重复收藏拦截与删除后的存储清理。
    • 通过开发组试用和测试用法说明完善交接,收藏与分类进入团队日常调试。

从命令组织、面板接入到收藏保存,沈瀚文把这套工具做成了可以交给同事使用的完整产出,再通过开发组试用、用法说明和反馈继续完善。它也是早期一次清楚的交付练习:自己提出并实现的改进,需要在别人的工作中同样可用。分类与收藏进入日常调试后,开发者增加命令有了共同入口,其他岗位也更容易找到所需操作,工具的价值由此得到实际确认。

1.3 Unity Autorun 初版:把重复进出游戏的步骤交给工具

每次进入游戏,都要经过一段熟悉的准备流程:运行编辑器、等待场景加载,再依次连接服务和进入游戏。这些步骤稳定而重复,也为自动化提供了清楚的入口。Autorun 就从这里开始,让预设接手固定操作,开发者可以利用加载时间安排其他工作,再回到需要验证的内容。这个小工具将一次次日常操作积累成了可复用的流程。

  • 让重复的点击自动完成: 原先进入梦幻岛约需 30 秒等待与手动操作,预设接管了其中的点击流程。

    • 预设记录按钮名称或文字、UI 类型和等待时间,运行后按顺序执行,并支持结束运行前的退出步骤。
  • 从一个工程用到三个: 留存配置覆盖梦幻岛、商城和躲猫猫 3 个项目,包含实际的进入与退出步骤。

    • 按项目保存配置,通过图形界面完成设置;围绕同事使用中的困惑补充教程,空预设时禁用运行入口。

交给同事后,他主动了解大家使用中的困惑,围绕重新拉取工程后的配置步骤更新教程,说明图形界面的使用方式。随着试用交流,工具的配置、说明与操作引导逐步完善,也更便于同事在自己的工程中使用。这个小小的自动入口后来跨过项目边界,在小岛继续演进成导航图;当时留下的配置、文档和试用反馈,都是这条线索的开头。

1.4 梦幻岛钓鱼与载具迁移:走向完整交付

当钓鱼和载具需要从华语服迁移到会玩,工作范围也跟着走出了熟悉的工程。原生客户端能力是否齐全、后台接口是否接通、会玩独有的飞行和其他玩法会不会与登船冲突,都需要重新确认。沈瀚文开始整理调用关系、提测范围和剩余工作,再与团队协调优先级、支援与回归。此前更关注一个功能怎样实现,这次经历让他看到了一个版本怎样在多个岗位之间被接力送到线上。

  • 83 项检查,全部过关: 梦幻岛 2.7 载具部分的当轮冒烟测试共 83 条用例,83 条通过,通过率 100%,由测试同事在项目群确认。

    • 梳理 Unity 调用原生客户端与后台的接口,将道具预览、好友、奖励和图片加载追到具体调用方法与地址。
    • 围绕载具的房间关系与本地坐标,补充飞行、切房、登船和婚礼岛边界的验证重点。
  • 让红点少跑一趟: 纪念册奖励红点的前置刷新路径,对 CollectOverview 的主动请求由 每次 1 次变为 0 次,复用已有数据推送。

    • 确认纪念册数据已有推送,再移除红点判定前的重复请求;赛季点击记录归业务模块管理,通用层维护节点与显示条件。
    • 将获取、兑换、使用与赠送后的刷新纳入验证范围,一并交付优化和检查要求。

迁移中的准备,把接口、玩法与验证联系到了一起。那些在旧环境里积累的业务认识,开始变成他在新环境里主动说明的检查重点;他也在相关版本中积极开展 Code Review,将个人实现带到共同检查的过程中。随后,提测、回归与上线沿着明确的重点推进。这段经历让他从参与功能研发,逐步走向组织自己负责部分的交付,技术判断也成为团队能够执行的安排。

红点优化同样延续了这种完整交付的思路。业务规则与公共能力各有归属,后续使用有了更清楚的接口;请求减少的同时,相关操作后的刷新也获得了明确的验证范围。一次优化因此同时包含实现与检查要求,协作的人能够知道变化发生在哪里、接下来需要关注什么。这些做法逐渐成为他继续维护已有功能时的工作习惯。

  • 让新载具沿共同流程接入: 将资源配置、类型规则和退出流程分别组织,配套编辑器与制作说明。

    • 位置、动作与镜头通过配置适配资源,摩托艇落座等规则由对应载具类型实现。
    • 通过 ExitContext 与 prepareExitVehicle 衔接站起、退出驾驶和离船,将相关流程交付到文档与教学中。

载具的继续扩展,又把这些经验带到了资源制作一侧。编辑器、文档与集中讲解将代码中的约定交到美术手中,模型、动作和镜头的准备能够沿着共同流程推进。到这一阶段结束,留下来的已经包括后续载具能够接入的接口,以及使用者可以照着完成的制作说明。开发工作开始同时关注功能怎样运行,以及其他岗位怎样接着把内容做出来。

1.5 日志治理:从高频输出中找出可消除的开销

完成业务之后,他的目光也开始落到游戏怎样运行。日常调试积累的日志,为观察运行过程提供了线索;进一步按用途和频率梳理这些信息,也成为一项明确的优化方向。他从进入游戏开始采样,按输出次数寻找高频来源,在开发周会上说明保留网络、资源等关键信息的取舍,再推动相关修改优先发布。性能优化在这里有了一个明确的起点:先把正在发生的事情看清楚。

  • 让九百余条重复日志安静下来: 一次从进入梦幻岛持续至帧率稳定后 5 秒的采样中,单一日志输出 900 余条;他记录移除后流畅度明显改善。

    • 按打印次数定位高频来源,保留网络和资源等关键诊断信息,并推动相关修改优先发布。
    • 为红点工具增加默认关闭的调试开关,补充日志标签,继续整理公共加载、网络和角色相关输出。

日志治理也延伸到了日常维护:平时按需要控制输出,排查时保留可以开启的诊断入口,用途与频率都有了明确的安排。梦幻岛时期的几条工作线至此开始汇合,业务实现、工具整理和运行观察共同服务于正在使用的系统。沈瀚文也逐渐习惯在功能完成之后继续看一眼它的运行方式,把可以复用的维护办法留给下一轮开发。

2024 年末至 2025 年初 躲猫猫

2 2024 年底至 2025 年初 · 躲猫猫:深入实时玩法与多人同步

在梦幻岛持续迭代的同时,沈瀚文也加入了躲猫猫。项目从青鬼的基础上发展而来,已有资源能够复用,玩法规则却需要重新组织。这段经历把他的注意力更集中地带到角色身上:移动、碰撞、镜头和动画要在一次操作中配合,本地玩家按下按钮之后,其他客户端还要看见相应的结果。熟悉旧代码与建立新规则同时发生,对边界的判断也开始进入实时玩法的核心。

2.1 实时玩法:把流程与角色行为接入新规则

躲猫猫反击轨迹的场景调试画面
躲猫猫 · 反击轨迹开发调试画面

  • 完成主流程与抓捕行为的适配: 参与阶段流程、抓捕者 AI 和反击技能,将移动发现、追击、冻结及真人与 AI 的控制切换接入新规则。

    • AI 记录附近幸存玩家的位置,以移动触发追击,再按时限返回巡逻;冻结、眩晕与真人控制状态统一约束其行为。
    • 保留既有位置同步,把反击的腾空与回落放到模型表现层;本地校验蓄力,远端按释放消息播放,并衔接提前碰撞的收尾。
  • 一次大规模测试的零 Bug 答卷: 据策划同事复盘,最后一次大规模测试发现 0 个 Bug;测试同事的版本同步也确认 1.0 版本测试完成、质量稳定。

这些拆分将玩法规则落实到了角色行为里,也让本地输入、远端表现与控制权交接各有职责。开发时,他需要理解现有框架提供了什么,再为新的规则选择合适的实现位置;联调时,则与服务器核对消息和状态之间的关系。移动、表现和输入的分工由此逐步清楚,既有工程也能够继续承接新的实时玩法。

这些工作由他与导师、另一位客户端开发同事共同推进,阶段测试中的稳定表现也得到了策划和测试的肯定。对于仍在积累完整项目经验的沈瀚文,这是一次很具体的确认:继承的框架有约束,仍然可以通过明确分工把新玩法交出去。后来在小岛区分本地决策与远端表现时,能看见这里留下的经验;项目换了,曾经认真分辨过的问题却继续派上了用场。

2.2 Lua 类型注解工具:从跨语言开发需求走向上游合并

几个项目之间,还有一条工具线索始终没有断。梦幻岛与躲猫猫都使用 Lua 和 C#,跨语言调用时能否得到可靠提示,是写业务时每天都会遇到的问题。沈瀚文最初向导师请教怎样让编辑器识别注解,后来开始修改类型信息生成,继而把实际遇到的需求整理进已有开源生成器。这个过程里,他与工具的关系也在变化:从配置使用者,逐步成为能够修复和扩展它的贡献者。

EmmyLua 注解生成工具 GitHub 仓库与 README 截图节选
EmmyLua 注解生成工具 · GitHub 仓库与 README 节选 · 2026-09-22

  • 从项目补丁走进上游: 泛型推断、类型别名、函数兼容等 6 类新增能力随 PR #2 被上游合并,项目内的适配进入原工具的公开版本。

    • 细化常见泛型继承的类型信息,使 Singleton<T>.Instance 等成员获得有效提示;用联合类型表达 C# 委托与 Lua 函数的兼容关系。
    • 支持拆分注解文件、保存生成选项,补齐语言服务目录与兼容配置说明,使工具能在实际工程中反复使用。

改进围绕项目里真实出现的跨语言调用展开,配置说明也随着工程使用逐步补齐。仓库先分享给同事试用,再将改动提交上游,让代码生成、编辑器配置与公开维护连接起来。对这段经历而言,合并记录是清楚的成果,而更长久的变化是:一次为当前工程解决的问题,经过整理,已经能够被其他开发者继续使用,也让他积累了参与开源协作的经验。

2025—2026 小岛有晴天

3 2025 年下半年至 2026 年 · 小岛有晴天:从角色操控走向同步架构

来到《小岛有晴天》,沈瀚文迎来了职责上的一次明显变化。年度复盘里,他将这里记作第一次从零开始完整负责一个游戏模块的经历:在项目既有框架上推进 3C 的方案、实现与持续迭代,逐步把角色、相机和操控组织成可供后续玩法使用的基础。需求有时以参考视频开始,他便分析操作关系,做出试玩版与策划对齐,再继续安排同步、配置和资源接入。此前项目中积累的经验,在这里形成了由他持续负责的一段完整工作。

3.1 首次完整负责 3C:从方案探索到持续交付

  • 承担核心模块的完整周期: 从参考内容分析、试玩验证到方案实现与后续迭代,持续负责小岛 3C 的建设。

    • 先形成可体验的版本,与策划核对操作和表现,再把确认后的规则落实到角色控制与动画方案中。
    • 在新增内容中继续调整接口与配置,使同一模块能够承接后续个人动作和复杂交互。
  • 让远端重现播放结果: 通过 StateNameHash、连续参数和 NextState 组织状态透传,配套生成 ClipOnly 控制器,形成后续个人动作可复用的同步方案。

    • 本地决定行为,远端依据状态信息播放;从同一份源状态机生成 ClipOnly 控制器,保留必要的自动退出。
    • 通过 NextState 提前融合,按动画层收集请求、延后一帧读取状态,并结合播放时间识别重播。

ClipOnly 控制器生成工具 GitHub 仓库截图节选
ClipOnly 控制器生成工具 · GitHub README 节选 · 2026-09-22

  • 把方案写成技术产出: 整理《在Unity-Mecanim中实现透传状态的动作同步》,一并提供适用范围与配套工具。

    • 将小规模社交场景的适用范围、方案演进与配套生成工具一并整理,供后续开发查阅和复用。

动作同步成为这次完整负责中的一项代表产出。方案服务于小规模社交场景,后续个人动作沿用同一机制,资源变更后也有对应的生成流程;他又将实现和适用范围整理为文章。由自己分析和实现的方案,在后续内容中继续发挥作用,也逐渐建立起他对核心模块的把握:能够作出技术选择,完成交付,再根据真实使用继续维护。

3.2 导表工具与工程约定:把经验写进生成规则

承担核心模块以后,一些看似外围的工作也变得值得提前整理。配置越多,手写 ID、复制生成脚本和处理命名冲突的成本就越容易积累。梦幻岛时期,他已经习惯为反复使用的操作做工具;到了小岛,这种习惯进入了配置与代码的连接处。一次修表可以让当前版本继续走,生成规则则能让下一张表也有办法接进来。

  • 八套输出逻辑,一个维护入口: 将 8 份重复的 C# 文件输出流程收敛为 1 套公共实现,供 6 类生成器调用,随后扩展到 NPC,共覆盖 7 类生成器。

    • 在 Luban 后扩展 ItemId 常量生成,统一系统、名称与 ID 的引用方式;生成时校验枚举,对重名附加 ID 并提示。
    • UGFIdGeneratorBase 集中处理参数检查、代码结构、注释和文件输出,统一发现与执行生成器,各表保留读取和命名规则。
    • 内容未变时跳过写入,公共命名步骤集中复用,NPC 等新类型可沿同一流程接入。

这项产出的成长意义,也在于他开始把个人维护经验固化为项目规则。配置引用通过生成的名称统一起来,枚举与重名在生成阶段检查,公共输出由同一处维护,开发者沿着共同入口完成更新。规范因此有了可以执行的载体,后续类型也能直接沿用。梦幻岛时期形成的工具习惯,在这里进一步走向工程建设:把一次开发中整理出的办法,变成团队下一次开发时已经具备的条件。

3.3 从功能完成到质量交付:把实现、自测与交接串起来

个人动作的交付,让此前的架构建设与工作方法得到了一次集中检验。沈瀚文完成播放、同步和配置接入后,继续跑冒烟用例,在提测说明中标注各部分的完成情况、资源安排与验证结果,并同步后续接入节点。模块负责人的工作范围由此覆盖方案实现、自测、联调和提测交接;负责人和测试能够依据这些信息安排下一步,策划也能沿已有配置继续补充内容。

动画元数据代码生成工具 GitHub 仓库及代码示例截图节选
动画元数据生成工具 · GitHub README 与生成示例 · 2026-09-22

  • 让资源和代码一起更新: 动画元数据工具从状态机生成层、参数与状态定义,与 ClipOnly 控制器生成配合,失效引用可以在编译阶段暴露,资源关联也得到保留。

    • 生成状态机层、参数与状态的枚举和常量,处理特殊字符、关键字及重复标识。
    • 代码定义与远端控制器随源资源重新生成,配套工具随动作同步文章公开。
  • 让新动作沿配置接入: 现有流程覆盖的动作可由策划在资源就绪后配置生效,程序集中维护播放与同步规则。

    • 用 AnimatorOverrideController 替换固定状态结构中的片段,将冻结、打断、融合和层重定向交给配置。
    • 不同驱动器实现统一业务接口,本地设置参数、远端切换状态,生命周期由 Entity 管理。
  • 让质量跟上扩展: 据当时阶段汇报,个人动作测试用例已过 90% 时,累计 Bug 不足 10 个;小岛 0.7 新增工具排除缺配置问题后,功能冒烟通过率为 100%,得到测试同事点名表扬。

    • 分别组织手持、落点预览和放置后的实体,写清资源职责、配置关系与验收要求。
    • 提测前自测,并明确交接已完成的功能和待补资源,使策划、美术与测试能够按同一份说明继续推进。

这些质量反馈,记录了他从完成分配任务到对交付过程负责的变化。阶段自测、明确的资源交接和后续问题跟进,使个人负责的模块有了完整的收尾;较少的阶段缺陷和测试同事的肯定,则给这套做法带回了实际回应。动画工具与制作说明随后继续被使用,完成一轮版本也为下一轮留下了条件。独立负责的经验,就在这样的实现、验证和交接中逐渐积累起来。

3.4 制作流程规范:把技术实现交成团队能用的管线

从梦幻岛的载具编辑器到小岛的 Timeline,沈瀚文逐渐把工具实现和使用交付放到一起考虑。新版 Timeline 的工作中,他完成绑定数据的保存与运行时恢复,再将制作、保存、重新加载和验收写成完整说明。代码提供能力,文档则把操作顺序与交接要求讲清楚,策划、美术和程序可以据此推进各自的部分。技术经验由此开始成为团队能够反复执行的流程。

  • 完成绑定工具与制作说明的交付: 负责轨道绑定信息的保存、运行时引用恢复与配套文档,将资源制作和程序接入串成完整过程。

    • 保存轨道目标的层级路径、对象与组件类型,运行时恢复引用,并复用场景对象索引。
    • 区分引用场景对象与仅使用预制体内部对象的情况,说明何时保存绑定、调整资源后怎样重新保存和加载。
  • 把验收要求写进制作流程: 将关键操作、资源交接与运行结果放到同一份说明中,形成可以查阅和执行的制作约定。

    • 明确镜头结束后归还控制权等验收要求,让制作人员知道完成效果之后还需要检查什么。
    • 在工具配置文档中说明手持、预览和放置实体各自的职责,并给出配置关系与最小验收项。

这段经历记录了一种职责上的延伸。早期他需要向同事确认界面与资源规则,后来开始由他解释一套工具怎样使用、制作完成后怎样交付。载具阶段的文档与集中讲解,在小岛发展为更完整的操作和验收说明。他留下的成果也因此包含代码之外的部分:其他岗位可以照着推进工作的步骤,以及遇到具体情形时能够回头查阅的依据。

3.5 图鉴三维展示与新人协作:从负责模块到支持共同交付

图鉴带来的考验,是让已经存在的角色和作物换一种方式被看见。人物与巨大化作物组合后,尺寸、姿势和加载顺序都影响展示效果;一次角色被意外缩得很小的问题,又把排查带进了蒙皮与骨骼的细节。沈瀚文沿用团队已有的场景实体,承担这部分较集中的技术工作,图鉴主体则由新人继续推进。这样的分工,也标记着他开始一边完成关键模块,一边为别人的开发提供支持。

小岛图鉴中的角色与作物模型展示
小岛有晴天 · 图鉴三维展示画面节选

  • 让组合模型适应展示空间: 统一处理服装与手持物就绪后的姿态、包围盒测量和缩放,形成可以应对不同资源组合的适配方式。

    • 等待服装与手持物就绪、蒙皮更新和动画姿势稳定后,测量当前世界包围盒。
    • 排除隐藏部件与粒子,按目标空间最受限制的轴统一缩放,适配人物与巨大化作物等组合。
  • 从一个展台走向更多玩法: 为图鉴排行榜抽出的展示动画驱动,经同事扩展后继续用于 2 类后续业务——祈愿特权预览与团队活动排行。

    • AnimDriverScenePlayer 复用片段加载、缓存与覆盖,展示姿势与真实玩家控制各有实现边界。
    • 将“取真实衣服”和“按槽位加载模型”拆开,支持同事继续扩展祈愿试穿与其他展示业务。
  • 把开发经验交给新人使用: 在完成自己负责的展示模块时,参与图鉴的代码审查、协议接入指导和提测准备。

    • 向新人说明沿用生成的 PB 数据结构、生成后编译检查再提交的接入步骤,形成一致的数据使用约定。
    • 完成图鉴内页 Code Review,将检查意见同步给协作同事,并指导界面状态组织与资源依赖的提前沟通。
    • 与新人确认配置、自测及联调进度,将代码审查和冒烟验证纳入提测准备。

图鉴阶段,他承担的责任进一步延伸到了共同交付。新人推进主体业务,他负责三维展示并参与需求核对、开发支持和代码审查;负责人也根据他的进度,请他继续关注新人的工作。从早期向导师请教,到能够向新人说明接口与接入步骤,角色的变化发生在这些具体协作中。他开始把自己的判断过程讲给别人听,也把代码检查、配置准备和提测安排放到团队共同的进度里。

3.6 项目自测工具:从启动预设到离线 UI 导航

一路写到小岛,梦幻岛时期那个自动点击工具又回到了故事里。最初只想少守着几次加载,后来工程和界面不断增多,到达某个测试入口本身也成了一段重复劳动。Autorun 于是从顺序预设发展成 UI 导航图:先把路径准备好,再把它交给下一次自测。早期形成的工具习惯,在新的项目里找到了更大的使用范围。

Unity Autorun MCP GitHub 仓库名称与公开程序界面截图
Unity Autorun MCP · 仓库公开的程序界面节选 · 2026-09-22

  • 把走过的路留给下一次自测: 项目已有 54 条配置路由,编辑器按钮与命令行能够复用已准备的路径。

    • 将到达目标界面的路径预先生成和检查,由编辑器或命令行执行,并提供任务状态查询。
  • 让日常导航独立执行: 已生成导航图的离线执行阶段需要 0 次 AI 推理调用;AI 参与前期生成和后续更新。

    • 通过本地 HTTP Bridge 与独立 MCP Server 提供外部操作入口,将路径准备与重复执行分开。
    • 向团队与技术社区提供安装和离线导航说明,沿实际自测反馈继续维护。

从自己使用,到同事安装,再到公开维护,Autorun 一直跟着实际工作往前走。路径准备与重复执行的分工,让熟悉的自测入口可以反复使用,安装和操作说明则帮助更多人接上这套流程。早期的自动化需求由此发展出持续迭代的工具,也把几个项目之间的经历连成了一条线:同一个习惯,在不同阶段逐渐承担起更广的作用。

3.7 复杂移动与双人交互:协调传输、姿态与执行时序

当玩法发展到绳索移动、牵手和亲密动作,角色系统需要同时照顾的事情更多了。一个人转身,另一个人的位置、手部与动画都要跟上;旁观者接收到的数据又有自己的节奏。此前分别积累的动画驱动、状态边界、资源生命周期和网络同步,在这里汇到同一个体验中。沈瀚文的工作也进入了更细的层次:把卡顿、错位和关节抽动拆开,分别找到影响它们的环节,再让这些处理共同服务于连贯的动作。

  • 给绳索同步放慢节拍: 快照最短发送间隔从 50 毫秒增至 100 毫秒,设计频率由 20 Hz 降至 10 Hz,减少 50%,接收侧继续用插值与短时外推维护表现。

    • 将特殊玩法的快照调度接回角色共用间隔,由接收端继续承担连续表现,使发送节奏与视觉处理分别维护。

小岛中发送方与接收方的双人牵手画面
小岛有晴天 · 双人交互开发画面

绳索移动中的取舍,随后延伸到了两个人之间。牵手既要让双方共享稳定的位置与姿态,也要为不同动作保留可以调整的空间。沈瀚文将问题分成共同接触点、转向跟随和关节姿态几个部分,分别明确计算方式与更新顺序,再把它们接到同一套交互流程中。这使体验中的调整能够对应到具体机制,也让新资源沿着已有规则继续适配。

  • 三个问题,当天收尾: 据他向负责人的进度同步,初版体验后测试同事当轮测出 3 个 Bug,这些问题与冒烟发现的问题均在 当天完成修复。

  • 让一对动作共同开始和结束: 每台客户端先准备双方资源,再在本机同一帧应用两人的位置与动作,按关系标识、序号和阶段处理消息与清理。

    • 将资源等待与正式播放计时分开,按关系标识、序号和阶段检查消息,处理过期数据。
    • 位置恢复、关联解除与 Timeline 清理沿共同阶段执行,让进入和退出使用同一套管理方式。
  • 让握点与关节共同适配动作: 由发起方组织跟随与 IK 目标,并为肩、肘、腕建立独立约束和平滑。

    • 保留一次交互中的参考姿态,在发起方局部坐标中平滑共同接触点,再施加可达约束与资源偏移。
    • 分开调整转向滞后、角速度限制与跟随速度,保持正常移动的节奏。
    • 上臂参照角色、肘腕参照父骨,分别限制偏航、俯仰和横滚,并缓存最终受约束的旋转作为后续平滑基准。

初版交付之后,体验继续推动实现向前。资源准备、动作执行和退出清理被组织到共同阶段,关节约束与平滑也在后续调整中逐步明确。相关处理随后在沟通与需求关闭记录中得到回应。到这里,握点可达、关节合理和退出完整已经有了各自承担的机制,后续协作可以沿着这些边界确认需求、调整表现,并继续完善双人交互。

  • 平滑留在本地,发包按需减频: 牵手位姿的周期发送配置由 30 毫秒改为 100 毫秒,名义频率从约 33.3 Hz 降至 10 Hz,降低 70%;手部 IK 目标由 30 毫秒改为 200 毫秒,名义频率降至 5 Hz,降低 85%。

    • 双方位姿进入带采样时间的共同快照,被牵方与旁观者沿同一时间轴插值;短时缺包限时外推,传送或长时间中断则重建基准。
    • 由发起方每帧统一计算和平滑动画速度,使用不同起停阈值,并独立配置位姿、动画与 IK 的发送间隔。
    • 非本地服自测记录了平滑体感改善,对应直线移动卡顿事项随后关闭。

这个阶段的成果,能够同时从体验反馈、具体实现和发送配置中找到依据。位置、关节与动画参数分别平滑,网络节奏也可以独立调整,几种机制共同服务于连续的双人表现。沈瀚文处理问题的方法由此从单点修正,走向对计算、传输和播放之间关系的整体安排。此前在角色系统中积累的经验,也在这项复杂交互里形成了更完整的配合。

尾记:把一次交付变成下一次的起点

回看这几段经历,沈瀚文的成长有着清楚的脉络。梦幻岛让他熟悉商业游戏的开发与协作,在钓鱼、载具和工具建设中积累完整交付的经验;躲猫猫把他的注意力带向实时玩法与多人同步;到了小岛,这些经验汇入由他持续负责的 3C 模块。从理解已有系统,到选择技术方案,再到承担实现、自测与后续迭代,他逐渐能够把一个模块的工作完整接住,也能为下一批内容留下可继续使用的基础。

交付质量与团队协作,让这些技术积累有了更具体的回应。阶段测试中的稳定表现、同事对工具的认可、代码在后续业务中的复用,以及开源改进被上游接纳,都留下了可以回看的成果。与此同时,他开始把制作经验写成文档,把命名和校验落实到生成规则,参与代码审查与新人支持。自己掌握的方法因此能够被更多人理解和使用,个人负责的范围也逐步延伸到共同交付的过程。

SHW2002 的 GitHub 主页截图节选
HanWen / SHW2002 · GitHub 主页 · 2026-09-22

这份回顾暂时停在这里,项目中的探索仍在继续。过去几年的产出,已经成为他面对新需求时能够调用的经验:把规则弄清楚,将方案做出来,验证它的效果,再把方法交到下一位使用者手中。一次功能完成,留下代码;一次认真交付,留下质量与信任;持续整理这些经历,又让下一次工作拥有更好的起点。这也是“把世界一点点做出来”在这段职业经历中的含义。

数据来源: 本文依据梦幻岛、躲猫猫与小岛项目的 Git 提交、本人技术文档和年度复盘、飞书文字聊天及需求记录,并参考 SHW2002 的 GitHub 公开贡献编写,取材截至 2026 年 9 月 21 日。关键数据来自对应阶段的测试反馈、采样记录和代码配置。