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

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

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.