code VR

Unity×VR(79)

スポンサーリンク

//tips

//複数カメラの制御

プレイヤーの子要素としてCameraControllerを扱い、prefab化したプレイヤーからでもカメラの切り替えをできるように考える。

一旦2つのカメラの切り替えをおこなすスクリプトへ編集し直した。

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

public class CameraController : MonoBehaviour
{
private GameObject mainCamera;//メインカメラ格納用

[SerializeField]
GameObject subCamera;

[SerializeField]
GameObject subCamera2;

public bool onsubc=false;
public bool onsubc2 = false;

void Start()
{
mainCamera = GameObject.Find("MainCamera");

//サブカメラ非アクティブ
subCamera.SetActive(false);
subCamera2.SetActive(false);
}

public void ChangeCamera()
{
if (onsubc2 == false)
{
mainCamera.SetActive(!mainCamera.activeSelf);
subCamera.SetActive(!subCamera.activeSelf);
onsubc = !onsubc;

}

}
public void ChangeCamera2()
{
if (onsubc == false)
{
mainCamera.SetActive(!mainCamera.activeSelf);
subCamera2.SetActive(!subCamera2.activeSelf);
onsubc2 = !onsubc2;
}
}
}

このカプセルはプレイヤーではなくドローンとして扱いたいので、プレイヤーオブジェクトと二つ目のドローンオブジェクトを作成する。

また、UIの表示管理で特定のプレイヤーの出現が確認できた場合のみ操作ボタンを表示できるようにする。

プレイヤーオブジェクトを追加し、二つ目のドローンオブジェクトを作成。ドローンはボタンが押されたタイミングで出現し、あとは存在し続けるものとする。

Droneをプレイヤーの子としているせいで、プレイヤーが動くと発現したドローンまで動いてしまう。なので最初は子要素としておき、ボタンが押されたタイミングで親オブジェクトからthis.transform.parent = null;で切り離す方法を試す。

if (cameraController.onsubc == true) {

if (this.transform.parent != null)
{
this.transform.parent = null;
}
このように対応し、実現できた。

UIの方もdroneplayerとして操作する場合に表示されるようにしたい。同期の際にphotonisMineなどで修正することになるが、現段階でもシーンにdronepalyerが存在する場合に現れることとしてコードを記載しておく。

下記コードをdroneplayerにアタッチし、UIを最初から非表示にしていれば、droneplayerがいる場合のみにUIが表示されるようになる。今回は自分のシーンのみだが、複数人が参加する場合は、このスクリプトでは全ての参加者のシーンに表示されてしまうので、photonisMineでdroneplayerのみにUI表示させる設定も以後必要になる。

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

public class DroneplayerUI : MonoBehaviour
{
[SerializeField]
GameObject droneUI;

// Start is called before the first frame update
void Start()
{
droneUI.SetActive(true);
}
}

//シーン上の明度を下げる

ある条件下でシーンを暗くなるようにしたいので、その機能を実装していく。

Unityシーンで暗闇を作るには、Directional Lightを消し、Skyboxからの光を遮断する必要があるとのことなのでスクリプトから、これらが操作できないか調べていく。

Directional LightのIntensityおよびSkyboxのReflection Intensityを操作できれば良さそう。

ただ、画面のUIでpanelの明度調整でも暗闇と同様の効果を生み出せるので、そちらがどのような見た目になるのかを先に確認する。

時間経過でシーン画面を暗くするスクリプトをpanelにアタッチし、ボタンを押すとpanelをactiveにし、暗闇のエフェクトを表示させるようにした。

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

public class UIeffectdarker : MonoBehaviour
{
[SerializeField]
GameObject UIdark;

[SerializeField]
Darkeffect darkeffect;

public void UIDarkOn()
{
UIdark.SetActive(true);
}

public void UIDarkOff()
{
darkeffect.alfa = 0.7f;
UIdark.SetActive(false);
}
}

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

public class Darkeffect : MonoBehaviour
{
[SerializeField]
UIeffectdarker effectdarker;

public float speed = 0.1f; //透明化の速さ
public float alfa; //A値を操作するための変数

float timer;

void Start()
{
alfa = 0.7f;
}

void Update()
{
GetComponent<Image>().color = new Color(0, 0, 0, alfa);
timer += Time.deltaTime;
if (timer > 1)
{
alfa += speed;
timer = 0;
}
if (alfa >= 1)
{
effectdarker.UIDarkOff();
Debug.Log("a");
}
}
}

Panel操作だけでも案外大丈夫そう。

人気の記事

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.