code VR

Unity×VR(162)

スポンサーリンク

//tips

//システム微調整

開始画面のボタンのフォントを変更し、点滅する仕様を追加する。

GoogleのOswaldフォントをダウンロードし、アタッチ、テキストサイズを拡大し、背景はなくす。

スクリプトでテキストを点滅させる。

こちらのスクリプトをテキストにアタッチした。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class Blink : MonoBehaviour
{

public float speed = 1.0f;
private Text text;
private float time;

void Start()
{
text = this.gameObject.GetComponent<Text>();
}

void Update()
{
text.color = GetAlphaColor(text.color);
}

Color GetAlphaColor(Color color)
{
time += Time.deltaTime * 5.0f * speed;
color.a = Mathf.Sin(time) * 0.5f + 0.5f;

return color;
}
}

今までdemoは一つしか使えないと思っていたが、buildの際に保存する名前を変更するだけで複数画面表示することができることがわかった。demo-demo3まで作成することで、4プレイヤー分の挙動を確かめることができる。demoの実行は保存先でファイルをクリックすればよく、demo同士の同期もきちんとできた。

4人対戦ができるようにroomの遷移条件も変えていく。

ボタンにアタッチされているNetworkManagerBスクリプトのコールバックメソッドを一部変更。

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

if (PhotonNetwork.CurrentRoom.PlayerCount == 4)
{
//SceneManager.LoadSceneAsync("Env2", LoadSceneMode.Single);
SceneManager.LoadSceneAsync(PhotonNetwork.CurrentRoom.Name, LoadSceneMode.Single);

PhotonNetwork.IsMessageQueueRunning = true;

}
}

同時にSceneMoveスクリプトも変更。

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

if (PhotonNetwork.CurrentRoom.PlayerCount == 4)
{
Debug.Log("OnJoinedRoomCurrentRoom.PlayerCount");

//SceneManager.LoadSceneAsync("Env2", LoadSceneMode.Single);
SceneManager.LoadSceneAsync(PhotonNetwork.CurrentRoom.Name, LoadSceneMode.Single);

PhotonNetwork.IsMessageQueueRunning = true;

}
}

各ボタンのプレイヤー数テキスト表示を扱うRoomlistscountスクリプトの分母を4に変更。

これでLobbyでの表示および遷移は4人で行われるようになっているはず。demoを再度生成し直す。

なぜか2/4までしか進めず、それ以降は入室ボタンを押しても反応しない現象が起きた。入室が2里以上できないような制約がかかっていないか確認する。

他のルームボタンを誤クリックしたためかと確認したが違うよう。

スクリプトではなくインスペクターのデフォルト設定が2のままになっているため、そちらが反映されていた模様。

無事に遷移の方確認できた。

最初にルームに入った場合、後のルームのプレイヤー数状況がうまく取得できていないので、public override void OnPlayerEnteredRoom(Player newPlayer)を受け取った場合もチェックを実施するようにする。

下記のようにroomリストを取得し、各のルームのカウントを取得するようにした。

public override void OnPlayerEnteredRoom(Player newPlayer)
{
foreach (RoomInfo room in PhotonNetwork.GetRoomList())
{
if (room.Name == "Env2")
{
countbuttontext[0].GetComponent<Text>().text = room.PlayerCount + " / 4";// + PhotonNetwork.CurrentRoom.MaxPlayers;
}

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

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

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

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

}

PhotonNetwork.GetRoomList()に対して、NotImplementedException: The method or operation is not implemented.が返ってきた。

OnReceivedRoomListUpdateが呼ばれた以後でないと
GetRoomList()にデータが入らない仕様とのこと、ここでRoomListUpdateの問題に戻ってきた。

ロビーに入っていないとRoomListUpdateは呼ばれないという記述があったので、ロビーにh入っていることを確認。SceneMoveスクリプトにてロビーにjoinするメソッドは記載しているので全てのシーンでロビーには入室している。

private void JoinLobby()
{
if (PhotonNetwork.IsConnected)
{
PhotonNetwork.JoinLobby();
Debug.Log("ロビーに入りました");
}
}

それでもOnRoomListUpdate()が呼ばれない理由は、You are automatically leaving any lobby when you join a roomと、ルームに入ってしまったらロビーから抜けてしまうからであることがわかった。

とすると、先にルームに入ってしまったらルーム情報を受け取れなくなる。

これは別の方法を考える必要がありそう。RPCで同期メソッドを実行するか、ルーム入室者は入室画面に遷移するようにするかでの処理を行えそう。

今回はせっかくなのでロビーにいながら入室者の数も確認できる方法を継続して探してみる。

人気の記事

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.