UNITY VR應用(二){360°環景移動導覽-CardboardGVR}

本系列上一篇已經講到如何做出環景的幾個方法,那經常會看到類似GoogleMap的街景導覽移動又是怎麼達成的呢?現在就來看看吧。vive

環景球集合

首先,我們使用了前一篇(UNITY VR應用(一){360°環景製作-CardboardGVR}),最後提到的做法製作數個要切換的場景,球型3D物件+Cubemap的材質球。
animation-20180531001


animation-20180531001
 

GVR準心&互動

接下來,找到GVR套件提供的準心GvrReticlePointer預制物件,並放入攝影機中,這樣我們的畫面上就有一個可供瞄準的參考。(而且該物件的材質球上可以調整顏色)
animation-20180531003
animation-20180531002


然後在攝影機上加入GVR用的互動射線元件
animation-20180531004


以及,場景上放置GVR專屬的事件偵測預制物件GvrEventSystem,配合GvrPointerPhysicsRaycaster使用,同時在球型背景上想產生互動的位置放上一個3DObject(必須擁有碰撞器),掛上EventTrigger就能產生觸碰反應。

animation-20180531006
animation-20180531007


按下PLAY執行後把準心放到球上,應該會看到準心放大成圓圈狀態,這樣我們的觸發條件就已經達成了
animation-20180531005
 

流程控制

創建一個ViewSystem.cs腳本於攝影機上,內容如下

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ViewSystem : MonoBehaviour {
    public List<GameObject> room;//裝載環景球的清單
    private GameObject tmpObj,targetObj;//暫存的環景球,目標的環景球
    float exposure = 1f;//材質球上淡入淡出用數值
    void Start () {
        tmpObj = room[0];//預設啟動的環景指定
	}
	// Update is called once per frame
	void Update () {
	}
    public void ChangView(int I) {//可以帶入索引號碼的功能
        targetObj = room[I];//指定目標環景球
        targetObj.SetActive(true);//打開目標
        exposure = 1f;//初始化顯示數值
        InvokeRepeating("Run", 0f, 0.01f);//每隔0.01秒平滑執行Run方法
    }
    void Run()
    {
        exposure -= Time.deltaTime*3f;//隨時間遞減當前顯示的數值(漸漸轉黑)
        tmpObj.GetComponent<MeshRenderer>().material.SetFloat("_Exposure", exposure);//將數值設到材質球上
        targetObj.GetComponent<MeshRenderer>().material.SetFloat("_Exposure", 1f - exposure);//反向設定到目標材質上(顯示交換)
        if (exposure < 0f)//當值歸0實執行完成的動作
        {
            exposure = 0;
            tmpObj.SetActive(false);//關閉來源還景球
            tmpObj = targetObj;//目標球置換暫存球
            CancelInvoke("Run");//清除反覆執行程序
        }
    }
}

設定2個Room清單,並將它們裝入對應位置,並且關閉第一個場景以外的Room
animation-20180601001
animation-20180601004


在預計當作開關的兩個物件(Cube、Sphere)裝上EventTrigger,並設定PointerEnter事件執行上面寫的腳本中的ChangView(int I)功能,帶入要去的對象在清單中的序列號。
animation-20180531007


animation-20180601003


執行後:
1527784698770
這樣就大功告成啦!!
之後可以拿掉觸發物件的模型,留下碰撞框再加一些UI提示就可以了。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *