code VR

Unity×VR(159)

スポンサーリンク

//tips

//スポーン位置設定

プレイヤーおよびゴーレムのスポーン位置を調整する。

スポーン位置は現在固定なので、ランダム要素を加えていく。

photonCountのvar v = new Vector3(35, 5, 120);部分をランダムで切り替えられるようにしたいので、座標vのパターンを複数個作り、ランダムな数値の領域で切り替えが行われるようにする。

下記のようにphotoncountスクリプトを一部変更し、キャラクターのスポーン位置をランダムにした。

float indexrandom = Random.Range(1, 100);

Debug.Log(indexrandom);

if (indexrandom < 30)
{
v = new Vector3(35, 5, 120);
}
else if(indexrandom < 60 && indexrandom >= 30)
{
v = new Vector3(30, 5, 120);
}
else
{
v = new Vector3(25, 5, 120);
}

if (chara == 1)
{
//var v = new Vector3(35, 5, 120);
PhotonNetwork.Instantiate("Deer", v, Quaternion.identity);
}

こちらできちんと対応できている。

ただ、プレイヤーの全スポーン位置を覚えられてしまったら簡単にwolf役が見つかってしまうので5つのスポーン位置を決め、それをプレイヤーごとにランダムに取っていく形にすることで、座標でのrole指定をさせないようにする。

先に配列を作成しておき、その値に各Vector3を入れ、値を取得されるたびに同期・削除して、配列のカウント内でランダムを繰り返し行わせる形にすれば対応できそう。

そちらの仕組みを導入する。

まずはリストを作成し、List<Vector3> spownnumbers = new List<Vector3>();、この中に座標を入れる。

void Awake()
{
spownnumbers.Add(new Vector3(35, 5, 120));
spownnumbers.Add(new Vector3(30, 5, 120));
spownnumbers.Add(new Vector3(25, 5, 120));
spownnumbers.Add(new Vector3(32, 5, 110));
spownnumbers.Add(new Vector3(32, 5, 120));
}

ここからランダムに一つ取り出し、取り出したリスト項目を削除すれば良いので下記の流れになる。

void shuffleposition()
{
if(spownnumbers.Count > 0)
{
int index = Random.Range(0, spownnumbers.Count);

v = spownnumbers[index];
Debug.Log(v);

spownnumbers.RemoveAt(index);
}
}

ここから更新したリスト内容を他のシーンに共有する必要がある。

なのでもう一手間加えて、下記のように同期処理も加えた。

void shuffleposition()
{
if(spownnumbers.Count > 0)
{
int index = Random.Range(0, spownnumbers.Count);

v = spownnumbers[index];
Debug.Log(v);

photonView.RPC(nameof(sharelist), RpcTarget.AllViaServer, PhotonNetwork.LocalPlayer.UserId);

}

}

[PunRPC]
void sharelist(int x)
{
spownnumbers.RemoveAt(x);
}

エラーが発生し、sharelistがString型で実行されているよう。

RPC method 'sharelist' found on object with PhotonView 4 but has wrong parameters. Implement as 'sharelist(String)'. PhotonMessageInfo is optional as final parameter.Return type must be void or IEnumerator (if you enable RunRpcCoroutines).

コードを見直してみると引数がPhotonNetwork.LocalPlayer.UserIdのままだったのでこちらをindexに修正。

photonView.RPC("Sharelist", RpcTarget.AllViaServer,index);

これで無事に機能した。

人気の記事

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.