code VR

Unity×VR(94)

スポンサーリンク

//tips

//photonプレイヤー生成でのスポーン地点の指定

ロビーシーンからの遷移後のスポーン位置調整は現在SampleSceneスクリプトで実行している。

private void Start()
{
// PhotonServerSettingsに設定した内容を使ってマスターサーバーへ接続する
PhotonNetwork.ConnectUsingSettings();

// マッチング後、ランダムな位置に自分自身のネットワークオブジェクトを生成する
var v = new Vector3(Random.Range(-3f, 3f), 0.5f,Random.Range(1f, 2f));

GameObject Prefab = PhotonNetwork.Instantiate("GamePlayer1", v, Quaternion.identity);

}

PhotonNetwork.ConnectUsingSettings();までをStartメソッドで実行させ、場所の設定とInstantiateはphotoncountを参照させながらできないか考える。

まずはInstantiateコードそのものをphotoncountの方へ移動させた。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Photon.Pun;
using Photon.Realtime;

public class photonCount : MonoBehaviourPunCallbacks
{
[SerializeField]
NumberProp numberProp;

int lobbyPlayerMaxCount;

SampleScene0126 sampleScene0126;

/*
public void BeforeCount()
{
photonView.RPC(nameof(LobbyCount), RpcTarget.AllViaServer, PhotonNetwork.LocalPlayer.UserId);
}
*/

private void Start()
{
photonView.RPC(nameof(LobbyCount), RpcTarget.AllViaServer, PhotonNetwork.LocalPlayer.UserId);
}

// [PunRPC]属性をつけると、RPCでの実行が有効になる
[PunRPC]
public void LobbyCount(string id)
{
lobbyPlayerMaxCount++;

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

public void Onflag(string id)
{
if (lobbyPlayerMaxCount == 1)
{
if (id == PhotonNetwork.LocalPlayer.UserId)
{
//numberProp = GameObject.FindWithTag("PlayerNumber").GetComponent<NumberProp>();
numberProp.Humanon();

// マッチング後、ランダムな位置に自分自身のネットワークオブジェクトを生成する
var v1 = new Vector3(-2, 0.5f,-2);
GameObject Prefab = PhotonNetwork.Instantiate("GamePlayer1", v1, Quaternion.identity);
}
//flag = false;
}

if (lobbyPlayerMaxCount == 2)
{
if (id == PhotonNetwork.LocalPlayer.UserId)
{
//numberProp = GameObject.FindWithTag("PlayerNumber").GetComponent<NumberProp>();
numberProp.Faceon();

// マッチング後、ランダムな位置に自分自身のネットワークオブジェクトを生成する
var v2 = new Vector3(2, 0.5f, 2);
GameObject Prefab = PhotonNetwork.Instantiate("GamePlayer1", v2, Quaternion.identity);
}
//flag = false;
}

if (lobbyPlayerMaxCount == 3)
{
if (id == PhotonNetwork.LocalPlayer.UserId)
{
//numberProp = GameObject.FindWithTag("PlayerNumber").GetComponent<NumberProp>();
numberProp.Humanon();

// マッチング後、ランダムな位置に自分自身のネットワークオブジェクトを生成する
var v3 = new Vector3(-2, 0.5f, 2);
GameObject Prefab = PhotonNetwork.Instantiate("GamePlayer1", v3, Quaternion.identity);
}
//flag = false;
}

if (lobbyPlayerMaxCount == 4)
{
if (id == PhotonNetwork.LocalPlayer.UserId)
{
//numberProp = GameObject.FindWithTag("PlayerNumber").GetComponent<NumberProp>();
numberProp.Humanon();
var v4 = new Vector3(2, 0.5f, -2);
GameObject Prefab = PhotonNetwork.Instantiate("GamePlayer1", v4, Quaternion.identity);
}
//flag = false;
}
}
}

こちらでスポーン地点の指定がきちんと機能した。

//キャラクターの指定とキャラクターに準拠したUIの表示

各種キャラクターの一つを選択し、そのキャラクターの個性が反映されたUIを取得・表示する。これはキャラクター選択シーンとプレイシーンに分割し、ロビー入室→キャラクター選択シーン→プレイシーンと遷移していく流れが自然。

まずはキャラクター選択シーン→プレイシーンとなる簡単な例から作成してみる。

Imageにbuttonコンポーネントをアタッチしたものをクリックすると、次のシーンに遷移して、クリックの際に受け取った値をもとに表示UIを選択し、表示させるようにしたい。

だが、以前確認したようにシーン移動の際に値は消失してしまうので、キャラクター選択シーンは時間制限付きUI表示として、プレイシーン内で表示させることにする。

さらに選択時間制限も追加し、時間内に選ばなかった場合は初期設定が選ばれる。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class CharaUIchange : MonoBehaviour
{
[SerializeField]
GameObject baseui;

[SerializeField]
GameObject ui1;

[SerializeField]
GameObject ui2;

[SerializeField]
private float seconds;
// 前のUpdateの時の秒数
private float oldSeconds;

[SerializeField]
GameObject timerText;

Text timer;

void Start()
{
seconds = 0f;
oldSeconds = 0f;
timer = timerText.GetComponent<Text>();
}

void Update()
{
seconds += Time.deltaTime;

if (seconds >= 10f)
{
OpenUi1();
}
// 値が変わった時だけテキストUIを更新
if ((int)seconds != (int)oldSeconds)
{
timer.text = (10-seconds).ToString("f0");
}
oldSeconds = seconds;
}

public void OpenUi1()
{
ui1.SetActive(true);
StartCoroutine("thisHide");
}

public void OpenUi2()
{
ui2.SetActive(true);
StartCoroutine("thisHide");
}

IEnumerator thisHide()
{
yield return new WaitForSeconds(1);
baseui.SetActive(false);
}
}

この機能と先日作成したphotoncountの機能を組み合わせていく。

ロビー遷移後のSampleScene3でまずキャラクター選択UIを表示し、キャラクター画像クリック時にlobbyPlayerMaxCountを加算していく形にする。photonCountのpublic void BeforeCount()を復活させ、void Startを削除する。

人間・人狼表示がうまく最前面にこなかったのでcanvasのsort orderの値を大きくした。

characterUIの表示がcharacterpick時のクリック画像と異なっているので下記の仕組みをうまく利用しながら個別表示を行わせられるように考えていく。

if (lobbyPlayerMaxCount == )
{
if (id == PhotonNetwork.LocalPlayer.UserId)

 

人気の記事

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.