所用工具:Unity 5.3.6,Pico的SDK(官网下载最新版)
第一步:打开unity建立一个新的工程 起名PicoTest;
第二步:导入Sdk;
第三步:建立一个新的scene,保存;
第四步:把PicoVrSdk下的Prefabs 的PicoVr预制件放到Hierarchy下,把原有的MainCamera删掉,接下来开发自己的VR;
测试的主要内容是怎么和UI和物体交互:
用Unity自带的UGUI搭建简单的测试UI进行测试:
先谈一下和UI的交互:交互无非两种,一是通过手柄操作按钮(Pico的手柄的A键相当于鼠标的左键),把脚本里对应的button方法绑定到对应脚本就可以或是通过代码监听(见下面脚本);
二是通过凝视,需要给按钮添加一个组件Eventer Trigger ,点击add new Event Type 选择PointerEnter, 接着绑定方法就好或是通过代码监听见下面脚本);
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using UnityEngine.EventSystems;
public class UItest1 : MonoBehaviour
{
private Button btn1;
private Button btn2;
public delegate void myDelegate(GameObject go);
public myDelegate onEnter;
// Use this for initialization
void Start()
{
btn1 = this.transform.GetChild(0).GetComponent<Button>();
btn1.onClick.AddListener(BtnClick1);//监听btn1的点击
btn2 = this.transform.GetChild(1).GetComponent<Button>();
EventTriggerListener.Get(btn2.gameObject).onEnter += btnPointerEnter;//监听btn2的凝视方法
}
/// <summary>
/// btn1的点击方法
/// </summary>
private void BtnClick1()
{
Debug.Log("Click");
}
/// <summary>
/// btn2的凝视方法
/// </summary>
/// <param name="go"></param>
void btnPointerEnter(GameObject go)
{
if (go.name == btn2.name)
{
Debug.Log("PointerEnter");
}
}
}
上述代码btn1 是点击,btn2是凝视;
另外,要想UI不对SifhtPointer(射线检测)有反应,把Canvas下的Panel,Image,Text等的raycast Target设置为false,button肯定得为True;
对于和物体的交互,要想检测到场景里的3维物体,除了物体自身有collider组建外,还需要对PicoVr下的Head添加一个叫Physics Raycaster的组件;
using UnityEngine;
using System.Collections;
using UnityEngine.EventSystems;
public class ObjectTest : MonoBehaviour {
private GameObject obj1;
private GameObject obj2;
private GameObject obj3;
// Use this for initialization
void Start () {
obj1 = this.transform.GetChild(0).gameObject;
EventTriggerListener.Get(obj1).onClick += ClickObject;
obj2 = this.transform.GetChild(1).gameObject;
EventTriggerListener.Get(obj2).onClick += ClickObject;
obj3 = this.transform.GetChild(2).gameObject;
EventTriggerListener.Get(obj3).onClick += ClickObject;
}
private void ClickObject(GameObject go) {
switch (go.name)
{
case "Cube":
Debug.Log(obj1.name);
break;
case "Sphere":
Debug.Log(obj2.name);
break;
case "Cylinder":
Debug.Log(obj3.name);
break;
default:
break;
}
}
}
|