4 min read

GodotSteam 教學 #1: 基礎設定

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) 是一模一樣的,但開發環境的建置卻大不相同:

GDExtension vs. Pre-compiled

我選擇使用 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 執行專案。請務必確認以下兩點:

  1. 你的 Steam 客戶端 已經開啟並登入。
  2. 你的電腦處於連線狀態。

如果一切順利,你應該會在 Godot 下方的 Output (輸出) 視窗看到類似這樣的訊息:

(如果看到上述文字,代表 Godot 已經成功與 Steam 連線了!)

常見問題排錯

  • 錯誤碼非 0: 最常見的原因是沒開 Steam,或者 Steam 當掉了。重啟 Steam 通常能解決。
  • 找不到 Steam API: 如果報錯說找不到 Steam 這個類別,請確認你是否下載並開啟了 GodotSteam 特製版編輯器,而不是標準版 Godot。

下一步?

現在我們已經成功讓 Godot 連接 Steam,並抓到了你的玩家 ID。但這還只是有連上 Steam 的單機遊戲

在下一篇文章中,會介紹如何建立 Steam 大廳 (Lobby)並將遊戲匯出到第二台電腦進行連線測試。