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

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

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.