状态与 RPC
状态与 RPC 属于 联机大厅 的子能力。状态用于同步房间内的共享数据或玩家数据;RPC 用于在房间内触发一段命名逻辑。两者都需要在玩家进入房间后使用。
| 引擎 | 状态 | 说明 |
|---|---|---|
| Unity | Preview | 支持状态 set / get / reset 和 RPC register / call / unregister。 |
| GameMaker | 暂不支持 | 当前 GameMaker 首期不包含状态和 RPC。 |
| Godot | 开发中 | 预览 runtime 已有 JSON 状态和 RPC 调用。 |
- 已完成 房间 的最小流程。
- 已进入房间。
- 状态 key 和 RPC 名称需要保持稳定。
- Unity 如需接收事件,需要在场景中同时放置
IGPEventManager。
using System;using UnityEngine;using IGP.UnitySDK;
public sealed class IGPStateRpcDriver : MonoBehaviour{ [SerializeField] private IGPRuntimeManager runtimeManager;
public async void SetGlobalScore() { await runtimeManager.SetGlobalStateAsync("match.score", new { red = 1, blue = 0, updatedAt = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(), }); }
public async void RegisterEchoRpc() { await runtimeManager.RegisterRPCAsync("sample.echo"); }
public async void CallEchoRpc() { var requestId = await runtimeManager.CallRPCAsync( "sample.echo", new { text = "hello" }, "all");
Debug.Log($"RPC request id={requestId}"); }}如需接收状态和 RPC 事件,需要在场景中同时放置 IGPEventManager,并监听其中的状态变化和 RPC 事件。
GameMaker 当前暂不支持状态与 RPC。
using Godot;using IGP.GodotSDK.Autoload;
public partial class StateRpcPanel : Control{ private IGPGodotAutoload IGP => GetNode<IGPGodotAutoload>("/root/IGP");
public async void SetGlobalScore() { await IGP.SetStateJsonAsync( "global", "match.score", "{\"red\":1,\"blue\":0}"); }
public async void RegisterEchoRpc() { await IGP.RegisterRpcAsync("sample.echo"); }
public async void CallEchoRpc() { await IGP.CallRpcJsonAsync( "sample.echo", "{\"text\":\"hello\"}", "all"); }}| 引擎 | 检查点 |
|---|---|
| Unity | 设置状态后能收到状态变化;注册 RPC 后能调用并收到响应。 |
| GameMaker | 当前不做状态与 RPC 验收。 |
| Godot | SetStateJsonAsync、GetStateAsync、CallRpcJsonAsync 能顺序完成。 |
常见问题 / 排查
Section titled “常见问题 / 排查”- 无法读取状态:确认 scope 和 key 完全一致。
- RPC 未触发:先确认已经注册对应 RPC 名称。
- Unity 未收到事件:确认场景中存在
IGPEventManager,并绑定了对应事件。 - Godot JSON 失败:先用简单对象字符串验证,例如
{"value":1}。