「但在我自己電腦上可以跑啊」遊戲內測抓出了怎樣的BUG

作爲非科班出生、無完整軟件工程經驗、第一次做遊戲的單人開發者,我最恐懼的事情就是,別人下載了遊戲,卻玩出了死機之類的惡性BUG。

周圍朋友多半用蘋果。很多次有人問我,爲什麼遊戲不出Mac或者Linux版。答案很簡單,我怕出BUG。

Steam上,超過95%的用戶使用Windows。而據前人經驗,玩家提交的80%的BUG都來自於Mac和Linux。我不用蘋果系統,也沒在Linux上玩過遊戲……對這些運行環境一無所知。

我之前對軟件包依賴管理的理解,僅僅停留在Python的requirements/peotry/conda,以及一丁點兒docker上。而這些知識對windows遊戲環境的系統兼容性、硬件差異、運行時依賴沒有幫助。

會不會有一些我自己電腦無論怎麼測試都發現不了的BUG?遊戲內測幾周下來,這類BUG還真不少……記錄一下新手踩的坑,供其他開發者一笑。

問題都比較技術細節,可能僅對使用Godot遊戲引擎的人有用。

以下都是「僅在遊戲導出後或在別人電腦跑上時」纔會出現,遊戲引擎編輯器內無法復現:

Godot編輯器用緩存掩蓋了資產文件缺失

  • 在本地不小心刪了某動畫資產。但Godot的緩存默默補上了,所以錯誤只有在運行導出的遊戲exe到讀取那份資產時纔會暴露

  • 這個很難提前察覺,已經不記得什麼時候手抖刪過,動畫資源也不進Git所以我diff看不見。只能在別人那裏報錯後,從日誌中看出來

  • 感覺Godot應該警告一下這類只有import文件但資源文件本身不存在的情況

資源的文件路徑在導出後發生改變

  • Godot導出遊戲後,在某些電腦上會改變資源文件夾結構,從而找不到資源。(在某些電腦上,它又不會變……)

  • 我在兩處代碼誤用了`FileAccess.file_exists`函數檢查某資源是否存在

  • 應該用`ResourceLoader.exist`,這個函數考慮到了資源文件夾結構可能的改變

  • `FileAccess.file_exists`應只用來檢查遊戲安裝路徑以外的用戶數據文件夾(如存檔、設置文件)

有一個場景的文件名大小寫錯了

  • Windows平臺本身不區分文件名大小寫,所以Godot編輯器裏沒問題,但Godot導出後的運行時環境區分大小寫

在人物移動時,人物精靈圖或背景圖發生抖動,而不是平滑移動

  • 這個在我自己的三臺顯示器上要麼不出現,要麼不明顯,要麼偶爾隨機出現。但少數測試者發來的視頻裏抖得觸目驚心

  • 在調試過垂直同步、全屏模式、幀數限制、物理插值設置、檢測顯示器刷新率、Phantom Camera插件等等一長串可能性且無果後……

  • 最終徹底的解決方案是會被資深開發者們嘲笑的「直接將物理幀率設爲當前顯示器刷新率」(因爲人物移動使用了_physics_process)

  • 沒想到2D遊戲的屏幕抖動/撕裂會有這麼多影響因素。特別是Godot 4.3已經重新實現物理插值之後。

對話系統的單行命令紊亂或重複

  • 這個是開源的YarnSpinner-Godot對話系統自己的線程和編譯相關問題,且問題只有在C#項目導出後才顯得嚴重突出。

  • 它的最新版本已經徹底重寫了出問題的部分,但由於我在很久以前fork的版本上改動較多,升級的成本非常高……

  • 於是,最後寫了三處老版本的補丁大大減少對話紊亂或重複的觸發可能性

  • 這是唯一一個發現了但我卻無法徹底消除的的bug。會以極小概率隨機出現。打補丁後,已不影響正常遊戲流程。

  • 頭撞南牆地學到了一個軟件工程101就會教的東西:千萬別用不穩定的包作爲自己遊戲的核心繫統。

萬幸的是,內測中發現的其他問題都非常微小。真的要特別感謝前幾位參與內測的朋友,把上述惡性坑踩過一遍,才讓後來者有了順暢的遊戲體驗。

《逃離永明島》正式版將於7月31日上線。新的試玩版已發佈,與正式版存檔相通。

更多遊戲資訊請關註:電玩幫遊戲資訊專區

電玩幫圖文攻略 www.vgover.com