オフラインモード
オフラインモードはマルチプレイヤーコードをシングルプレイヤーゲームモードでも再利用できるようにする機能のことです。
シングルプレイヤーモードでもっとも需要が高い機能は、RPCの送信とPhotonNetwork.Instantiateの使用です。
オフラインモードのメインの主な目的は、未接続時にPhotonNetwork機能を使ってnull参照とその他のエラーを無効化することです。
ゲームの設定などで、シングルプレイヤーゲームを実行している点の履歴を把握したい場合などがあると思います。
ゲームの実行時に、全てのコードが再利用可能となります。
PhotonNetworkが誤りと意図的な動作を区別するため、オフラインモードの有効化は、手動で行う必要があります。
この機能の有効かは簡単で、以下のように行います。
C#
PhotonNetwork.OfflineMode = true;
一度trueに設定すると、Photonは OnConnectedToMaster()呼び出しを使用してコールバックし、そのあとでルームの作成が可能になります。このルームももちろんオフラインになります。
これで、接続やエラーを生成することなく、特定のマルチプレイヤーメソッドの再利用ができるようになりました。
重大なオーバーヘッドすらもありません。
下記に示してあるのはPhotonNetwork機能と変数、そしてオフラインモード中の結果を並べたリストです。
PhotonNetwork.LocalPlayer:アクターの数は常に-1です。PhotonNetwork.NickName: 予想通り動作します。PhotonNetwork.PlayerList: ローカルプレイヤーのみが所持しています。PhotonNetwork.PlayerListOthers常に空です。Always empty.PhotonNetwork.Time:Time.timeを返します。PhotonNetwork.IsMasterClient: 常にtrueです。PhotonNetwork.AllocateViewID(): 予想通り動作します。PhotonNetwork.Instantiate: 予想通り動作します。PhotonNetwork.Destroy: 予想通り動作します。PhotonNetwork.RemoveRPCs/RemoveRPCsInGroup/SetInterestGroups/SetSendingEnabled/SetLevelPrefix: シングルプレイヤーでは意味がないので、悪影響もありません。PhotonView.RPC: 予想通り動作します。
上記以外のプロパティやメソッドの使用は、想定外の結果を生み出すことになりかねませんし、動作自体しないこともあるでしょう。
シングルプレイヤーでゲームを開始して、後からマルチプレイヤーに移行しようとするとき、その代わりに1プレイヤーゲームのホスティングを検討するかもしれません。
これによってバッファリングされたRPCとインスタンス化コールが保存されますが、インスタンス化は接続後に自動的に持ち越されません。
PhotonNetwork.OfflineMode = false;を設定するか、Connect()を呼び出してオフラインモードを中止してください。