ルーム
ルームは マルチプレイヤーロビー の基礎機能です。リアルタイム通信、状態と RPC、Mirror transport はすべてルームフローに依存します。
ルーム機能は、ルーム参加、ready、開始、終了、再戦、退出、およびプレイヤー参加 / 退出イベントをカバーします。ルームフローでは通常、連携テストまたは正式フローに従って IGP デスクトップクライアントからゲームを起動する必要があります。
サポートしているエンジン
Section titled “サポートしているエンジン”| エンジン | 状態 | 説明 |
|---|---|---|
| Unity | Preview | 完全な主要ルームフローを提供しています。 |
| GameMaker | 未対応 | 現在の GameMaker 初回公開版にはルーム機能は含まれません。 |
| Godot | 開発中 | プレビュー runtime にはルームライフサイクル呼び出しがあります。 |
- 起動と接続 が完了している。
- ゲームが IGP デスクトップクライアントから起動され、マルチプレイヤー起動情報を受け取っている。
- Unity シーンに
IGPRuntimeManagerが 1 つだけ保持されている。 - Godot プロジェクトで
IGPGodotAutoloadが登録されている。
using UnityEngine;using IGP.UnitySDK;using IGP.UnitySDK.Models;
public sealed class IGPRoomDriver : MonoBehaviour{ [SerializeField] private IGPRuntimeManager runtimeManager;
private void OnEnable() { runtimeManager.onRoomJoined.AddListener(OnRoomJoined); runtimeManager.onRoomUpdated.AddListener(OnRoomUpdated); runtimeManager.onRoomLeft.AddListener(OnRoomLeft); }
private void OnDisable() { runtimeManager.onRoomJoined.RemoveListener(OnRoomJoined); runtimeManager.onRoomUpdated.RemoveListener(OnRoomUpdated); runtimeManager.onRoomLeft.RemoveListener(OnRoomLeft); }
private async void OnRoomJoined(Room room) { Debug.Log($"Joined room {room.id}"); await runtimeManager.SetReadyAsync(true); }
public async void StartGame() { await runtimeManager.StartHostedGameAsync(); }
public async void FinishGame() { await runtimeManager.FinishHostedGameAsync(); }
public async void LeaveRoom() { await runtimeManager.LeaveHostedRoomAsync(); }
private void OnRoomUpdated(Room room) {} private void OnRoomLeft(Room room) {}}GameMaker は現在、ルーム機能をサポートしていません。
Godot では現在、autoload 経由でルーム機能を呼び出すことを推奨します。
using Godot;using IGP.GodotSDK.Autoload;
public partial class RoomPanel : Control{ private IGPGodotAutoload IGP => GetNode<IGPGodotAutoload>("/root/IGP");
public override void _Ready() { IGP.RoomSnapshotReceived += OnRoomSnapshotReceived; IGP.RoomEventReceived += OnRoomEventReceived; }
public async void Ready() { await IGP.SetReadyAsync(true); }
public async void StartGame() { await IGP.StartHostedGameAsync(); }
public async void FinishGame() { await IGP.FinishHostedGameAsync(); }
private void OnRoomSnapshotReceived(string connectionStatus) {} private void OnRoomEventReceived(int eventType, string roomId) {}}Godot はまだ開発中です。現在のサンプルは主に評価と導入方法のすり合わせに使います。
セルフテスト
Section titled “セルフテスト”| エンジン | 確認項目 |
|---|---|
| Unity | onRoomJoined を受け取り、SetReadyAsync(true) が成功する。 |
| GameMaker | 現在はルーム検証の対象外です。 |
| Godot | RoomSnapshotReceived を受け取り、SetReadyAsync(true) が成功する。 |
よくある問題
Section titled “よくある問題”- ルームに入れない: まずゲームが IGP デスクトップクライアントから起動されているか確認してください。
- Unity でシーン切り替え後にルームが切断される: 2 つ目の
IGPRuntimeManagerが作成されていないか確認してください。 - ready が反映されない: ルーム参加後に ready を呼び出しているか確認してください。
- Godot でルームスナップショットを受け取れない: bootstrap が完了し、ルームマルチプレイヤー接続が確立されているか確認してください。