ViveFocus使用WaveVR插件获取手柄操作事件
- 此文的诞生
- 一、插件必备WaveVR
- 二、场景中放置必要的预制件
- 三、代码获取手柄交互事件
- 结束语
此文的诞生
入职新公司,接手旧项目,程序猿不可避免的麻烦。不巧,在下正是被一个旧VR项目卡在了怎么获取手柄事件上。网上找了很多资料,基本没有,可能是因为ViveFocus这款单手柄的设备销量不太行的原因吧。今天就把方法告诉大家,省的大家跟我走一样的弯路。
单手柄设备
一、插件必备WaveVR
这个WaveVR插件啊,Unity商城就有免费版,直接下载导入即可,在这里提一下的原因是,有很多人喜欢荡网盘资源,我想说的是像这种常用插件,大家最好还是先去Unity商城和PakageManager下找找有没有,有的话就用Unity自身的毕竟版本最好,最优。
(你要说你的Unity版本不支持那么高的版本,我想说那就另当别论了,只是建议)
下面开始正题
二、场景中放置必要的预制件
第一步,场景中放置必要的预制件这五个缺一不可。
WaveVR—确保VR视角
ControllerLoader—VR基础控制器(比如惯用手调整等)
InputModuleManager—射线检测控制管理器
ButtonManager—手柄按钮生效管理
WaveVRButtons—手柄按钮配置列表
三、代码获取手柄交互事件
做完上面的准备工作,正题这就来了:
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
using wvr;//命名空间必须的
public class GamePanel : MonoBehaviour
{
Text showText;
CanvasGroup group;
private void Awake()
{
//因为最终打包为安卓给眼镜使用,所以普通的打印不够看,
//最好生成一个Text组件,交互按钮之后,将内容显示在里面
showText = transform.Find("ShowText").GetComponent<Text>();
//控制UI界面显隐
group = transform.GetComponent<CanvasGroup>();
}
void Start()
{
}
private void Update()
{
//判断场景中有没有放入预制体,避免没放时报错
if (WaveVR_ButtonManager.Instance == null)
return;
//大圆盘按下
bool pressedTouchpad = WaveVR_Controller.Input(WaveVR_Controller.EDeviceType.Dominant).GetPressDown(WVR_InputId.WVR_InputId_Alias1_Touchpad);
if (pressedTouchpad)
{
showText.text = "按下了Touchpad!!!";
group.alpha = 1;
}
//扳手键按下
bool pressedTrigger = WaveVR_Controller.Input(WaveVR_Controller.EDeviceType.Dominant).GetPressDown(WVR_InputId.WVR_InputId_Alias1_Trigger);
if (pressedTrigger)
{
showText.text = "按下了Trigger!!!";
group.alpha = 0;
}
//圆盘上按下
bool pressedUp = WaveVR_Controller.Input(WaveVR_Controller.EDeviceType.Dominant).GetPressDown(WVR_InputId.WVR_InputId_Alias1_DPad_Up);
if (pressedUp)
{
showText.text = "按下了Up!!!";
}
//中间大圆键按下,带横线那个
bool pressedMenu = WaveVR_Controller.Input(WaveVR_Controller.EDeviceType.Dominant).GetPressDown(WVR_InputId.WVR_InputId_Alias1_Menu);
if (pressedMenu)
{
showText.text = "按下了Menu!!!";
}
//音量键+按下
bool pressedVolume_Up = WaveVR_Controller.Input(WaveVR_Controller.EDeviceType.Dominant).GetPressDown(WVR_InputId.WVR_InputId_Alias1_Volume_Up);
if (pressedVolume_Up)
{
showText.text = "按下了Volume_Up!!!";
}
}
}