1. 程式人生 > >Unity 小米VR一體機開發(二)

Unity 小米VR一體機開發(二)

四、demo製作

上次講了,小米VR一體機的前期準備和一些開發中的注意事項。今天小編用小米VR一體機做一個小的Demo。

首先還是看一下小米官方提供的Demo,小編主要看了一下   360ViewController,目錄如下。

看完之後,小編知道了如果想自己新建一個Scene,必須要有這些東西:

1)攝像機的預製體(MICamera)

2)控制器(手柄)的預製體(ControllerLoader)

3)EventSystem下需要掛載PointerInputModule元件,替換原來自帶的StandaloneInputModule

4)Canvas下需要掛載PointerGraphicRaycaster

元件,替換原來自帶的GraphicRaycaster

建立一個新的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;

今天就到這了。