SteamVR Unity Plugin - v2.2.0教程 / 简单输入系统

作者:阿里晕呕爱思
来源:CSDN
原文:https://blog.csdn.net/gsm958708323/article/details/89853185
版权声明:本文为博主原创文章,转载请附上博文链接!


前言

当前使用版本SteamVR Unity Plugin - v2.2.0,可以直接从Unity应用商店获取。老版本的SteamVR不需要配置动作Action,新版的SteamVR的输入方式和之前不一样,很多API也有变换,这对用惯了老版本的SteamVR的开发者需要重新熟悉。

本教程主要针对初级小白,大佬请路过哈哈哈。

概述

SteamVR2.0将用户自定义的动作Action与手柄按键绑定,配置完毕后,其他设备也可以正常使用。能够使开发者在编程中专注于用户的动作,而非具体的设备的按键。

InputSystem,即输入系统,开发人员通过自定义配置将默认动作与手柄按键进行绑定,而不是将直接操作具体设备的按键,因为很多每个平台的设备是不同的,这样可以快速适配应用程序,不需要修改代码。

比如:当开发者检测玩家是否抓取某个物体的时候,不是检测Vive等控制器的Trigger键或Oculus Touch控制器的Grip键是否被按下,而是检测预定义的“Grab”动作是否为True即可;(作为开发者,可以在SteamVR中为Grab动作设置默认按键和阈值,当程序运行时,也可修改这些数值以满足玩家的个人偏好);基于这种机制,不光能够解决控制器碎片化的问题,也可以快速适配未来发布的设备。

动作录入

选中Window下的SteamVR Input
SteamVR Unity Plugin - v2.2.0教程 / 简单输入系统_第1张图片
你会打开这个奇怪的面板,在面板中你可以添加自定义动作,包括动作的名称(动作与手柄绑定的时候会用到),以及动作类型(与代码获取按键信息的参数有关系),这里我新建的一个Touch动作,主要是负责获取手柄圆盘键的Axis,所以我使用了Vector2的类型。
SteamVR Unity Plugin - v2.2.0教程 / 简单输入系统_第2张图片
设置完毕之后,点击左下角Save and generate按钮,Unity会自动将动作集存储到一个json文件里面,也会多一个文件夹,名字叫SteamVR_Input。
SteamVR Unity Plugin - v2.2.0教程 / 简单输入系统_第3张图片

动作与手柄绑定

打开刚才的SteamVR Input窗口,打开Open bingding UI,会启动浏览器本地配置动作与手柄的绑定。可能窗口打开之后和我的不大一样,不会受到影响,也有可能是英文~
初次代开配置窗口,在“当前按键设置”下面是空的,就说明当前手柄没有绑定自定义动作,但是会有一套默认的动作。
SteamVR Unity Plugin - v2.2.0教程 / 简单输入系统_第4张图片
点击“编辑”按钮,你会来到这个界面~~建议点击一下每个按钮,体验每个按钮的功能,接下来,我们要配置圆盘键,获取圆盘键的相对位置。默认配置方案是无法获取圆盘键的Axis的。
SteamVR Unity Plugin - v2.2.0教程 / 简单输入系统_第5张图片
点击触摸板右边的“+”按钮,选择“触控板”,在触摸板下面会多出一个项目,选择点击位置,添加刚刚在SteamVR Input的Touch动作,下面选择“保存个人按键配置”,点击之后没有反应,实际上相关配置已经录入进去了,只需要刷新一下即可。有时,刷新会不及时,请重新打开窗口,这里经常会碰到妖怪!!!
SteamVR Unity Plugin - v2.2.0教程 / 简单输入系统_第6张图片
重新打开配置界面之后,你会看到除了官方按键的设置,还有一套刚刚创建的设置,点击“查看”,选中左下角的“选择此按键设置”,此时,完成自定义动作与手柄的绑定!!!
SteamVR Unity Plugin - v2.2.0教程 / 简单输入系统_第7张图片

代码调用

        /// 
        /// Teleport 动作可以监听圆盘键的状态(按下,抬起) Boolean类型
        /// 
        private SteamVR_Action_Boolean m_Teleport = SteamVR_Input.GetAction("Teleport");

        /// 
        /// Touch 动作可以监听圆盘键的相对位置Axis  Vector2类型
        /// 
        private SteamVR_Action_Vector2 m_Touch = SteamVR_Input.GetAction("Touch");

        void Update()
        {
            if (m_Teleport.GetState(SteamVR_Input_Sources.Any))
            {
                Debug.Log(m_Touch.GetAxis(SteamVR_Input_Sources.Any));
            }
        }
        

可以对应起来看绑定关系
SteamVR Unity Plugin - v2.2.0教程 / 简单输入系统_第8张图片
调用效果如下:
SteamVR Unity Plugin - v2.2.0教程 / 简单输入系统_第9张图片

你可能感兴趣的:(VR)