|
馬上註冊,結交更多好友,享用更多功能,讓你輕鬆玩轉社區。
您需要 登錄 才可以下載或查看,沒有帳號?立即註冊
x
想製作手機VR遊戲, Google 提供一個非常便宜的方案, 就是一部普通的手機(需要有陀螺儀), 加一個用紙板做的 Cardboard 眼鏡就可以了.
不過實際開發時就發現, 新版本的 Cardboard SDK for unity 並不支援舊版本的Android系統, 而舊版本的 Cardboard SDK 卻有其他問題(我的情況是閃退).
這是因為該手機不支援 Cardboard 嗎? 非也, 因為它可以安裝 Google 的 Cardboard demo程式並成功運行.
既然那手機已經具備VR所需的硬件, 那不如...... 自己弄個VR系統!
具體要做的事有兩個:
1. 令畫面能夠與手機的陀螺儀同步旋轉
2. 將畫面分成左右兩邊
1. 令畫面能夠與手機的陀螺儀同步旋轉
重點是以Input.gyro.attitude來取得旋轉數據, 不過直接換成遊戲中的鏡頭旋轉角度的話, 會發現畫面的確會轉, 但卻天南地北, 位置和方向都錯了.
因為手機的陀螺儀軸和Unity中的旋轉軸是不一樣的, 所以我以 trial and error 的方法找出軸的起始位置和旋轉方向, 並加以修正, 最後就變成這樣:
開一個新的Parent GameObject做容器, 並將Rotation設為(90, 0 0), Child Object就是用以下的Script令它會跟著手機旋轉. 注意我使用了localRotation及將原始的陀螺儀XY數據反轉使用.
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- public class NewBehaviourScriptVR : MonoBehaviour {
- // Use this for initialization
- void Start () {
- Input.gyro.enabled = true;
- }
-
- // Update is called once per frame
- void Update () {
- transform.localRotation = Quaternion.Euler (-Input.gyro.attitude.eulerAngles.x, -Input.gyro.attitude.eulerAngles.y, Input.gyro.attitude.eulerAngles.z);
- }
- }
複製代碼 使用 unity remote 5 讀取手機陀螺儀數據至 unity editor
PS: [Parent Object Rotation 90度 + Child Object localRotation = attitude] 只是其中一種做法, 各位可按自己喜好及需要使用陀螺儀數據Input.gyro.attitude來做自己的VR系統~
2. 將畫面分成左右兩邊
首先將上面的鏡頭和旋轉Script分開, 旋轉Script保留在原先的GameObject, 在該GameObject內再開一個 Child Object, 把鏡頭相關的Script放入去, 並把整個鏡頭Object複製多一份, 形成旋轉Object是頭,兩個鏡頭Object是雙眼的結構
之後再把左右鏡頭設置成這樣
主要是把左右鏡頭設置到一左一右的Position, 和把主畫面透過Viewport Rect設置到螢幕的左右兩邊.
最後就會變成這樣, 可以在螢幕中央隱約看到一條線, 因為左右兩邊已經是獨立畫面, 所以分界的地方當然會看到不協調
最後, 在Unity5.6推出後或許不再需要這種方法了, 因為Unity5.6將原生支援Cardboard, 即是不再需要安裝Cardboard SDK也能做Cardboard VR遊戲, 相容性會大大提高, 目標亦正正是希望更多低版本的Android系統手機能夠用Unity開發Cardboard APP~
|
|