こちら↓のサイトを参考にしながら、Photonによるネット対戦機能の実装を勧めています。
https://connect.unity.com/p/pun2deshi-meruonraingemukai-fa-ru-men-sono1
今作っているゲームには、バトル用のシーンとスタート画面用のシーンの2つがあります。
そこで、ゲーム中にバトルシーンから抜けた時に、マッチングのルームからも抜けるようにしたいのですが、この処理が上手くできなくて困っています。
Photonのマッチングの処理では、サイトのコードをコピペして、以下のものを使っています。
using Photon.Pun; using Photon.Realtime; using UnityEngine; using UnityEngine.SceneManagement; // MonoBehaviourではなくMonoBehaviourPunCallbacksを継承して、Photonのコールバックを受け取れるようにする public class SampleScene : MonoBehaviourPunCallbacks { private GameObject Unkoman; private void Start() { // PhotonServerSettingsに設定した内容を使ってマスターサーバーへ接続する PhotonNetwork.ConnectUsingSettings(); SceneManager.sceneUnloaded += OnSceneUnloaded; } // マスターサーバーへの接続が成功した時に呼ばれるコールバック public override void OnConnectedToMaster() { // "room"という名前のルームに参加する(ルームが無ければ作成してから参加する) PhotonNetwork.JoinOrCreateRoom("room", new RoomOptions(), TypedLobby.Default); Debug.Log("ルームに参加"); } // マッチングが成功した時に呼ばれるコールバック public override void OnJoinedRoom() { // マッチング後、ランダムな位置に自分自身のネットワークオブジェクトを生成する var StartPos = new Vector3(Random.Range(-10f, 10f), 4f, Random.Range(-10f, 10f)); Unkoman = PhotonNetwork.Instantiate("UnkomanEmpty", StartPos, Quaternion.identity); PhotonNetwork.Instantiate("UnkomanCamera", Unkoman.transform.position, Quaternion.identity); } void OnSceneUnloaded(Scene scene) { Debug.Log("Battleシーン終了"); PhotonNetwork.LeaveRoom(); } }
最後の関数でルームから抜ける処理を行っているのですが、エラーが出てルームから抜けることができません。
エラーの内容は
「現在のサーバ(MasterServer)では、LeaveRoom(254)の操作は許可されません。」
というものです。
自分で調べたりしたのですが、このエラー出てしまう原因が全くわかりません。
このエラーの対処法らしい情報がこちら↓のサイトにあったのですが、サイト通りのことを行っても変わらずエラーがでます。
https://forum.photonengine.com/discussion/15862/operation-setproperties-252-not-allowed-on-current-server-masterserver-on-demo
また、今回のエラーと関係があるかわかりませんが、1つだけ不可解なことがあります。
シーンから抜けた時に呼び出される関数内にDebug.Log("Batteシーン終了");がありますが、
このログが、バトルシーンからスタート画面のシーンに遷移する時に呼び出されるだけでなく、スタート画面からバトルシーンに遷移する時にも呼び出されています。
このコードはバトルシーンのObjにアタッチされているのですが、なぜスタート画面からバトルシーンに遷移するときにも呼び出されるのかわかりません。
そして、スタート画面からバトルシーンに遷移するときにもログが呼び出されてしまいますが、ゲームを実行してからまだバトルシーンを一度も開いたことがない状態で「スタート画面 → バトルシーン」の遷移を行う時だけはログが呼び出されません。
つまり、Unityエディターでスタート画面のシーンを開いて実行すると、その時は実行してからバトルシーンを一度も開いたことがない状態なので、「スタート → バトルシーン」の遷移を行っても最初の遷移だけはログが出力されません。
シーン遷移のコードSceneManager.LoadScene()の第2引数には何も書いていません。
今回のエラーは、この質問投稿に載せたスクリプトが原因ですか?
それとも、これとは別に僕が書いた他のスクリプトが原因である可能性が高いですか?
またもし前者なら、どんなコードに書き換えたらこのエラーが解決できるのかを教えて下さい。
回答1件
あなたの回答
tips
プレビュー