VR之Unity 开发Pico测试之UI和Object的交互

来源:互联网 发布:淘宝云客服在线投诉网 编辑:程序博客网 时间:2024/05/21 08:45

所用工具: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 initializationvoid 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;        }    }}



0 0