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

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

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.