State and RPC
Feature description
Section titled “Feature description”State and RPC are sub-capabilities of Multiplayer lobby. State synchronizes shared room or player data, while RPC triggers named logic in the room. Both are used after the player joins a room.
Supported engines
Section titled “Supported engines”| Engine | Status | Notes |
|---|---|---|
| Unity | Preview | Supports state set / get / reset and RPC register / call / unregister. |
| GameMaker | Not supported | The first GameMaker release does not include state or RPC. |
| Godot | In development | The preview runtime already has JSON state and RPC calls. |
Prerequisites
Section titled “Prerequisites”- The minimal Rooms flow is complete.
- A room has been joined.
- State keys and RPC names should remain stable.
By engine
Section titled “By engine”using System;using UnityEngine;using IGP.Multiplayer;
public sealed class IGPStateRpcDriver : MonoBehaviour{ [SerializeField] private IGPMultiplayerRuntime 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}"); }}Receive state and RPC messages through IGPMultiplayerRuntime.MessageReceived, then dispatch state_set, state_get, state_reset, rpc_call, or rpc_response message types. The SDK converts Content to StateSetContent, StateGetResponseContent, StateResetResponseContent, RPCCallContent, or RPCResponseContent. Use GetValue<T>() / GetData<T>() for game data instead of parsing JObject. Reply with RespondRPCAsync and pass RPCCallContent.CallerPlayerId as the target player.
GameMaker currently does not support state or 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"); }}Self-test
Section titled “Self-test”| Engine | Checkpoint |
|---|---|
| Unity | State changes are received after setting state; registered RPCs can be called and responses received. |
| GameMaker | State and RPC validation is not performed currently. |
| Godot | SetStateJsonAsync, GetStateAsync, and CallRpcJsonAsync can complete in sequence. |
Troubleshooting
Section titled “Troubleshooting”- State cannot be read: confirm scope and key match exactly.
- RPC is not triggered: first confirm the corresponding RPC name has been registered.
- Unity does not receive events: confirm
IGPMultiplayerRuntime.MessageReceivedis subscribed and inspectMessageType. - Godot JSON fails: validate with a simple object string first, such as
{"value":1}.