天天看点

Unity 小米VR一体机开发(二)

本文原创,转载请注明出处:https://blog.csdn.net/qq_36503704/article/details/82590672

四、demo制作

上次讲了,小米VR一体机的前期准备和一些开发中的注意事项。今天小编用小米VR一体机做一个小的Demo。

首先还是看一下小米官方提供的Demo,小编主要看了一下   360ViewController,目录如下。

Unity 小米VR一体机开发(二)

看完之后,小编知道了如果想自己新建一个Scene,必须要有这些东西:

1)摄像机的预制体(MICamera)

2)控制器(手柄)的预制体(ControllerLoader)

3)EventSystem下需要挂载PointerInputModule组件,替换原来自带的StandaloneInputModule

Unity 小米VR一体机开发(二)

4)Canvas下需要挂载PointerGraphicRaycaster组件,替换原来自带的GraphicRaycaster

Unity 小米VR一体机开发(二)

创建一个新的Scene,添加这些选项,添加完成后Hierarchy界面如下:

Unity 小米VR一体机开发(二)

Game界面如下:

Unity 小米VR一体机开发(二)

Canvas参数如下:

Unity 小米VR一体机开发(二)

小编觉得刚才案列的中的输入输出还需要一直点选有点麻烦,就自己写了一个辅助类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模式下会出现警告信息,打包后没有的,所以不用修改。

demo链接:https://pan.baidu.com/s/1yjkXpBjVdvcg0uWX9gOxZA 密码:p5tv

打包时会出现一个错误:

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;
           

今天就到这了。