VR开发——Unity中的VR Api的介绍(V客学院)
今天我们来讲一讲Unity中的原生VR支持。
Unity的原生支持虽然没有SteamVR插件和其扩展插件VRTK好用,但是贵在简单,可以和Unity进行无缝连接。
图中是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客学院的二维码哦!