起動と接続
起動と接続は、すべての機能の前提となるフローです。エンジンごとに導入方法は異なりますが、目的は共通しています。ゲームが appId を取得し、ローカルの IGP デスクトップクライアントへ接続し、必要に応じてマルチプレイヤーロビーフローへ入れるようにします。
この層では主に次を扱います。
appIdの読み取りまたは設定- ゲーム起動フローから明示的に SDK 初期化を実行すること
- ローカル IGP デスクトップクライアントへの接続
- 接続状態の確認
- デスクトップクライアントが現在公開している機能の照会
- IGP デスクトップクライアントからゲーム起動時に注入されるパラメータの処理
- ルーム、リアルタイム通信、状態、RPC の場面でのルームマルチプレイヤー接続の確立
サポートしているエンジン
Section titled “サポートしているエンジン”| エンジン | 状態 | 説明 |
|---|---|---|
| Unity | Preview | IGPRuntimeManager がデスクトップクライアント接続、起動パラメータ、ルームマルチプレイヤー接続を担当します。 |
| GameMaker | Preview | Windows runtime が初期化、毎フレーム更新、機能照会、イベントキューを担当します。 |
| Godot | 開発中 | コマンドラインパラメータで bootstrap し、autoload でルームマルチプレイヤー機能を公開します。 |
- ローカルに IGP デスクトップクライアントがインストールされている。
- ゲームが IGP から割り当てられた
appIdを取得している。 - ゲームの起動フローから IGP SDK の初期化メソッドを呼び出す。
- ルーム、リアルタイム通信、状態、RPC が必要な場合、ゲームは IGP デスクトップクライアントの連携テストフローから起動する必要があります。
- 実績、ゲーム認可、実名認証とアンチアディクションだけを検証する場合も、IGP デスクトップクライアント接続が必要です。
ゲーム内の初期化
Section titled “ゲーム内の初期化”初期化は、ゲームプロジェクト側の起動フローで制御します。SDK コンポーネントをシーンに置くだけでは SDK は起動しません。
Unity では、IGPRuntimeManager.InitializeAsync() を呼び出して SDK を初期化します。
GameMaker では、igp_init(...) を呼び出して runtime を初期化します。
Unity では、シーンに IGPRuntimeManager を 1 つ配置し、appId を設定し、起動フローから InitializeAsync() を呼び出してください。
using UnityEngine;using IGP.UnitySDK;
public sealed class IGPStartupDriver : MonoBehaviour{ [SerializeField] private IGPRuntimeManager runtimeManager;
private void OnEnable() { if (runtimeManager == null) { return; }
runtimeManager.onConnectionStateChanged.AddListener(OnConnectionChanged); runtimeManager.onRoomJoined.AddListener(room => { Debug.Log($"IGP room joined: {room.id}"); }); runtimeManager.onError.AddListener(error => { Debug.LogError($"IGP runtime error: {error}"); }); }
private async void Start() { await runtimeManager.InitializeAsync(); }
private void OnDisable() { if (runtimeManager == null) { return; }
runtimeManager.onConnectionStateChanged.RemoveListener(OnConnectionChanged); }
private void OnConnectionChanged(bool connected) { Debug.Log($"IGP connected={connected}"); }}Unity Editor で完全なルームフローをデバッグする場合は、Unity デバッグ を参照してください。
GameMaker の基本フローは、初期化、毎フレーム更新、イベントポーリングです。
// Createglobal.igp_app_id = YOUR_APP_ID;global.igp_sdk_enabled = true;
if (global.igp_sdk_enabled){ igp_init(global.igp_app_id, { desktop_auto_attach: true });}// Stepif (!global.igp_sdk_enabled){ exit;}
igp_update();
var snapshot = igp_get_state_snapshot();if (snapshot.connection_state == "connected"){ // 認可、コンプライアンス、実績関連状態を読み続けられます。}
var evt = igp_poll_event();while (!is_undefined(evt)){ show_debug_message("IGP event: " + string(evt.type)); evt = igp_poll_event();}デスクトップクライアントがサポートする機能を確認する場合:
var capabilities = igp_get_desktop_capabilities();if (!is_undefined(capabilities) && capabilities.achievements){ // 実績 API を呼び出せます。}Godot は現在、コマンドラインパラメータから bootstrap し、autoload として登録することを推奨します。
using Godot;using IGP.GodotSDK.Autoload;
public partial class BootstrapFromCommandLine : Node{ public override async void _Ready() { var igp = GetNode<IGPGodotAutoload>("/root/IGP"); var bootstrapped = await igp.BootstrapFromCommandLineAsync();
if (bootstrapped) { await igp.ConnectHostedSessionAsync(); } }}Godot はまだ開発中です。現在の入口は評価用であり、正式リリース向けプロジェクトでの直接利用は推奨しません。
セルフテスト
Section titled “セルフテスト”| エンジン | 最小確認 |
|---|---|
| Unity | Unity Quick Start を完了し、ルームなし接続ではデスクトップ機能の結果を確認し、ルーム接続ではルーム参加と ready のログを確認する。 |
| GameMaker | GameMaker Quick Start を完了し、接続状態が disconnected のままになっていないことを確認する。 |
| Godot | プレビュー工程で BootstrapFromCommandLineAsync() が成功し、ルームスナップショットを受信することを確認する。 |
より完全なチェックリストは テスト を参照してください。
よくある問題
Section titled “よくある問題”- appId がない: まずプラットフォームから割り当てられた
appIdを設定してください。 - SDK から接続やイベントが発生しない:
IGPRuntimeManager.InitializeAsync()または対象エンジンの初期化入口を呼んでいるか確認してください。 - デスクトップクライアントから起動していない: ルーム、リアルタイム通信、状態、RPC は通常、完全には利用できません。
- 接続状態が失敗し続ける: ローカル IGP デスクトップクライアントがインストールされ、起動できるか確認してください。
- Unity でシーン切り替え後に切断される: フロー全体で
IGPRuntimeManagerが 1 つだけであることを確認し、必要に応じてシーンをまたいで保持してください。