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

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

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.