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

版本: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
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值