GodotSteam 教學 #1: 基礎設定
為什麼要研究這個?
前陣子讀了一篇遊戲趨勢的文章,讓我對 "Friend Slop" 類型遊戲產生興趣。
什麼是 Friend Slop?這類遊戲通常機制不複雜,但專注於「高互動」與「物理碰撞」,讓朋友們聚在一起做蠢事、產生混亂”笑”果(例如《Lethal Company》或《Content Warning》)。而這類遊戲的核心基礎,就是多人連線。
為了實現這個目標,我開始研究如何在 Godot 引擎中實現 1~4 人的連線功能。既然目標是 PC 平台,整合 Steamworks API 幾乎是必經之路。這系列文章將紀錄我如何使用 GodotSteam 從零開始建立一個多人連線專案。
什麼是 GodotSteam?
Steamworks API 提供了從 成就系統、多人連線 (P2P)、雲端存檔和遊戲內購 等豐富支援。但原本的 API 是 C++ 寫的,在 Godot 裡直接用並不容易。
GodotSteam 是專為 Godot 開發的開源模組,讓開發者可以直接在 Godot 中使用 GDScript 呼叫 Steam 的功能。
GDExtension vs. Pre-compiled
GodotSteam 主要有兩種安裝方式。雖然寫出來的程式碼 (GDScript) 是一模一樣的,但開發環境的建置卻大不相同:

我選擇使用 Pre-compiled 版本,只需要去 GodotSteam 官網下載對應版本 (傳送門),打開就能直接用。

根據作業系統選擇檔案下載,範例使用 Windows,另外這邊也可以先把 templates,之後匯出的時候會用到。

使用 Pre-compiled 版唯一的缺點是,當你要匯出遊戲給朋友玩時,不能使用 Godot 內建的匯出模板,必須去 GodotSteam 官網下載對應的 Export Templates 才能正常運作。
(下篇會分享如何匯出專案)
實作:初始化 Steam
接下來我們直接進入實作。請建立一個新的 Godot 專案,新增一個 Node2D 場景,並掛載一個腳本。
以下是完整的初始化程式碼:
extends Node2D
func _ready() -> void:
initialize_steam()
func initialize_steam() -> void:
# 設定 App ID,480 是開發用的 Spacewar
OS.set_environment("SteamAppId", str(480))
OS.set_environment("SteamGameId", str(480))
# 嘗試初始化 Steam API
var initialize_response: Dictionary = Steam.steamInitEx()
print("Steam 初始化回應: %s" % initialize_response)
# 確認成功後,再讀取並印出玩家資料
var steam_id = Steam.getSteamID()
var steam_name = Steam.getPersonaName()
print("Steam 登入成功!")
print("玩家 ID: ", steam_id)
print("玩家名稱: ", steam_name)
if initialize_response['status'] > Steam.STEAM_API_INIT_RESULT_OK:
print("Failed to initialize Steam, shutting down: %s" % initialize_response)GodotSteam 初始化程式碼
測試與驗證
寫好程式碼後,按下 F5 執行專案。請務必確認以下兩點:
- 你的 Steam 客戶端 已經開啟並登入。
- 你的電腦處於連線狀態。
如果一切順利,你應該會在 Godot 下方的 Output (輸出) 視窗看到類似這樣的訊息:
(如果看到上述文字,代表 Godot 已經成功與 Steam 連線了!)
常見問題排錯
- 錯誤碼非 0: 最常見的原因是沒開 Steam,或者 Steam 當掉了。重啟 Steam 通常能解決。
- 找不到 Steam API: 如果報錯說找不到
Steam這個類別,請確認你是否下載並開啟了 GodotSteam 特製版編輯器,而不是標準版 Godot。
下一步?
現在我們已經成功讓 Godot 連接 Steam,並抓到了你的玩家 ID。但這還只是有連上 Steam 的單機遊戲。
在下一篇文章中,會介紹如何建立 Steam 大廳 (Lobby)並將遊戲匯出到第二台電腦進行連線測試。