接続とマッチメイキング
ゲームオブジェクトを同期する前に、プレイヤーはまずサーバーへ接続して、共有セッションのグループになる必要があります。Photonは2層アーキテクチャを採用していて、クライアントは最初にマッチメイキングのためにマスターサーバーへ接続し、その後にルームをホストするゲームサーバーへ転送されます。ルームは独立したセッションで、プレイヤーのグループがゲーム状態の共有・RPCの交換・オブジェクトの複製を行う場所になります。
このページでは、初期化・サーバーへの接続・ルーム作成/参加/切断を含む、接続ライフサイクル全体について説明します。
初期化
AppIDとバージョンをロードするには、initialize_from_settings()を呼び出してプロジェクト設定から読み込むか、明示的に指定してください。
GDScript
# プロジェクト設定から読み込む(推奨)
FusionClient.initialize_from_settings()
# または、明示的なパラメーター指定
FusionClient.initialize("your-app-id", "1.0")
接続
connect_to_server()を使用することで、初期化と接続を行うことができます。パラメーターはすべてオプションで、空の値はプロジェクト設定から読み込まれます。
GDScript
# すべてをプロジェクト設定から読み込む最もシンプルな形
FusionClient.connect_to_server()
# 特定のユーザーIDを指定
FusionClient.connect_to_server("player_123")
# 特定のリージョンを指定(Cloud接続モードを強制的に使用)
FusionClient.connect_to_server("player_123", "us")
リージョンを明示的に指定しない場合、接続モード(CloudかLocal)はプロジェクト設定 > Fusion > Connection > モードから決定されます。

接続と参加
「接続」と「参加」は別ステップです。最初にPhotonのマスターサーバーへ接続し、接続が成功したらルームの参加/作成を行います。
GDScript
FusionClient.connect_to_server("player_123", "us")
# 接続を待ち、その後に参加
FusionClient.connected_to_server.connect(func():
FusionClient.join_or_create_room("lobby")
)
ローカル開発では、プロジェクト設定のfusion/connection/modeをLocalに設定してください。
ルーム操作
ルームとは、プレイヤーがオブジェクトを同期しRPCを交換するための共有セッションのことです。FusionClientには、ルームの作成/参加/退出を行うメソッドが用意されています。
GDScript
# 新しいルームの作成(既に存在する場合は失敗)
FusionClient.create_room("my_room", options)
# 既存のルームに参加(ルーム名を空にするとランダム参加)
FusionClient.join_room("my_room", options)
# ルームが存在するなら参加、存在しないなら作成
FusionClient.join_or_create_room("my_room", options)
# 現在のルームから退出(接続は切断されず、再マッチメイキング可能)
FusionClient.leave_room()
optionsパラメーターはオプションの辞書型です。省略するか{}を渡すと、デフォルト値が適用されます。
ルームオプション
ルームの作成/参加時に、ルームの動作をカスタマイズするオプション辞書型を渡すことができます。
| キー | 型 | 説明 |
|---|---|---|
max_players |
int | ルームに参加できる最大プレイヤー数 |
is_visible |
bool | ロビーのクエリにルームが表示されるかどうか |
is_open |
bool | ルームに新しいプレイヤーが参加できるかどうか |
player_ttl_ms |
int | 使用されていないプレイヤースロットが解放されるまでの秒数(ミリ秒) |
empty_room_ttl_ms |
int | 空のルームが破棄されるまでの秒数(ミリ秒) |
lobby_properties |
Array[String] | ロビーのリストに表示されるカスタムプロパティ |
plugins |
Array[String] | このルームでロードするサーバープラグイン名 |
| any other key | bool, int, float, or String | ルームのカスタムプロパティ(例:"map"・"game_mode") |
接続ステータス
FusionClientは、切断状態・接続中・接続状態・参加中・ルーム内を含む、線形の状態遷移を追跡しています。
STATUS_DISCONNECTED(0) - 未接続STATUS_CONNECTING(1) - 接続を確立中STATUS_CONNECTED(2) - マスターサーバー接続済み、ルーム参加可能STATUS_JOINING_ROOM(3) - 参加中STATUS_IN_ROOM(4) - ルーム内、スポーンや同期が可能STATUS_ERROR(5) - 接続エラー
クエリメソッド: is_initialized(), is_connected_to_server(), is_in_room(), is_master_client(), get_local_player_id(), get_network_time()
シグナル
シグナルを使用することで、フレーム毎にステータスをポーリングすることなく、接続やルームのイベントに反応できます。
room_joined- 正常にルームに入った(安全にオブジェクトをスポーン可能)room_left- ルームを抜けた(自発的 or 切断)connection_failed(error: String)- 接続の試行が失敗connection_status_changed(status: int)- ステータスが変更されたconnected_to_server- マスターサーバーへ接続したscene_load_requested(index: int, path: String)- シーン変更がリクエストされた(カスタムロードモード)scene_ready(index: int)- ロード後にすべてのシーンオブジェクトが登録されたscene_unloaded(index: int, path: String)- シーンがアンロードされた
切断
disconnect_from_server()を呼び出すと、現在のルームを退出してサーバー接続を閉じます。
GDScript
FusionClient.disconnect_from_server()
実装例
Photon Cloudへ接続し、カスタムオプションを設定してルームに参加し、プレイヤー参加時にメッセージを表示するスクリプトの全容です。
GDScript
extends Node
func _ready():
FusionClient.room_joined.connect(_on_room_joined)
FusionClient.connection_failed.connect(func(e): print("Failed: ", e))
FusionClient.connect_to_server("player_%d" % randi())
FusionClient.connected_to_server.connect(func():
FusionClient.join_or_create_room("lobby", {
"max_players": 8,
"is_visible": true,
"map": "arena",
"lobby_properties": ["map"],
})
)
func _on_room_joined():
print("In room as player ", FusionClient.get_local_player_id())
Back to top