Unity VR-Step 教學

Google Cardboard VR 製作遊戲的玩家如何移動?VR-Step 讓您以簡單直覺的方式增加 VR 遊戲的移動功能。

測試檔案 [ VR-Step-v0.1.apk ] [ com.GoogleVR.TinyToonyCity.apk ] ← 2021.11 製作的測試版

教學講義 [ VR-Step-20210930-Part1 ] [ VR-Step-20210930-Part2 ]

本教學使用 Unity 2019.4.18 遊戲引擎 + GoogleVRForUnity 1.200.1 + VR-Step 1.3 示範。

若使用不同版本,操作方式與檔案名稱會有不同,並可能無法安裝或無法正常執行。

將 GVR SDK for Unity 與 VR-Step 下載並匯入遊戲專案。

資源包匯入後開啟 [ GoogleVR > Demos > Scenes ] 資料夾的 HelloVR 場景,按下 Play 測試遊戲,畫面將會出現以下訊息:

Please make sure 'Player Settings > Virtual Reality Supported' is checked

執行 [ Edit > Project Settings ] 開啟專案設定,選擇 Player 進入玩家設定,勾選最下方 Virtula Reality Supported 選項。

注意!此選項是 Deprecated Settings 設定因此在 Unity 2019.4 以後的版本不再出現。

若此時按下 Play 測試將出現不同訊息:

Please add 'Daydream' or 'Cardboard' under 'Player Settings > Virtual Reality SDKs'

Daydream controller not connected

請在 Project Settings 視窗按 + 並選擇 Cardboard 使用谷歌紙板眼鏡,此操作可能需要 1~2 分鐘的時間安裝檔案。

若此時按下 Play 測試,應該不會再出現錯誤訊息,並可使用以下操作模擬 VR 互動:

1、按著鍵盤 Alt 移動滑鼠可模擬頭部轉動(Yaw / Pitch)。

2、按著鍵盤 Ctrl 移動滑鼠可模擬頭部傾斜 ( Roll )。

 

 

發佈 Android APK 設定

發佈 Google Cardboard 遊戲時,需要注意部份的設定,否則將可能遇到問題,這是使用 Unity 2019.4.18 版本。

★★★ 請移除 Graphics API > Vulkan 否則安裝到手機後,將會出現黑屏或閃退的情況 ! ★★★

Graphics APIs 選取 Vulkan 再按 - 刪除。

XR Settings 下方的 Virtual Reality SDKs 按 + 再選擇增加 Cardboard 眼鏡,注意此功能在 Unity 2019.4 的較新版本已經移除。

估計是因為 Google 宣布停止支援 Cardboard / Daydream VR 平台的關係,若無法執行請選擇安裝稍舊版本的 Unity 吧!

注意!智慧型手機若無陀螺儀將無法模擬頭部轉向功能。

 

開啟 [ VR-Step > Demo Scenes ] 資料夾的 UnityNativeVRJumpGame 展示場景,按下 Play 測試遊戲,按下 Alt 鍵拖曳滑鼠可模擬頭部轉動,按下 Ctrl 鍵拖曳滑鼠可模擬頭部傾斜,如果無法進行互動模擬,請開啟 [ GoogleVR > Prefabs ] 資料夾,將 GvrEditorEmulator 拖曳到場景後再進行測試。

注意!若使用 VR-Step 1.2 以前的版本,請開啟 [ VR-Step > Demo Scenes ] 資料夾的 GVRJumpGame 展示場景

 

關閉 VR 模式的遊戲畫面,適用於使用平板電腦展示的情境。

 

關閉 Distortion Correction 變形校正的遊戲畫面。

 

攝影機如果需要套用影像效果,建議取消 Main Camera 攝影機物件 Stereo Controller 元件下的 Direct Render 功能。

 

例如套用 Antialiasing 消除鋸齒效果,可以讓 3D 畫面看起來較柔和,減少物件邊緣的突兀感。

 

若需要製作移動以外的互動功能,因為手機放入 Google Cardboard 後難以觸控操作,可以使用藍牙無線控制器、遊戲手把或搖桿,以下範例是提供玩家在 VR 遊戲使用特殊技能,建立一個 C# 腳本,程式碼如下:

 

特效可選擇自行製作或是從 Asset Store 資源商店下載。

 

練習.製作簡易吃金幣遊戲

 

public class Example : MonoBehaviour
{
public GameObject target;

void Update()
{
if (Input.GetButton("Fire1"))
{
target.SetActive(false);
}

if (Input.GetButton("Fire2"))
{
target.SetActive(true);
}
}
}