多人游戏中继服务
Godot Relayer 是一个专为 Godot 引擎设计的多人游戏中继服务。它的作用类似于 Unity 生态中的 Photon —— 开发者无需自建和维护后端服务器,只需在项目中安装插件,传入 Server URL 和 API Key,即可快速实现多人联机功能。
与其他方案不同的是,Godot Relayer 完全基于 Godot 原生多人网络框架。它只替换底层传输层(ENet → WebSocket),你的 RPC 调用、MultiplayerSynchronizer、MultiplayerSpawner 等代码无需任何改动,迁移成本几乎为零。
玩家 A(Host)←→ 中继服务器 ←→ 玩家 B(Client)中继服务器只负责透明转发消息,不运行任何游戏逻辑。Host 创建房间后获得一个 4 位加入码,其他玩家凭码加入。连接建立后,双方直接使用 Godot 标准多人 API 通信,中继服务器不感知游戏内容。
| 配置项 | 值 |
|---|---|
| Server URL | wss://relayer.yiapp.com.cn/ws |
| API Key | gdr-live-a8f3k2m9xq4tz6ew |
第一步:安装插件
Section titled “第一步:安装插件”下载插件包,解压后将 addons/relay_multiplayer/ 目录复制到你的 Godot 项目中,然后在 项目设置 -> 插件 中启用 Relay Multiplayer。
第二步:Host 创建房间
Section titled “第二步:Host 创建房间”var SERVER_URL = "wss://relayer.yiapp.com.cn/ws"var API_KEY = "gdr-live-a8f3k2m9xq4tz6ew"
func host_game(): var server = RelayServer.new(SERVER_URL, API_KEY) var peer = RelayMultiplayerPeer.new() peer.lobby_created.connect(_on_lobby_created) peer.create_lobby(server, { "max_players": 4 }) multiplayer.multiplayer_peer = peer
func _on_lobby_created(join_code: String): print("房间已创建,加入码:", join_code) # 将 join_code 展示给玩家,供其他人加入第三步:Client 加入房间
Section titled “第三步:Client 加入房间”func join_game(join_code: String): var server = RelayServer.new(SERVER_URL, API_KEY) var peer = RelayMultiplayerPeer.new() peer.lobby_joined.connect(_on_lobby_joined) peer.join_lobby(server, join_code) multiplayer.multiplayer_peer = peer
func _on_lobby_joined(): print("已加入房间")第四步:使用标准 Godot 多人 API
Section titled “第四步:使用标准 Godot 多人 API”连接成功后,直接使用你熟悉的 Godot API 即可:
# RPC 调用@rpc("any_peer", "call_local")func sync_position(pos: Vector2): position = pos
# MultiplayerSynchronizer、MultiplayerSpawner 同样正常工作API 参考
Section titled “API 参考”RelayServer
Section titled “RelayServer”RelayServer.new(url: String, api_key: String)| 参数 | 说明 |
|---|---|
url | 中继服务器 WebSocket 地址 |
api_key | API 密钥 |
RelayMultiplayerPeer
Section titled “RelayMultiplayerPeer”方法:
| 方法 | 说明 |
|---|---|
create_lobby(server, options) | 创建房间,options 支持 max_players、name 等 |
join_lobby(server, join_code) | 通过加入码加入房间 |
get_join_code() | 获取当前房间的加入码(Host 调用) |
is_host() | 判断当前节点是否为 Host |
信号:
| 信号 | 说明 |
|---|---|
lobby_created(join_code: String) | 房间创建成功,返回加入码 |
lobby_joined | 成功加入房间 |
peer_connected(peer_id: int) | 有新玩家加入 |
peer_disconnected(peer_id: int) | 有玩家离开 |
kicked | 被 Host 踢出房间 |
错误码:
| 范围 | 说明 |
|---|---|
1xxx | 连接错误(如 CONNECTION_FAILED) |
2xxx | 房间错误(如 ROOM_NOT_FOUND、ROOM_FULL) |
3xxx | 运行时错误(如 HOST_DISCONNECTED) |
- 中继服务器仅转发消息,不存储任何游戏数据,服务器断开后房间自动销毁
- 目前服务处于公测阶段,API Key 免费使用,后续可能引入配额机制
- 支持所有 Godot 导出平台:Web、桌面端(Windows / macOS / Linux)、移动端(iOS / Android)
- 需要 Godot 4.x 版本,不支持 Godot 3
请先登录后查看下载链接