code VR

Unity×VR(33)

スポンサーリンク

//tips

//Photonロビーからシーン遷移

ロビーの入室ボタンを押したらSampleルームに入り、その後ルームに二人揃ったら、Sampleシーンに遷移させるスクリプトを書いたが、Sampleルームに二人が入っている状態にもかかわらず、シーン遷移が発生しなかった点について、アドバイスをいただいたので進めていく。

public void JoinOrCreateRoom()のスクリプトの中にif (PhotonNetwork.CurrentRoom.PlayerCount == 2)の条件を入れているが、現在実行されてログも表示させているpublic override void OnJoinedRoom()の方に遷移条件を写した方が良さそうとのこと。

部屋を作る際には若干のタイムラグがあるのでそれが問題なのかもしれない。

下記の形にOnJoinedRoom()を変更した。

public override void OnJoinedRoom()
{
Debug.Log("OnJoinedRoom");

// 部屋の情報を表示
if (PhotonNetwork.InRoom)
{
Debug.Log("RoomName: " + PhotonNetwork.CurrentRoom.Name);
Debug.Log("HostName: " + PhotonNetwork.MasterClient.NickName);
Debug.Log("Slots: " + PhotonNetwork.CurrentRoom.PlayerCount + " / " + PhotonNetwork.CurrentRoom.MaxPlayers);
}

if (PhotonNetwork.CurrentRoom.PlayerCount == 2)
{
SceneManager.LoadSceneAsync("Sample", LoadSceneMode.Single);

PhotonNetwork.IsMessageQueueRunning = true;
}
}

これを実行する時片方のプレイヤーしかうまく遷移できなかったので、新しくルームに入ってくる人がいると呼ばれるOnPlayerEnteredRoom(Player newPlayer)の中にコードを移してみる。

public override void OnPlayerEnteredRoom(Player newPlayer)
{
Debug.Log("OnPlayerEnteredRoom");

if (PhotonNetwork.CurrentRoom.PlayerCount == 2)
{
SceneManager.LoadSceneAsync("Sample", LoadSceneMode.Single);

PhotonNetwork.IsMessageQueueRunning = true;

}
}

これも片方のみ遷移したので、OnJoinedRoom()とOnPlayerEnteredRoom(Player newPlayer)の両方ともにコードを残してみたら両方がきちんと遷移した。

//プレイヤーで区別可能なインベントリの作成方法

個別プレイヤーの生成はSampleシーンのsampleスクリプトから生成されているので、同様にprefab化すれば同じことができるのではないかと考える。

PhotonNetwork.Instantiate("GamePlayer", v, Quaternion.identity);の後ろにPhotonNetwork.Instantiate(“Inventory”, v, Quaternion.identity);として追加する。

Canvasの子要素として生成するため
ui_clone.transform.SetParent(this.canvas.transform,false);も記載する。

こちらの方法でcanvas傘下も自動生成できるようになったが、インベントリーを個別に分けることはできず、別途下記のエラーも生じた。

NullReferenceException: Object reference not set to an instance of an object
InventoryUI.UpdateUI () (at Assets/Script/InventoryUI.cs:18)
Inventory.Start () (at Assets/Script/Inventory.cs:26)

ネットワークの同期関係について質問中。

//ロビーからターゲットのシーンへの遷移

現在はroom2ロビーの入室ボタンを押すとSampleSceneに遷移するので、これをSampleScene2,3などに遷移先を変更してみる。

新規シーンroom3を作成し、canvas下を見直す。EnterButtonをクリックした際に発動するメソッドをJoinOrCreateroomではなく、OnJoinedRoom()へ変更。

メソッド内の遷移部分をSceneManager.LoadSceneAsync("Sample3”, LoadSceneMode.Single);へ変更。

下記エラーが発生。

NullReferenceException: Object reference not set to an instance of an object
NetworkManagerB.OnJoinedRoom () (at Assets/NetworkManagerB.cs:208)

以前はif (PhotonNetwork.InRoom)以下のHost nameなどがコンソールに表示されていたがされなくなっている。

デバッグで辿っていくと、「room Sampleに入りました」などの文言がなく、そもそもルームがないのではないかと考える。

EnterButtonのクリックを元のJoinOrCreateroomに戻すとどうなるか確認する。ルーム名はsampleのままで遷移先をsample scene3に変更する。

無事にsample scene3に遷移することができた。ただプレイヤーオブジェクトが生み出されないので、そちらを修正していく。

まずは先の遷移後にDebug.Logがどこまで読まれているかを確認する。

シーン遷移後のコンソールを確認したところ、PhotonNetwork.InstantiateをするOnJoinedRoom()は呼ばれておらず、呼ばれていたのはStart()のみであった。

なのでStart()メソッドへと下記を移動させて、挙動がどうなるか確認する。

// マッチング後、ランダムな位置に自分自身のネットワークオブジェクトを生成する
var v = new Vector3(Random.Range(-3f, 3f), Random.Range(1f, 2f));

PhotonNetwork.Instantiate("GamePlayer", v, Quaternion.identity);

GameObject ui_clone = PhotonNetwork.Instantiate("Inventory", v, Quaternion.identity);

GameObject canvas = GameObject.Find("Canvas");

//canvasの子に指定
ui_clone.transform.SetParent(canvas.transform, false);

これにより入室後に同期させることができた。

なぜか2人しかいないはずなのに3つ目のオブジェクトが発生している問題や下記のエラーが出ている点を検証していくことになる。

ConnectUsingSettings() failed. Can only connect while in state 'Disconnected'. Current state: Connected
UnityEngine.Debug:LogWarning(Object)
Photon.Pun.PhotonNetwork:ConnectUsingSettings(AppSettings, Boolean) (at Assets/Photon/PhotonUnityNetworking/Code/PhotonNetwork.cs:1081)
Photon.Pun.PhotonNetwork:ConnectUsingSettings() (at Assets/Photon/PhotonUnityNetworking/Code/PhotonNetwork.cs:1074)
SampleScene1125:Start() (at Assets/SampleScene1125.cs:11)

NullReferenceException: Object reference not set to an instance of an object
InventoryUI.UpdateUI () (at Assets/Script/InventoryUI.cs:18)
Inventory.Start () (at Assets/Script/Inventory.cs:26)

 

人気の記事

1

皆さん、ついに、エアラインでも、サブスクリプションが始まったのはご存じですか? まだ実験段階ですが、ANAが、定額全国住み放題サービスを提供する「ADDress」と組んで、国内線を4回まで定額利用可能 ...

2

無料でネットショップを開けるアプリとして多くの人に驚きを与えたBASE株式会社が、2019年10月25日東証マザーズに上場しました。2020年2月時点で90万店を超えるショップを抱えるまでに成長してい ...

3

2011年にサービスを開始してから圧倒的な成長率を誇るインテリア通販サイト 【FLYMEe/フライミー】を皆さんご存じでしょうか。 「自分のイメージするインテリア、本当に欲しいインテリアがどこにあるの ...

4

ついに、noteの月間アクティブユーザー数が4400万人(2020年3月時点)に到達しました。 そもそも、「note」とは、クリエイターが、文章やマンガ、写真、音声を投稿することができ、ユーザーはその ...

5

ボードゲームカフェが1日2回転で儲かるという記事をみつけたので興味を持ち、調べてみました。 まずは、需要がどれくらいあるのか、市場のようすからみていきましょう。 世界最大のボードゲーム市場はドイツで、 ...

-code, VR
-,

Copyright© BUSINESS HUNTER , 2023 All Rights Reserved Powered by AFFINGER5.