code VR

Unity×VR(85)

スポンサーリンク

//tips

//Photonでのグループ分け

先にphotonの人陣営と人狼陣営のグループ分けをシーン開始時に行ったが、UI表示が同じものになってしまった。

遷移先のsampleSceneに最初から配置していた確認用のplayerを消して、生成Gameplayerにより表示を行うものに変えると無事にグループの区別をつけて表示されたが、これは数字が重複していない場合の可能性あったので複数回繰り返した。

その際に狼側のUI表示に時間制限を加えた。

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

public class NumberProp : MonoBehaviour
{
[SerializeField]
GameObject faceon;

bool offwolf = false;

void Update()
{
if (PhotonNetwork.LocalPlayer.CustomProperties["PNumber"] is int pnumber)
{
if (pnumber == 0)
{
if(offwolf == false)
{
faceon.SetActive(true);
StartCoroutine("WolfUIoff");
}
}
Debug.Log(pnumber);
}
}

IEnumerator WolfUIoff()
{
yield return new WaitForSeconds(3);
offwolf = true;
faceon.SetActive(false);
}
}

やはり数字が重複してしまうケースがある。GamePlayer外のスクリプトから各プレイヤーに番号を割り振る仕組みを考える。

hashtable["PNumber"] = pnumber;のpnumberを外部から持ってくれば良いのでシーンに空オブジェクトを作成し、メソッドとして値のpnumberの引き出しを行わせ、その際に値に紐ずくリスト項目を削除することで、重複なしの値の取得を実現する。

その際Gameplayerスクリプト側では、findwithtagを使用し、親スクリプトをgetcomponentする必要があることを忘れない。

下記のpnumber代入用のリスト要素のスクリプトを作成。

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

public class Getpnumber : MonoBehaviour
{
List<int> numbers = new List<int>();
public int ransu;

private void Start()
{
for (int i = 0; i <= PhotonNetwork.PlayerList.Length - 1; i++)
{
numbers.Add(i);
}
}

public void GetpnumberOn()
{
if (PhotonNetwork.PlayerList.Length == 0) return;
RandomNumber();
}

void RandomNumber()
{
int index = Random.Range(0, numbers.Count);

int ransu = numbers[index];
Debug.Log(ransu);

numbers.RemoveAt(index);

}
}

同時に、Gameplayerスクリプトは下記のように修正。

Debug.Log("PhotonNetwork.countOfPlayers"+ PhotonNetwork.PlayerList.Length);

var hashtable = new ExitGames.Client.Photon.Hashtable();

getpnumber.GetpnumberOn();
pnumber = getpnumber.ransu;

hashtable["PNumber"] = pnumber;
PhotonNetwork.LocalPlayer.SetCustomProperties(hashtable);

これで再確認してみた。これでも同じ現象が起きてしまう。今度は常に双方に人狼側の表示がなされるようになった。

Listではあるindexの要素を削除するとそれ以降の要素を一つずつコピーして詰めて表示されるが、そこは問題なかった。

Debug.Logを確認してみて分かったことは、GetpnumberスクリプトのDebug.Log(ransu);が1の場合でも、その後表示されるNumberPropスクリプトのDebug.Log(pnumber);が0になっていること。

シーンにスクリプトを置いたことで、参照先が各gameplayerスクリプトに属するものでなくなったしまったかと考え、public int ransu;でGetnumberから乱数抽出された値をpnumber = ransu;そしてhashtable["PNumber"] = pnumber;として代入することにしたが、これも失敗。

NumberPropスクリプトのpnumber == 0を各playerが保持するものを参照し、 faceon.SetActive(true);を自分が操作するplayerがいる画面上にしか表示しないようにしたいので、PhotonNetwork.LocalPlayer.CustomProperties["PNumber"] is int pnumberの詳細理解とphoton is Mineの組み込みにより操作プレイヤーのUI上にのみ表示する方法を探っていく。

 

人気の記事

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.