目的
まず、Photonとはオンライン上で同期を必要としたゲームなどを作る際に難しい部分の実装を担ってくれるプラットフォームになります。
今回はPhoton自体の扱いはある程度できることを前提にして、Photonで使用するサーバを自分で用意したい人向けにその設定の仕方を書きます。
例えば、ローカルのPCでサーバの設定をすることでオフライン環境でもPhotonを使った同期処理をすることが可能です。
[Sample] Photon Two Player Test https://t.co/vqsx8pGBJw
— pollenJP(@'ω'@) (@polleninjp) 2018年12月23日
↑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の公式ドキュメントはまあまあ充実しており、読めば細かい内容は理解できます(わけのわからん部分もある)。しかし、最初のとっかかりとしてはやはり大変な気がします。僕は特にこちらの記事にお世話になりました。
参考
- Photon Unity Networking: Main Page
- Photon Server SDK | Photon Engine
-
初期設定 | Photon Engine
- 手動で接続
- Unityオンラインゲーム作成【Chapter12】Lobbyシーンの作成 - Uniblo-ゆにブロ-
- 【Unity】僕もPhotonを使いたい Unity-技術メモ-PUN カテゴリーの記事一覧 - うら干物書き
- Unityで作る、画面遷移のあるメニュー - ころもソフトBlog
- PhotonNetwork.GetRoomList() always returns empty — Photon Engine
- Unity Photon(PUN+) の使い方 オブジェクト位置同期編(4/5) - 週刊SleepNel新聞
- クイックスタート | Photon Engine
- PUNを使ってネットワーク同期を行う -Vol.1- – Photon
- テクニカル – Photon