本文原创,转载请注明出处:https://blog.csdn.net/qq_36503704/article/details/82590672
四、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模式下会出现警告信息,打包后没有的,所以不用修改。
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;
今天就到这了。