code VR

Unity×VR(164)

スポンサーリンク

//tips

//微調整

Roomlistscountスクリプトを編集し、数値加算を同期メソッドにする。

部屋への入室者がそのコールバック呼び出しを利用して、プレイヤー数の加算を行い、そちらを同期、その同期メソッド内にテキストの更新メソッドを組み込み反映を実施する流れとした。

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

if (PhotonNetwork.CurrentRoom.Name == "Env2")
{
players0 = int.Parse(countbuttontext[0].GetComponent<Text>().text) ;// + PhotonNetwork.CurrentRoom.MaxPlayers;
photonView.RPC(nameof(PlusNumber), RpcTarget.AllViaServer, 0);
}

if (PhotonNetwork.CurrentRoom.Name == "env22")
{
players1 = int.Parse(countbuttontext[1].GetComponent<Text>().text) ;// + PhotonNetwork.CurrentRoom.MaxPlayers;
photonView.RPC(nameof(PlusNumber), RpcTarget.AllViaServer, 1);
}

if (PhotonNetwork.CurrentRoom.Name == "env23")
{
players2 = int.Parse(countbuttontext[2].GetComponent<Text>().text) ;// + PhotonNetwork.CurrentRoom.MaxPlayers;
photonView.RPC(nameof(PlusNumber), RpcTarget.AllViaServer, 2);
}

if (PhotonNetwork.CurrentRoom.Name == "4")
{
players3 = int.Parse(countbuttontext[3].GetComponent<Text>().text) ; ;// + PhotonNetwork.CurrentRoom.MaxPlayers;
photonView.RPC(nameof(PlusNumber), RpcTarget.AllViaServer, 3);
}

if (PhotonNetwork.CurrentRoom.Name == "5")
{
players4 = int.Parse(countbuttontext[4].GetComponent<Text>().text) ;// + PhotonNetwork.CurrentRoom.MaxPlayers;
photonView.RPC(nameof(PlusNumber), RpcTarget.AllViaServer, 4);
}

 

}

[PunRPC]
void PlusNumber(int number)
{

if (number == 0)
{
players0++;
}

if (number == 1)
{
players1++;
}

if (number == 2)
{
players2++;
}

if (number == 3)
{
players3++;
}

if (number == 4)
{
players4++;
}

Shareroomplayers();
}

void Shareroomplayers()
{

countbuttontext[0].GetComponent<Text>().text = players0 + " / 4";

countbuttontext[1].GetComponent<Text>().text = players1 + " / 4";

countbuttontext[2].GetComponent<Text>().text = players2 + " / 4";

countbuttontext[3].GetComponent<Text>().text = players3 + " / 4";

countbuttontext[4].GetComponent<Text>().text = players4 + " / 4";

}

FormatException: Input string was not in a correct format.
System.Number.StringToNumber (System.String str, System.Globalization.NumberStyles options, System.Number+NumberBuffer& number, System.Globalization.NumberFormatInfo info, System.Boolean parseDecimal) (at <e1319b7195c343e79b385cd3aa43f5dc>:0)

引数の文字列が数値形式でないようで、FormatExceptionが発生。

players0 = int.Parse(countbuttontext[0].GetComponent<Text>().text)の取得部分を確認すると0/4で表示されており、これを0にすることで問題は解決した。

ただ、0表示にすると見栄えがよくないので、Substring(0, 1)で先頭の1文字のみを取得することで対応してみる。

if (PhotonNetwork.CurrentRoom.Name == "Env2")
{
players0 = int.Parse(countbuttontext[0].GetComponent<Text>().text.Substring(0, 1)) ;// + PhotonNetwork.CurrentRoom.MaxPlayers;
photonView.RPC(nameof(PlusNumber), RpcTarget.AllViaServer, 0);
Debug.Log("players0"+players0);
}

こちらで対応できた。

ただ、2番目に入室する方のテキストに先に入室した分の加算がなされていないので同期メソッドを再度確認。

こちらのRPC同期が実行されていない [PunRPC]public void PlusNumber(int number)。

というのも、RPCは同一ルーム内の他プレイヤー側でメソッドを実行するものであり、まだ入っていない相手には実行されない。

代わりにpublic override void OnRoomListUpdate(List<RoomInfo> roomList)が呼ばれるのでこちらで対処する必要がある。

こちらでは現状のルーム内の状況を取得し、反映させていくことになる。

下記コードを復活させ、現状の部屋の状況を確認反映させる。

foreach (var info in roomList)
{
Debug.Log(info.Name);

if (info.Name == "Env2")
{
countbuttontext[0].GetComponent<Text>().text = info.PlayerCount + " / 4";
}

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

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

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

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

無事にテキスト表示ができたので退出処理についても同様に考えていく。

退室ボタンを押すと先に退室する方のテキストには反映され、部屋に残っている方のテキストには反映されていないのでそちらを修正する。

部屋に残っているプレイヤーシーンではOnPlayerLeftRoomが呼ばれるので、そちらで現状の部屋の状況を参照できるようにした。

public override void OnPlayerLeftRoom(Player otherPlayer)
{
if (PhotonNetwork.CurrentRoom.Name == "Env2")
{
players0 = int.Parse(countbuttontext[0].GetComponent<Text>().text.Substring(0, 1));// + PhotonNetwork.CurrentRoom.MaxPlayers;
photonView.RPC(nameof(MinusNumber), RpcTarget.AllViaServer, 0);
Debug.Log("players0" + players0);
}

if (PhotonNetwork.CurrentRoom.Name == "env22")
{
players1 = int.Parse(countbuttontext[1].GetComponent<Text>().text.Substring(0, 1));// + PhotonNetwork.CurrentRoom.MaxPlayers;
photonView.RPC(nameof(MinusNumber), RpcTarget.AllViaServer, 1);
}

if (PhotonNetwork.CurrentRoom.Name == "env23")
{
players2 = int.Parse(countbuttontext[2].GetComponent<Text>().text.Substring(0, 1));// + PhotonNetwork.CurrentRoom.MaxPlayers;
photonView.RPC(nameof(MinusNumber), RpcTarget.AllViaServer, 2);
}

if (PhotonNetwork.CurrentRoom.Name == "4")
{
players3 = int.Parse(countbuttontext[3].GetComponent<Text>().text.Substring(0, 1)); ;// + PhotonNetwork.CurrentRoom.MaxPlayers;
photonView.RPC(nameof(MinusNumber), RpcTarget.AllViaServer, 3);
}

if (PhotonNetwork.CurrentRoom.Name == "5")
{
players4 = int.Parse(countbuttontext[4].GetComponent<Text>().text.Substring(0, 1));// + PhotonNetwork.CurrentRoom.MaxPlayers;
photonView.RPC(nameof(MinusNumber), RpcTarget.AllViaServer, 4);
}
}

[PunRPC]
public void MinusNumber(int number)
{
Debug.Log("MinusNumber(int number)");

if (number == 0)
{
players0--;
}

if (number == 1)
{
players1--;
}

if (number == 2)
{
players2--;
}

if (number == 3)
{
players3--;
}

if (number == 4)
{
players4--;
}

Shareroomplayers();
}

これで退室も問題なく行われるようになった。

ただ、一番上ではないルームをクリックすると、少し数値が混同する問題が発生しているのでそちらの確認していく。

人気の記事

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.