轻源码

  • QingYuanMa.com
  • 全球最大的互联网技术和资源下载平台
搜索
轻源码 门户 VR虚拟专区 查看主题

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

发布者: xiao1412 | 发布时间: 2018-2-17 11:21| 查看数: 3152| 评论数: 0|帖子模式

所用工具: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是凝视;

0fe774d3533eabac61fbaaa591dfb107.png

    另外,要想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;
        }
    }
}
29380734ae29afc53afb6c59da20b932.jpg



最新评论

轻源码让程序更轻更快

QingYuanMa.com

工作时间 周一至周六 8:00-17:30

客服QQ点击咨询

微信公众号

APP客户端

Copyright © 2016-2019 http://www.qingyuanma.com/ 鲁ICP备17014494号

快速回复 返回顶部 返回列表