接続とマッチメイキング

ゲームオブジェクトを同期する前に、プレイヤーはまずサーバーへ接続して、共有セッションのグループになる必要があります。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 > モードから決定されます。

プロジェクト設定 - Fusion
プロジェクト設定 - Fusion

接続と参加

「接続」と「参加」は別ステップです。最初にPhotonのマスターサーバーへ接続し、接続が成功したらルームの参加/作成を行います。

GDScript

FusionClient.connect_to_server("player_123", "us")

# 接続を待ち、その後に参加
FusionClient.connected_to_server.connect(func():
    FusionClient.join_or_create_room("lobby")
)

ローカル開発では、プロジェクト設定のfusion/connection/modeLocalに設定してください。

ルーム操作

ルームとは、プレイヤーがオブジェクトを同期し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