code VR

Unity×VR(87)

スポンサーリンク

//tips

//Photon同期の際の数値共有

ボタンクリックをシーンのスクリプトにカウントさせ、該当クリック数にてボタンを押したプレイヤーのフラグを変更する方法を考える。

プレイヤーのMoveMineスクリプトとシーンのNumberpropスクリプトに同一ボタンのクリックで発動させるメソッドをアタッチさせて、2回目のクリック当事者にUI表示をさせるようにする。

プレイヤースクリプトに下記のonflagメソッドを追加、Numberpropスクリプトに LobbyCountメソッドを組み込んだが、やはりカウントは各プレイヤーのシーンごとになされ、カウント数が共有されない。

public void Onflag()
{
numberProp = GameObject.FindWithTag("PlayerNumber").GetComponent<NumberProp>();
int Mycount = numberProp.lobbyPlayerMaxCount;
Debug.Log(Mycount);

if (Mycount == 1)
{
numberProp = GameObject.FindWithTag("PlayerNumber").GetComponent<NumberProp>();
numberProp.Faceon();
//flag = false;
}
}

public void LobbyCount()
{
lobbyPlayerMaxCount++;
Debug.Log(lobbyPlayerMaxCount);
moveMine.Onflag();
}

今度はPlayerprefsのデータ保存を用いてこの問題に対応できないか考える。

public void LobbyCount()
{
lobbyPlayerMaxCount++;

PlayerPrefs.SetInt("Count", lobbyPlayerMaxCount);
PlayerPrefs.Save();

Debug.Log(lobbyPlayerMaxCount);
moveMine.Onflag();
}

public void Onflag()
{
numberProp = GameObject.FindWithTag("PlayerNumber").GetComponent<NumberProp>();
int Mycount = PlayerPrefs.GetInt("Count", 0); ;
Debug.Log(Mycount);

if (Mycount == 2)
{
numberProp = GameObject.FindWithTag("PlayerNumber").GetComponent<NumberProp>();
numberProp.Faceon();
//flag = false;
}
}

Playerprefsでデータ保存してもそれはシーンごとに保存データは別れてしまうので失敗。

下記2サイトを参考に再度カスタムプロパティの付与に挑戦していく。

https://qiita.com/OKsaiyowa/items/118be61ddaa175aae3e6

https://connect.unity.com/p/pun2deshi-meruonraingemukai-fa-ru-men-sono4

プレイヤーのカスタムプロパティの値を取得する場合は、カスタムプロパティの値がobject型でしか取得できないため、is演算子を利用することで、適切な型にキャストできるかの判定を行い、問題なければその結果を変数で受け取る処理を利用する。

上記サイトのPlayerPropertyExtensionsスクリプトを導入した後に、MoveMineスクリプトに下記のメソッドを導入し、デバッグで数字を確認するも、シングルプレイヤーの時はきちんと0と表示されるが、マルチプレイヤーになった際にデバッグ表示がされなくなった。

public void SetMyCustomProperties()
{
//自分のクライアントの同期オブジェクトにのみ
if (photonView.IsMine)
{
List<int> playerSetableCountList = new List<int>();

//制限人数までの数字のリストを作成
//例) 制限人数 = 4 の場合、{0,1,2,3}
int count = 0;
for (int i = 0; i < _PLAYER_UPPER_LIMIT; i++)
{
playerSetableCountList.Add(count);
count++;
}

//他の全プレイヤー取得
Player[] otherPlayers = PhotonNetwork.PlayerListOthers;

Debug.Log("otherPlayers.Length" + otherPlayers.Length);
//他のプレイヤーがいなければカスタムプロパティの値を"0"に設定
if (otherPlayers.Length <= 0)
{
//ローカルのプレイヤーのカスタムプロパティを設定
int playerAssignNum = otherPlayers.Length;
PhotonNetwork.LocalPlayer.UpdatePlayerNum(playerAssignNum);
Debug.Log("playerSetableCountList[0]" + playerSetableCountList[0]);
return;
}

//他のプレイヤーのカスタムプロパティー取得してリスト作成
List<int> playerAssignNums = new List<int>();
for (int i = 0; i < otherPlayers.Length; i++)
{
playerAssignNums.Add(otherPlayers[i].GetPlayerNum());
}
Debug.Log("playerAssignNums" + playerAssignNums);

//リスト同士を比較し、未使用の数字のリストを作成
//例) 0,1にプレーヤーが存在する場合、返すリストは2,3
playerSetableCountList.RemoveAll(playerAssignNums.Contains);

//ローカルのプレイヤーのカスタムプロパティを設定
//空いている場所のうち、一番若い数字の箇所を利用
PhotonNetwork.LocalPlayer.UpdatePlayerNum(playerSetableCountList[0]);

Debug.Log("playerSetableCountList[0]" + playerSetableCountList[0]);
}
}

デバッグで細かくみていくとphotonView.IsMineが問題のようで、0は表示されるが1まで進めない。

public void SetMyCustomProperties()
{
Debug.Log("0");
//自分のクライアントの同期オブジェクトにのみ
if (photonView.IsMine)
{
Debug.Log("1");

Demoのbuild and runを実行する前にUnityエディターを先に実行することでphotonView.IsMineとしてUnityエディターを認識させることができた。

playerSetableCountList[0]も1の表示を獲得することができたが、demoでボタンをクリックした後も同様の表示となり、値の共有ができないよう。

異なるディスプレイ間で共有する値を持てる機能を模索中。

現状ではRPCを用いて送受信する方法が助けになりそう。

https://connect.unity.com/p/pun2deshi-meruonraingemukai-fa-ru-men-sono3

人気の記事

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.