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 行為擴充
  • 官方路線追求的是「和官方引擎深度一致」,而不是「和所有社群引擎互通」

參考資料

官方來源

補充資料