HTC Vive初体验 简单场景的搭建 基本的输入检测

来源:互联网 发布:知乎周刊合集 编辑:程序博客网 时间:2024/05/17 02:58

版本:unity 5.4.1  语言:C#

 

Gear VR之前是在别人的工程上继续写的,所以场景搭建之类的也没有接触,最近可能要做Vive眼镜的东西,所以研究一下,记录一下网上课程中学到的知识。

 

首先是设备环境的搭建,网上教程很多,我就不细说了,一个头戴显示器、两个手柄、两个基站,在电脑上连接好就好。

 

其次是Steam VR软件的下载,进入Steam,点击库 -> 工具,搜索SteamVR下载好启动就行。



如下图,如果全部都是绿色的就是准备就绪了,这个时候就可以设置一下房间模式,然后可以游玩各类VR游戏了。



接着是Unity的VR插件,到其Asset Store中搜索SteamVR Plugin,下载好导入就可以,然后具体下载的本地路径是在这里(我老是找不到):

C:\Users\Administrator\AppData\Roaming\Unity\

 

SteamVR的插件中可以找到三个预制体:



我们要用到的是CameraRig和SteamVR,这两个插件直接拖到场景中,禁用Unity默认生成的相机,启动之后,就能用Vive设备观看这个场景了,而且能用手柄移动。

 

下面是使用自己的Camera变成VRCamera的情况:

 

选中自己的Camera,添加一个脚本SteamVR_Camera,脚本上有个Expand按钮,没错点击一下,程序就会自动为你生成VR的Camera(我这边不知道为什么要点击按钮两次),效果出来就是下图:



接着添加两个手柄,在Camera(origin)下(不是最下面那个,那个好像没什么用)新建两个空的子物体,分别叫做Left Controller和Right Controller,再分别添加SteamVR_TrackedObject脚本,Index选择None。

 

再在两个Controller下面分别添加一个Mode的空子物体,物体上添加一个SteamVR_RenderModel的脚本,用来渲染手柄,其中把Shader设置为Standard就好。

 

最后在Camera(origin)这个根物体上填一个SteamVR_Controller Manager的脚本,把Left Controller和Right Controller拖进去。如果需要显示游玩区域的话,添加SteamVR_PlayArea脚本,里面的参数可以自己调节。

 

最终效果:



之后讲讲手柄输入事件的监听,两个手柄两个监听的脚本,分别由之前添加的SteamVR_TrackedObject提供事件的支持,所以第一步就是要获取该组件。

 

暂且设定为我们的脚本挂在手柄上,以下是测试的代码:

[RequireComponent(typeof(SteamVR_TrackedObject))]public class VRControllerTest : MonoBehaviour {    SteamVR_TrackedObject trackedObject;void Awake ()    {        trackedObject = GetComponent<SteamVR_TrackedObject>();  //获取手柄上对应的脚本    }void FixedUpdate ()    {        // 由手柄上的脚本获取设备        SteamVR_Controller.Device device = SteamVR_Controller.Input((int)trackedObject.index);          // 监听扳机按钮        if(device.GetTouch(SteamVR_Controller.ButtonMask.Trigger))  //按住            Debug.Log("Trigger Touch");        if (device.GetTouchDown(SteamVR_Controller.ButtonMask.Trigger)) //按下            Debug.Log("Trigger TouchDown");        if (device.GetTouchUp(SteamVR_Controller.ButtonMask.Trigger))   //弹起            Debug.Log("Trigger TouchUp");        // Press版本,与Touch不同的是,按一次只会调用一次,而Touch会一直调用        if (device.GetPress(SteamVR_Controller.ButtonMask.Trigger))             Debug.Log("Trigger Press");        if (device.GetPressUp(SteamVR_Controller.ButtonMask.Trigger))            Debug.Log("Trigger PressUp");        if (device.GetPressDown(SteamVR_Controller.ButtonMask.Trigger))            Debug.Log("Trigger PressDown");        // 触碰圆盘的监听        if (device.GetTouch(SteamVR_Controller.ButtonMask.Touchpad))            Debug.Log("Touchpad Touch");        // 触碰原本获取方向,这是一个单位向量,根据按的位置,算出一个坐标值        if(device.GetTouchDown(SteamVR_Controller.ButtonMask.Touchpad))        {            Vector2 dir = device.GetAxis();            Debug.Log(dir);        }            }}

完成!有了这一些基础之后就可以做一些好玩的东西了。

 

最后感谢一下NetFly童鞋讲师详细的讲解,和alps_01网友提供的触摸的测试。

0 0
原创粉丝点击