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

コロナによる需要変化 コロナパンデミックの影響で、人々は外に出られなくなり、自宅で過ごす時間が増えました。 この自粛ムードの中、下記のようなビジネスの需要変化が引き起こされています。 【利用者減少】 ...

2

米国レストランの決済時に毎日お世話になっていた「Square」のビジネスモデルについて本日はふれていきたいと思います。 「Square」とは、ネットにつながったモバイル端末と専用のカードリーダーを用意 ...

3

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

4

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

5

ナイキのSNKRSが、なぜこれほどまでに人気なのか?調べてみました。 きっかけは米国での友達との会話。彼は自分のシューズをみせて、「これ20万円もしたんだぜ。」と語ってくれました。 あまり靴に興味がな ...

-code, VR
-,

Copyright© BUSINESS HACKER , 2021 All Rights Reserved Powered by AFFINGER5.