code VR

Unity×VR(155)

スポンサーリンク

//tips

//ロビー整備

他のシーンでルーム入室された場合、自身のロビーにそのルームセットが生成されるが、自身のロビーに同じ遷移先を持つルームセットが二つできることになるので、対策を考える。

まずはRoomListViewBスクリプトの該当箇所を確認していく。

OnRoomListUpdate(List<RoomInfo> roomList)メソッドの下記の部分が該当する。

else if (!info.RemovedFromList)
{
// リスト要素を追加する
entry = (inactiveEntries.Count > 0)
? inactiveEntries.Pop().SetAsLastSibling() //Pop:inactiveEntriesからデータ取り出し
: Instantiate(roomListEntryPrefab, scrollRect.content);

entry.Activate(info);
activeEntries.Add(info.Name, entry);

}

リストを初期時点から固定させるとリストの追加削除は必要なく、人数が揃ったらルームセットをロックし、ゲーム終了時には公開できれば良いことになる。

RoomListViewBスクリプトとInputfieldButtonスクリプトの代わりとなるものを考えていく。

ルームセットへの決定ボタンは必要なくなるので、代わりに現在の入室者の表示をさせる箇所にする。

表示名は初期から設定。また同時に退室ボタンも作成する。

下記のようにlistから部屋ごとの入場数を算出することができるので、こちらの手法をうまく活用する。

foreach (RoomInfo room in PhotonNetwork.GetRoomList())
{
Debug.Log(room.name); //部屋名
Debug.Log(room.playerCount); //部屋の入場人数
Debug.Log(room.maxPlayers); //最大人数
}

PhotonNetwork.GetRoomList()はPUN2では使用できなくなっているので、ILobbyCallbacks.OnRoomListUpdate(List<RoomInfo> roomList)コールバックからルームのリストを呼び出す方法を考える。

RoomListViewBスクリプトで使用している下記の部分でも大体できそうなのでそちらで対応する。

// ルームリストが更新された時に呼ばれるコールバック
public override void OnRoomListUpdate(List<RoomInfo> roomList)
{

Debug.Log("OnRoomListUpdate(List<RoomInfo> roomList)");

foreach (var info in roomList)
{

NetworkManagerBスクリプトから確認できるように、
PhotonNetwork.CurrentRoom.PlayerCount + " / " + PhotonNetwork.CurrentRoom.MaxPlayers);で実際のルームプレイヤーのカウントは取れているので更新ごとにうまく表示を反映させられる方法を考えれば良い。

新たに下記のスクリプトを作成し、contentオブジェクトにアタッチ。

using System.Collections.Generic;
using Photon.Pun;
using Photon.Realtime;
using UnityEngine;
using UnityEngine.UI;

[RequireComponent(typeof(ScrollRect))]
public class Roomlistscount : MonoBehaviourPunCallbacks
{

public GameObject[] countbuttontext;

public override void OnRoomListUpdate(List<RoomInfo> roomList)
{

Debug.Log("OnRoomListUpdate(List<RoomInfo> roomList)");
Debug.Log(roomList);

foreach (var info in roomList)
{
if(info.Name == "Env2")
{
countbuttontext[0].GetComponent<Text>().text = info.PlayerCount + " / " + PhotonNetwork.CurrentRoom.MaxPlayers;
}

if (info.Name == "env22")
{
countbuttontext[1].GetComponent<Text>().text = info.PlayerCount + " / " + PhotonNetwork.CurrentRoom.MaxPlayers;
}

if (info.Name == "env23")
{
countbuttontext[2].GetComponent<Text>().text = info.PlayerCount + " / " + PhotonNetwork.CurrentRoom.MaxPlayers;
}

if (info.Name == "4")
{
countbuttontext[3].GetComponent<Text>().text = info.PlayerCount + " / " + PhotonNetwork.CurrentRoom.MaxPlayers;
}

if (info.Name == "5")
{
countbuttontext[4].GetComponent<Text>().text = info.PlayerCount + " / " + PhotonNetwork.CurrentRoom.MaxPlayers;
}

}

}
}

うまくroomlistcountスクリプトを呼べていないよう。デバッグで確認していく。

public override void OnRoomListUpdate(List<RoomInfo> roomList)は他のシーンの参加者がjoinしたときに呼ばれるが、自身のjoinでは呼ばれない。

foreach (var info in roomList)は使えないので、PhotonNetwork.CurrentRoom.Nameで条件分岐させて確認を行った。

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

if (PhotonNetwork.CurrentRoom.Name == "Env2")
{
countbuttontext[0].GetComponent<Text>().text = PhotonNetwork.CurrentRoom.PlayerCount + " / 2";// + PhotonNetwork.CurrentRoom.MaxPlayers;
}

if (PhotonNetwork.CurrentRoom.Name == "env22")
{
countbuttontext[1].GetComponent<Text>().text = PhotonNetwork.CurrentRoom.PlayerCount + " / 2";// + PhotonNetwork.CurrentRoom.MaxPlayers;
}

if (PhotonNetwork.CurrentRoom.Name == "env23")
{
countbuttontext[2].GetComponent<Text>().text = PhotonNetwork.CurrentRoom.PlayerCount + " / 2";// + PhotonNetwork.CurrentRoom.MaxPlayers;
}

if (PhotonNetwork.CurrentRoom.Name == "4")
{
countbuttontext[3].GetComponent<Text>().text = PhotonNetwork.CurrentRoom.PlayerCount + " / 2";// + PhotonNetwork.CurrentRoom.MaxPlayers;
}

if (PhotonNetwork.CurrentRoom.Name == "5")
{
countbuttontext[4].GetComponent<Text>().text = PhotonNetwork.CurrentRoom.PlayerCount + " / 2";// + PhotonNetwork.CurrentRoom.MaxPlayers;
}

}

これで無事に反映されるようになった。次に一度入室した後に、退出させる操作を行う。

 

人気の記事

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.