Steamworks 对接
Galgo 的 Steamworks 支持是可选能力。默认构建不启用 Steamworks 绑定;需要构建 Steam 版本时再使用 steamworks build tag 并准备 Steamworks SDK。
默认行为
不带 tag 构建时,steam_disabled.go 会提供 no-op 客户端。此时:
SteamConfig.Enabled为 false 时不会做 Steam 初始化。- 如果强制启用 Steam 但未带
steamworkstag,会返回禁用错误。 - 普通非 Steam 版本不需要 SDK。
SDK 放置
Steamworks SDK 应放在仓库根目录:
text
steamworks_sdk/
public/
steam/
steam_api_flat.h
redistributable_bin/
win64/
steam_api64.lib
steam_api64.dll
linux64/
libsteam_api.so
osx/
libsteam_api.dylib当前 cgo 路径从 internal/galgo 回到仓库根目录查找 steamworks_sdk。
基础配置
go
Steam: galgo.SteamConfig{
Enabled: true,
AppID: 480,
RequireSteam: true,
RestartAppIfNecessary: true,
AutoSyncAchievements: true,
}字段说明:
Enabled:是否启用 Steam。AppID:Steam App ID。RequireSteam:Steam 初始化失败时是否直接报错。RestartAppIfNecessary:必要时通过 Steam 重启应用。AutoSyncAchievements:解锁 Galgo 成就时同步 Steam 成就。AchievementAPINamePrefix:给 Steam API 名加前缀。DLCs:DLC 配置。
构建
powershell
go build -tags steamworks ./exampleWindows 发布时还需要把 steam_api64.dll 放到可执行文件旁边。Linux/macOS 同理放置对应动态库。
成就同步
Galgo 成就:
go
Achievements: []galgo.AchievementItem{
{Key: "walk_home", Title: "Walk Home", Description: "Chose to walk home with Aria."},
},解锁:
go
galgo.UnlockAchievement("walk_home")如果 AutoSyncAchievements 为 true,会调用 Steam 成就 API。Steam API 名默认使用 key,也可以用 AchievementAPINamePrefix 统一加前缀。
手动同步:
go
engine.SyncSteamAchievement("walk_home")
engine.SyncSteamAchievements()进度成就:
go
galgo.SteamAchievementProgress("collector", 3, 10)DLC
配置 DLC:
go
Steam: galgo.SteamConfig{
Enabled: true,
DLCs: []galgo.SteamDLCItem{
{
Key: "episode_2",
AppID: 123456,
MountPath: "./dlc/episode_2",
AutoMount: true,
},
},
}刷新 DLC:
go
states := engine.RefreshSteamDLCs()脚本中刷新:
go
galgo.RefreshSteamDLC("episode_2")挂载资源根:
go
galgo.MountSteamDLC("episode_2")根据 DLC 是否安装跳转:
go
galgo.BranchSteamDLC("episode_2", "dlc_start", "dlc_missing", true)如果 mountIfInstalled 为 true,会在安装时把 MountPath 加入资源搜索根。
开发建议
Steam 相关逻辑建议做成可降级:
- 非 Steam 版本不要强依赖
Enabled: true。 - 剧情 DLC 缺失时跳到提示节点。
- Steam 成就同步失败不要阻塞剧情。
- DLC 资源路径和普通资源路径保持同一套命名规则。