コンテンツにスキップ

ルーム

ルームは マルチプレイヤーロビー の基礎機能です。リアルタイム通信、状態と RPC、Mirror transport はすべてルームフローに依存します。

ルーム機能は、ルーム参加、ready、開始、終了、再戦、退出、およびプレイヤー参加 / 退出イベントをカバーします。ルームフローでは通常、連携テストまたは正式フローに従って IGP デスクトップクライアントからゲームを起動する必要があります。

エンジン状態説明
UnityPreview完全な主要ルームフローを提供しています。
GameMaker未対応現在の GameMaker 初回公開版にはルーム機能は含まれません。
Godot開発中プレビュー runtime にはルームライフサイクル呼び出しがあります。
  • 起動と接続 が完了している。
  • ゲームが IGP デスクトップクライアントから起動され、マルチプレイヤー起動情報を受け取っている。
  • Unity シーンに IGPRuntimeManager が 1 つだけ保持されている。
  • Godot プロジェクトで IGPGodotAutoload が登録されている。
using UnityEngine;
using IGP.Multiplayer;
public sealed class IGPRoomDriver : MonoBehaviour
{
[SerializeField] private IGPMultiplayerRuntime runtimeManager;
private void OnEnable()
{
runtimeManager.RoomChanged += OnRoomChanged;
runtimeManager.ConnectionChanged += OnRealtimeConnectionChanged;
}
private void OnDisable()
{
runtimeManager.RoomChanged -= OnRoomChanged;
runtimeManager.ConnectionChanged -= OnRealtimeConnectionChanged;
}
private void OnRoomChanged(IGPRoomChangedEvent change)
{
Debug.Log($"Room {change.Kind}, flags={change.Changes}, id={change.Room?.id}");
}
private async void OnRealtimeConnectionChanged(IGPMultiplayerConnectionChangedEvent change)
{
if (change.IsReady && runtimeManager.CurrentRoomData.hostId == runtimeManager.PlayerId)
{
await runtimeManager.SetSceneGateAsync("arena-ready");
}
}
public async void StartGame()
{
await runtimeManager.StartHostedGameAsync();
}
public async void FinishGame()
{
await runtimeManager.FinishHostedGameAsync();
}
public async void LeaveRoom()
{
await runtimeManager.LeaveHostedRoomAsync();
}
}

SceneGate は hosted room snapshot のフィールドではなく、現在の RoomNode runtime room が保持する KCP state です。すべての client は CurrentSceneGate を読み、SceneGate flag 付きの RoomChanged を監視できます。host は realtime 接続後に SetSceneGateAsync を呼び出します。途中参加または再接続した client は realtime が ready になった後に GetSceneGateAsync を呼び出し、Owner からの対象指定 response によって local value が非同期に更新されます。この値は RoomNode runtime room の破棄時に自然に消えます。

エンジン確認項目
Unityrealtime 接続後に host が SetSceneGateAsync("arena-ready") を呼ぶと、全 client が KCP 経由で更新値を取得できる。
GameMaker現在はルーム検証の対象外です。
GodotRoomSnapshotReceived を受け取り、SetReadyAsync(true) が成功する。
  • ルームに入れない: まずゲームが IGP デスクトップクライアントから起動されているか確認してください。
  • Unity でシーン切り替え後にルームが切断される: 2 つ目の IGPRuntimeManager が作成されていないか確認してください。
  • Unity の SceneGate が更新されない: 呼び出し元が現在の host で、realtime/KCP が接続済みか確認してください。
  • Godot でルームスナップショットを受け取れない: bootstrap が完了し、ルームマルチプレイヤー接続が確立されているか確認してください。