冬乃Tech Blog

主にUnityでのC#コーディングで得た知見をまとめていく

UnityとPhotonでローカルネットワーク通信をする

経緯

最近筆者がオフライン環境でPhoton通信をしようとしたところ、最初うまくできずに困っていたが、解決策を見つけた。
インターネットにつながっていないオフラインな環境下でのPhoton通信についての記事をあまり見かけなかったのでここいらでまとめておく。

そもそもインターネットのない環境でPhoton通信できるのか

結論から言うとPhoton Server起動時にインターネット接続が必要。
一度起動すればオフラインにしても大丈夫。

どうやらサーバーを起動する際に、持っているライセンスが有効かどうかをインターネット経由で確認している模様。

今回使用しているもの

Unity 2021.1.0f1
PUN 2 v2.30.0
Photon OnPremise Server v4.0.28.2962

ネットワーク構成

PC2台を用意して、ルーターにそれぞれ有線と無線で接続。
有線接続のPC1にはサーバーとアプリを、無線接続のPC2にはアプリのみを入れて通信をしようとした。 f:id:fuyunomikan1223:20210828014201p:plain

問題1.サーバーが起動しなかった

前述したとおり、Photon Server v4はサーバー起動時にインターネット経由でライセンスの有効性を確認する。
そのためオフライン環境で動作させるためには、サーバー起動時のみオンラインにしてライセンス認証を通す必要がある。(オフラインとは)
オンライン認証のいらない特殊なライセンスは公式HPには存在しないけど、サポート連絡したら何かあるかも。

問題2.サーバーは起動したがアプリから接続できない

これはバージョンの相性などがあると思うが、筆者の環境ではシリアル化プロトコルのバージョンを変更することで解決できた。
現状のクライアント側のPhotonではプロトコルバージョン1.8をデフォルトで使用するようになっているが、今のところPhoton Server SDKはこれに対応しておらず、クライアントから接続を試みてもはじいてしまうらしい。
Unityの場合、サーバーに接続する前にクライアント側(Unityアプリ側)で以下のスクリプトでシリアル化プロトコルバージョンを変えることで接続できるようになる。

//シリアル化プロトコルのバージョンを1.6に変更する
PhotonNetwork.NetworkingClient.LoadBalancingPeer.SerializationProtocolType = ExitGames.Client.Photon.SerializationProtocol.GpBinaryV16;

この問題は2021/8/28現在、V4.0.29.11263でも既知な模様
https://doc.photonengine.com/ja-jp/realtime/current/getting-started/onpremises-or-saas