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

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

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.