Logo
FNF 为什么重写引擎:输入、架构与原生 Mod
Overview
FNF 为什么重写引擎:输入、架构与原生 Mod

FNF 为什么重写引擎:输入、架构与原生 Mod

fnf fnf
2026年7月1日
阅读时间:5 分钟
why-engine-overhaul

当 The Funkin’ Crew 宣布要暂停内容更新、从底层重写 Friday Night Funkin’ 时,很多玩家的第一反应都是不理解。旧版明明还能跑,为什么要花这么大力气去推倒重来?

这篇文章会从结构层面解释这次 FNF V-Slice 重写:旧项目为什么逐渐撑不住,输入链路是如何一步步演进的,以及官方为什么要建立自己的原生 Mod 体系。

面向读者:新玩家

最后核对时间:2026-07-01

核对版本:桌面版 v0.8.4(2026-03-26)与 Android v0.8.5 hotfix(2026-04-06)

1. Ludum Dare 原型基础已经不够用了

Friday Night Funkin’ 最初诞生于 2020 年 10 月的 Ludum Dare 47。对一个 jam 原型来说,先做出来最重要,但当项目持续变大之后,这套“快速搭起来”的基础就会逐渐暴露维护问题。

到 2022 年前后,官方已经明确表示,旧版代码越来越难以安全扩展。在 Tha V-Slice 里,他们就用过 “duct tape” 这种说法来形容旧引擎状态。

问题主要集中在两方面:

  • 资源和内存处理不够稳,大型自定义内容更容易把游戏推向卡顿或崩溃
  • 内容和核心代码耦合太深,想加歌、换素材、改 UI,往往都要直接动核心工程

如果 FNF 要继续往 PC、移动端以及长期商业化版本发展,就必须变得更模块化。V-Slice 的核心目标之一,就是把引擎逻辑和游戏内容拆开,让项目能继续扩展。

旧版紧耦合结构与 V-Slice 模块化结构对比

图 1 - 作者自制示意图,用来说明从强耦合结构转向更模块化的变化。

2. 输入系统不是一次性完成,而是分阶段演进

在节奏游戏里,输入体验的重要性几乎不需要解释。只要判定和按键响应有波动,玩家会立刻感觉出来。

旧版 FNF 依赖更早期的 HaxeFlixel 输入路径,玩家长期以来都在反馈密集谱面或性能波动下出现“吞键”之类的问题。

而官方在 V-Slice 时代对输入的改动,是分阶段完成的,不是一步到位。

从早期 V-Slice 到后续 SDL3 升级的输入演进图

图 2 - 作者自制时间线,依据官方发布说明整理。

第一阶段:v0.3.0 的 V-Slice 首发

2024 年 4 月上线的 V-Slice 首发版,并不是直接跳到 SDL3。它首先是在 SDL2 路线上做了大量重构,目的是尽量降低渲染波动对输入注册的影响。

第二阶段:v0.8.4 升级到 SDL3

v0.8.4(2026-03-26)中,官方桌面版从 SDL2 迁移到 SDL3。官方更新说明把这次变化描述为更灵敏、更精确的输入,同时也改善了控制器支持。

这意味着:即便同样都属于 V-Slice 时代,早期 v0.3.x 和后来的 v0.8.4+,在手感上依然可能存在明显差异。

3. 官方原生 Mod 体系是怎么建立起来的

在 V-Slice 之前,官方基础版本并没有成熟的原生 Mod 沙盒,这也是为什么大量创作者会转向 Kade、Psych 这些社区引擎。

V-Slice 之后,官方逐步明确了自己的 Mod 路线,核心是两样东西。

Polymod

Polymod 为官方版提供了一层沙盒式文件加载机制。和早期那种直接覆盖原始文件的方式不同,Mod 资源可以从 mods/ 目录中动态注入。

这样做的好处是:

  • 安装更安全
  • 出问题更容易撤回
  • 更适合随着官方版本长期演进

v0.3.2 开始,官方版还支持直接加载 ZIP 形式的 Mod,但前提仍然是 _polymod_meta.json 必须位于压缩包根目录。

Polymod 沙盒式加载示意图

图 3 - 作者自制概念图,用来说明 Polymod 的资源注入方式。

HScript

很多社区引擎习惯使用 Lua 做玩法脚本,而官方 V-Slice 体系使用的是 HScript。它更贴近 Haxe 本身,也更符合官方代码体系。

对玩家和创作者来说,这带来几个直接结论:

  • Psych / Kade 的 Mod 不能直接搬到官方版里用
  • 官方引擎 Mod 预期使用的是 Polymod 打包方式与 HScript 行为扩展
  • 官方路线追求的是“和官方引擎深度一致”,而不是“和所有社区引擎互通”

参考资料

官方来源

补充资料