状態と RPC
状態と RPC は マルチプレイヤーロビー のサブ機能です。状態はルーム内の共有データやプレイヤーデータを同期するために使い、RPC はルーム内で名前付きロジックを呼び出すために使います。どちらもプレイヤーがルームに参加した後で使用します。
サポートしているエンジン
Section titled “サポートしているエンジン”| エンジン | 状態 | 説明 |
|---|---|---|
| Unity | Preview | state 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"); }}セルフテスト
Section titled “セルフテスト”| エンジン | 確認項目 |
|---|---|
| Unity | 状態設定後に状態変化を受け取れる。RPC を登録、呼び出し、応答できる。 |
| GameMaker | 現在は状態と RPC の検証対象外です。 |
| Godot | SetStateJsonAsync、GetStateAsync、CallRpcJsonAsync が順に完了する。 |
よくある問題
Section titled “よくある問題”- 状態を読み取れない: scope と key が完全に一致しているか確認してください。
- RPC が発火しない: まず該当する RPC 名称が登録済みか確認してください。
- Unity でイベントを受け取れない: シーンに
IGPEventManagerがあり、関連イベントがバインドされているか確認してください。 - Godot の JSON が失敗する: まず
{"value":1}のような単純なオブジェクト文字列で検証してください。