VR开发——Unity中的VR Api的介绍(**V客学院**)

VR开发——Unity中的VR Api的介绍(V客学院

今天我们来讲一讲Unity中的原生VR支持。
Unity的原生支持虽然没有SteamVR插件和其扩展插件VRTK好用,但是贵在简单,可以和Unity进行无缝连接。

Api中的结构

图中是Unity文档中关于VR的相关API,我们一个个来学习:
1.InputTracking 文档如下

这里写图片描述

静态变量:

disablePositionalTracking 用来设定是否追踪位置: True/False 启用/关闭

静态方法:

GetLocalPosition 获取某个节点的本地位置 传入参数类型:VRNode 类型

GetLocalRotation 获取某个节点的本地旋转 传入参数类型:VRNode 类型

GetNodeName 根据节点ID返回其名称 传入参数类型:uLong 类型

GetNodeStates 获取指定节点列表的状态信息

Recenter 跟踪头盔的当前位置和方向。

事件:

nodeAdded 当跟踪的节点添加到底层的VR / AR系统时调用。
nodeRemoved 当跟踪的节点从底层的VR / AR系统中删除时调用。
trackingAcquired 跟踪节点开始报告跟踪信息时调用。
trackingLost 跟踪节点停止报告跟踪信息时调用。

使用:
代码需要引用UnityEngine.VR

    /// <summary>
    /// 左右控制器,放手部的模型
    /// </summary>
    public GameObject _Hander_Left = null;//使用之前请先在Unity指定一个物体,没写保护
    public GameObject _Hander_Right = null;//使用之前请先在Unity指定一个物体,没写保护

    //控制手柄相关操作
    void MonitoringDeviceInput()
    {
     //检测设备输入,如果获得Joystick设备名称列表的长度大于0的时候,且 列表中的第一个元素名称不为空值,表示检测到外部输入设备 
     //手柄存在,每一次在进行操作之前,得把设备的数量确认,防止BUG存在,使用一个变量来接收此数据
     int joyNum = Input.GetJoystickNames().Length;

    //追踪头盔的位置和方向
                InputTracking.Recenter();
    //追踪手柄的位置和旋转,改变手柄的相对位置,和相对旋转
    _Hander_Left.transform.localPosition = InputTracking.GetLocalPosition(VRNode.LeftHand);
    _Hander_Right.transform.localPosition = InputTracking.GetLocalPosition(VRNode.RightHand);
    _Hander_Left.transform.localRotation = InputTracking.GetLocalRotation(VRNode.LeftHand);
    _Hander_Right.transform.localRotation = InputTracking.GetLocalRotation(VRNode.RightHand);        

      //以下是手柄上一部分的操作触发
    if (Input.GetKeyDown (KeyCode.Joystick1Button8)) {
                //左边圆盘按下
            } 
    if (Input.GetKeyDown (KeyCode.Joystick2Button9)) {
                //右边圆盘按下
            } 
    if (Input.GetKeyDown (KeyCode.Joystick1Button14)) {
                //左边扳机按下    
            } 
    if (Input.GetKeyUp (KeyCode.Joystick1Button14)) {
                //左边扳机抬起
            } 
    if (Input.GetKeyDown (KeyCode.Joystick2Button15)) {
                //右边扳机按下    
            } 
    if (Input.GetKeyUp (KeyCode.Joystick2Button15)) {
                //右边扳机抬起
            }      
    }

最后,以上这段逻辑插入Update执行,由于是追踪的本地,那么手柄模型、摄像机得放在同一个父物体下,代码也在父物体上。

在项目中去试一试吧!记得勾选VR支持!

这里写图片描述
谢谢大家!请关注我们V客学院的二维码哦!

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值