我的遊戲存檔讀回來,角色全部不講話了!
你做的文字冒險/視覺小說,存檔讀回來以後對話整個壞掉、角色像集體失憶。這不是你存檔存錯——你缺的詞叫「暫存變數不進存檔」。這頁告訴你哪種變數會被引擎悄悄丟掉,還有正確的重建做法。
先說結論:這不是你存檔存錯,是有一種變數天生就不進存檔,而你剛好把命根子放在裡面了。
我來還原一下你踩坑的現場。
遊戲做好了,玩起來一切正常,你超爽。然後你存檔、關遊戲、隔天讀檔回來——
角色。全部。不講話了。
對話整個壞掉,那些角色像是集體失憶,忘了自己是誰。你心裡一驚:「幹,我遊戲壞了?」
你去翻程式碼,設定明明都好好的躺在那。你重存了三次,一模一樣。你開始懷疑人生。
別急著懷疑人生。問題不在「存檔」這個動作,在你放東西的那個變數,它的名字。
你缺的詞 = transient variables(暫存變數)/ after_load
為什麼存了卻讀不回來?(人話版)
Ren’Py(做視覺小說最多人用的引擎)有一條規則,我賭你不知道:
任何名字以底線 _ 開頭的變數,Ren’Py 一律當成「內部暫存」,不寫進存檔。
這是它故意的。它心裡想:「底線開頭的嘛,一定是引擎自己用的臨時垃圾,存它幹嘛。」然後就把它跳過了。
看到問題了嗎?如果你(或幫你寫 code 的 AI)手很賤,把重要的遊戲狀態放進這種變數——比如一張「角色名字 → 角色本人」的對照表——那存檔的時候,Ren’Py 看都不看它一眼。
讀檔回來,那張表是空的。靠它運作的所有對話,當然集體暴斃。
這就像你把重要文件鎖進一個「每天下班自動清空」的抽屜。隔天你翻遍全世界找不到,還以為公司遭小偷。不是啊兄弟,是那個抽屜本來就會自己清空,你放錯地方了。
正確做法:要嘛別放,要嘛讀檔時自己重蓋一次
兩條路:
懶人路(推薦):別把命根子放進 _ 開頭的變數。把底線拿掉、換個名字,它就會乖乖被存進存檔了。就這麼簡單。
進階路(有時躲不掉):如果那個東西「本來就存不進去」——比如它是遊戲開始時當場生出來的物件(這種東西沒辦法直接寫進檔案)——那你就在讀檔的時候,重新生一次。
Ren’Py 佛心地給了你一個專門的時機點叫 after_load。每次讀檔一完成,它就自動幫你跑一次。你把「重建」的動作塞進去:
label after_load:
python:
_init_char_speakers() # 讀檔後,把角色對照表重新蓋回來
_dialogue_cache.clear() # 順手把舊快取清掉
return
判斷原則一句話:能直接存的(數字、文字、清單)→ 別用底線變數,讓它正常存檔。存不進去的(當場生的物件)→ 用 after_load 讀檔時重建。
⚖️ 誠實說清楚:這條「底線 = 不存檔」是 Ren’Py 特有的怪癖,不是每個引擎都這樣,別拿去嗆別的引擎。但「有些狀態被悄悄跳過、讀檔才爆」這個坑的形狀,在各種存檔系統裡都會冒出來。核心教訓只有一句:存檔不會「自動全部幫你存好」,你得知道哪些東西根本沒被存。
你會搜錯的關鍵字 vs 該搜的正確詞彙
| 你崩潰時會打的(搜不到) | 該搜的正確詞彙 |
|---|---|
| 「Ren’Py 存檔讀回來是空的」 | transient variables / _ prefix not saved |
| 「讀檔後對話壞掉」 | after_load label / state rebuild |
| 「遊戲狀態莫名消失」 | save serialization / what gets persisted |
把右邊那欄丟進 Google、或直接貼給你的 AI,世界瞬間清晰。這就是我們在幹的事——把你崩潰時打出來的髒話,翻譯成能找到答案的詞。
🎁 直接貼給你的 ChatGPT / Claude
這一段免費。複製、貼上、送出——先讓你的 AI 動起來。
我在用 Ren'Py 做視覺小說。我發現有些遊戲狀態(例如一個把角色名字對應到 Character 物件的 dict)在存檔讀回來以後就變空的,害對話全部壞掉。 請告訴我: 1. Ren'Py 裡哪些變數「不會」被存進存檔?(我聽說跟變數命名有關) 2. 如果我必須用到這種變數,怎麼在讀檔時把它重建回來?請給我一個 after_load label 的範例。 3. 哪些東西適合放這種「不存檔」的變數、哪些絕對不行?
想更進一步?
上面免費的三層已經能讓你動起來。如果你想要「照著做不迷路」甚至「我們幫你跑好」——往下看。
- 免費 這個坑是什麼、誰會踩
- 免費 人話解釋:錯在哪、正確的詞彙
- 免費 一段可直接貼給 AI 的 prompt
完整實作文件
未來新增- 一份「哪些狀態該存、哪些該重建」的完整檢查清單,照著分類不會漏
- after_load 重建邏輯的完整範本(含快取清空、物件重建順序)
- 存檔相容性防雷:改版後舊存檔怎麼不壞
可跑的 codebase / skill
未來新增- 省掉從零踩坑:現成的存檔狀態管理範本,clone 下來改設定就能用
- ✅ 自動重建角色物件 ✅ 快取分離 ✅ 舊存檔相容處理
本文首發於 AI 許願池(https://kaowan.pages.dev/articles/save-file-loads-empty/),發佈日 2026年7月5日。 轉載請註明出處——原創者不怕考古,只有小偷怕。🕳️