匯出套件、修正檔與 Mod
使用例
常見情境是遊戲部署後仍想加入新功能。
這樣的例子包含...
DLC:可在遊戲中新增功能與內容。
修正檔:用來修正存在於已出貨產品中的 Bug。
Mod:讓其他人能夠為遊戲建立內容。
這些工具可以協助開發人員在初始版本後的開發。
PCK/ZIP 檔概覽
Godot 透過稱為 資源包 的功能實現此需求 (PCK 檔, 副檔名 .pck, 或 ZIP 檔)。
優點:
漸進更新/修補
提供 DLC
提供 Mod 支援
Mod 不需要公開原始碼
專案架構更加模組化
使用者不需要換掉整個遊戲
使用流程的第一步是先將專案匯出並交付給玩家。其後若要新增功能或內容,只需以 PCK/ZIP 檔提供更新給使用者。
PCK/ZIP 檔通常包含(但不限於):
腳本
場景
著色器
模型
紋理
音效
音樂
其他適合匯入到遊戲內的素材
PCK/ZIP 甚至可以是一個完全不同的 Godot 專案,供原本的遊戲在執行時載入。
可以同時載入 PCK 與 ZIP 作為附加資源包。兩者差異請參見 PCK v.s. ZIP 打包檔案格式。
也參考
若想在執行期載入散檔(非由 Godot 打包成 PCK 或 ZIP),可考慮使用 執行時檔案載入與儲存。這對載入非 Godot 製作的使用者產生內容很有用,且不需要求使用者將模組打包成特定格式。
此作法的缺點是對遊戲邏輯較不透明,因為無法享有如 PCK/ZIP 般的一致資源管理。
產生 PCK 檔
要將專案所有資源打包為 PCK,請開啟專案後前往 Project > Export,並點擊 Export PCK/ZIP。同時請確認已選取匯出預設。
另一種方式是使用命令列以 --export-pack 進行匯出。輸出檔案的副檔名必須是 .pck 或 .zip。匯出流程會為所選平台建立該類型的檔案。
備註
如欲於遊戲中支援 Mod,則必須讓使用者能建立類似的匯出檔案。假設原始遊戲需要特定結構的 PCK 資源,或是需要腳本有特定的介面,那麼可選擇下列其中一種方法...
開發人員必須公開所需架構/介面的文件,並讓 Mod 作者安裝 Godot Engine,接著要求 Mod 作者依照文件中定義的 API 來製作 Mod (這樣才能正常運作)。使用者接著便能以上述方法通過 Godot 內建匯出工具來製作 PCK 檔案。
開發人員使用 Godot 來製作使用專案 API 的 GUI 工具。該 Godot 工具必須執行於有啟用工具功能的引擎建置,或是能存取工具功能的引擎建置 (與原始遊戲檔案一起發佈,或在遊戲檔案內發行)。該工具接著可使用 Godot 的執行檔來在命令列中以 OS.execute() 來匯出 PCK 檔。對大多數遊戲來說,都不適合在遊戲中使用工具建置 (安全性考量),而 Mod 工具則 要 啟用工具建置。
在執行期開啟 PCK 或 ZIP 檔
要載入 PCK 或 ZIP 檔,請使用 ProjectSettings 單例。以下範例假設遊戲執行檔所在資料夾有一個 mod.pck,且該 PCK/ZIP 的根目錄包含測試場景 mod_scene.tscn。
func _your_function():
# This could fail if, for example, mod.pck cannot be found.
var success = ProjectSettings.load_resource_pack(OS.get_executable_path().get_base_dir().path_join("mod.pck"))
if success:
# Now one can use the assets as if they had them in the project from the start.
var imported_scene = load("res://mod_scene.tscn")
private void YourFunction()
{
// This could fail if, for example, mod.pck cannot be found.
var success = ProjectSettings.LoadResourcePack(OS.get_executable_path().get_base_dir().path_join("mod.pck));
if (success)
{
// Now one can use the assets as if they had them in the project from the start.
var importedScene = (PackedScene)ResourceLoader.Load("res://mod_scene.tscn");
}
}
警告
預設情況下,若匯入的檔案與專案內既有檔案的路徑/名稱相同,新的檔案會取代舊檔。製作 DLC 或模組時須特別注意。你可以使用工具將模組隔離在特定的 mods 子資料夾以解決此問題。
不過,這同時也可用於為自己的遊戲建立修補檔。此類 PCK/ZIP 能覆蓋先前載入的 PCK/ZIP 內容(因此載入順序很重要)。
若要取消此一行為,請向 ProjectSettings.load_resource_pack() 傳入第二個參數為 false 。
備註
C# 專案,則需要先建置 DLL 並放在專案資料夾中。接著,在載入資源包前必須先這樣載入 DLL: Assembly.LoadFile("mod.dll")
疑難排解
若載入資源包後沒有看到變化,可能是載入時機太晚。特別是選單場景可能使用 preload() 預先載入其他場景,此時在選單中才載入的資源包不會影響已被預載的場景。
為避免此情況,請盡可能提早載入資源包。作法是建立新的 autoload 腳本,並在其 _init() 中呼叫 ProjectSettings.load_resource_pack(),而非在 _enter_tree() 或 _ready()。
總結
本教學說明了如何簡單地給遊戲加上 Mode、修正檔與 DLC。最重要的是該如何計劃發行遊戲未來的內容,以及為此開發一個自定工作流程。Godot 依據開發人員選擇的方法,確保該流程順暢。