Unity 小米VR一體機開發(二)
四、demo製作
上次講了,小米VR一體機的前期準備和一些開發中的注意事項。今天小編用小米VR一體機做一個小的Demo。
首先還是看一下小米官方提供的Demo,小編主要看了一下 360ViewController,目錄如下。
看完之後,小編知道了如果想自己新建一個Scene,必須要有這些東西:
1)攝像機的預製體(MICamera)
2)控制器(手柄)的預製體(ControllerLoader)
3)EventSystem下需要掛載PointerInputModule元件,替換原來自帶的StandaloneInputModule
4)Canvas下需要掛載PointerGraphicRaycaster
建立一個新的Scene,新增這些選項,新增完成後Hierarchy介面如下:
Game介面如下:
Canvas引數如下:
小編覺得剛才案列的中的輸入輸出還需要一直點選有點麻煩,就自己寫了一個輔助類EventHelper,程式碼如下:
using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; public enum EventSort { Button, Slider, Toggle, } public class EventHelper : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler { public EventSort eventSort; public void OnPointerEnter(PointerEventData eventData) { if (eventSort==EventSort.Button) { EventManager.instance.currenButton = GetComponent<Button>(); } } public void OnPointerExit(PointerEventData eventData) { EventManager.instance.currenButton = null; } }
EventManager
using MIVR; using UnityEngine; using UnityEngine.UI; public class EventManager : MonoBehaviour { public static EventManager instance; [HideInInspector] public Button currenButton; private bool drayStart; void Awake() { instance = this; } public void TestDrag() { print("drag"); } void Update () { MIVROnClick(); } private void MIVROnClick() { if (currenButton != null) { if (InputManager.ControllerState.AppButtonDown || InputManager.ControllerState.ClickButtonDown) { currenButton.onClick.Invoke(); } } } }
純屬小編不想每次都要新增SystemTrigger,程式碼寫的話也可以。
小米打包後不能直接看到程式的錯誤資訊,小編寫了一個建議的顯示方法ErrorDisplay
using UnityEngine;
using UnityEngine.UI;
public class ErrorDisplay : MonoBehaviour
{
public Text logText;
void Awake()
{
Application.logMessageReceived += HandleLog;
print("start");
}
void HandleLog(string logString, string stackTrace, LogType type)
{
logText.text = logText.text + "---/" + logString;
}
}
Editor模式下會出現警告資訊,打包後沒有的,所以不用修改。
打包時會出現一個錯誤:
Assets/MIVR/Scripts/MiCamera.cs(356,21): error CS1061: Type `UnityEngine.Camera' does not contain a definition for `hdr' and no extension method `hdr' of type `UnityEngine.Camera' could be found. Are you missing an assembly reference?
原始碼:
cam.hdr = VrManager.Instance.IsHdrEnabled;
修改如下:
cam.allowHDR = VrManager.Instance.IsHdrEnabled;
今天就到這了。