Photon Server SDKを使ったオンプレミスサーバでPhotonを接続 (オフライン同期処理可)


目的

 まず、Photonとはオンライン上で同期を必要としたゲームなどを作る際に難しい部分の実装を担ってくれるプラットフォームになります。
 今回はPhoton自体の扱いはある程度できることを前提にして、Photonで使用するサーバを自分で用意したい人向けにその設定の仕方を書きます。
 例えば、ローカルのPCでサーバの設定をすることでオフライン環境でもPhotonを使った同期処理をすることが可能です。

↑Photon使った例

目次

環境

  • Windows10 (Windows以外では現在サポートされていません)
  • Unity2018.13

今回動作確認をしたコードは以下にあげています。
https://github.com/pollenjp/learning_Unity3D_PhotonRealtime_TwoPlayers

Photon Server SDK

ダウンロード

Photon Server SDK | Photon Engine

 上のサイトに飛ぶと下のような画面が出てきます。「DOWNLOAD THE PHOTON SERVER SDK」をクリックして飛んでください。

 以下の画面に移ります。ここからダウンロードするのですが、注意が必要なのは現在の時点でうまく動作することが確認できるのは最新のV4ではなくv3なので「older versions」をクリックしてください。(v4で試してn時間消えた)

 すると今回の場合では「photon-server-sdk_v3-4-31-10808.exe」が表示されるのでそれをクリックすることでダウンロードできます。

インストール

「photon-server-sdk_v3-4-31-10808.exe」をダブルクリックして解凍します。
下の写真で指定したパス上に展開されます。

PhotonControlの起動

「ExitGames-Photon-Server-SDK_v3-4-31-10808」という名前のフォルダに解凍されるので、「ExitGames-Photon-Server-SDK_v3-4-31-10808 >> deploy >> bin_Win64 (bin_Win32) >> PhotonControl.exe」を開きます。

 これにより右下からPhotonControlにアクセスできるようになります。

IPの設定・確認

クライアントアプリケーションはIPアドレスを頼りにサーバと接続をするのでどのIPアドレスを使うか設定し確認します。(パブリックIPに設定していれば世界中からアクセスできますがファイアウォール等の基本的なネットワーク知識がないときはやらない方がいいかと)

Load Balancingの起動

「Start as application」をクリックすれば起動しますのでサーバ側の設定は以上です。

サーバに接続

 Server SDK で建てたサーバとの接続は通常の Photon Cloud に接続する場合とほぼ同じです。

【方法1】PhotonServerSettingsの利用

 ネット上の記事を見る限り一番多いやり方はPhotonServerSettingsに設定を書き込み、PhotonNetwork.ConnectUsingSettings()で呼び出す方法です。とても簡単でエラーが起きにくいので確かにこちらの方法がおすすめです。
 HostingをSelf Hostedに変更し、IPの設置・確認で確認したIPアドレスを入力します。 Server Portはデフォルトで5055番ポートを使うので通常通り起動していれば変更する必要はありません。ポート変換など行っている際は注意してください。

【方法2】関数にパラメータを渡す

 PhotonNetwork.ConnectToMaster()にIPなどを情報を渡して実行することで、OnConnectedToMaster()が呼び出されます。

    PhotonNetwork.ConnectToMaster(
        masterServerAddress: str,
        port:                str,
        appID:               str,
        gameVersion:         str);

 OnConnectedToMaster()内でPhotonNetwork.JoinLobby()を呼び出せば、PhotonServerSettings内で Auto-Join Lobby にチェックを付けた状態になります。

    private void OnConnectedToMaster()
    {
      ...
      ...
      PhotonNetwork.JoinLobby();
    }

    private void OnJoinedLobby()
    {
    }

以上の設定をするだけであとは普通のPhotonのコードが動作します。

おわりに

 Server SDKとは関係ありませんが、Photonの公式ドキュメントはまあまあ充実しており、読めば細かい内容は理解できます(わけのわからん部分もある)。しかし、最初のとっかかりとしてはやはり大変な気がします。僕は特にこちらの記事にお世話になりました。

参考