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

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

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.