欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

如何在Unity中使用VR暴风魔镜蓝牙手柄

程序员文章站 2022-03-10 14:14:07
目录二、ugui的事件检测一、蓝牙手柄按键的响应在暴风魔镜的官网下载了最新的sdk后导入unity项目,发现sdk中的demo全部是非手柄控制的,然后只能参照着sdk里面的接口说明文档自己研究~~结果...

一、蓝牙手柄按键的响应

在暴风魔镜的官网下载了最新的sdk后导入unity项目,发现sdk中的demo全部是非手柄控制的,然后只能参照着sdk里面的接口说明文档自己研究~~结果发现接口文档非一般的坑,一开始是直接在mojinginputmanager.cs里面直接填充,直到最后才发现用integrateinputmanager.prefab替换场景中原有的mojinginputmanager.prefab以后就可以跟检测unity的输入一样检测到手柄的输入了,以下为源码(详情可直接参考接口文档3.9节):

 //摇杆上移
        if (crossplatforminputmanager.getbuttondown("up"))          
	    {
	        debug.logwarning("up_get");
            up = 1;
	    }
        //摇杆下移
        if (crossplatforminputmanager.getbuttondown("down"))
        {
            debug.logwarning("down_get");
            up = -1;
        }
        //摇杆右移
        if (crossplatforminputmanager.getbuttondown("right"))
        {
            debug.logwarning("right_get");
            right = 1;
        }
        //摇杆左移
        if (crossplatforminputmanager.getbuttondown("left"))
        {
            debug.logwarning("left_get");
            right = -1;
        }
        //摇杆回到中间位置
        if (crossplatforminputmanager.getbutton("center"))
        {
            debug.logwarning("center_get");
            up = 0;
            right = 0;
        }
        //按下确定(ok)键
        if (crossplatforminputmanager.getbuttondown("ok"))
        {
            debug.logwarning("ok_get");
        }
        //按下取消键
        if (crossplatforminputmanager.getbuttondown("c"))
        {
            debug.logwarning("cancle_get");
        }
        //按下菜单键
        if (crossplatforminputmanager.getbuttondown("menu"))
        {
            debug.logwarning("menu_get");
        }

二、ugui的事件检测

vr项目中最坑的地方就是原有的ui都不再适应,虽说很多sdk的官方都说只要把ui设置成世界坐标即可,但是原有的ui都是跟随视角移动的,改成世界坐标后要多奇怪有多奇怪,所以为了更加的和谐,还是针对vr设计一套ui比较好~(以上仅代表个人观点,不喜勿喷~ )。 ok,现在假设已经准备好ui的素材了,那么开始搞起~假设没有什么其他的特殊要求,在加入canvas后在属性面板修改如下两个参数即可 

第一个render mode就是渲染模式了~将其改为world space,第二个event camera为事件响应的摄像机,在没有手动添加摄像机的情况下,场景中应该会有如下三个摄像机: 

vr模式效果如下 

在停用左右眼摄像机,只打开主摄像机时效果如下
主摄像机在非vr模式时会打开,在vr模式下默认关闭。canvas里面响应的摄像机就选择主摄像机即可(如果没有跟ui之间的交互此处也可不必设置),如此这般就可以在vr场景中看到canvas里面的ui了。
若需求里面有跟ui之间的交互(比如点击按钮等等),那么canvas的event camera必须设置,然后在eventsystem上面挂载sdk里面的gazeinputmodule脚本如下图所示 

其中cursor里面的物体是刚刚和那三个镜头厮混在一起的准星,触发操作全靠它了~ 如果仅仅是这样还是不行的~做到这一步在准星移动到button上面的时候只有悬浮效果(即高亮),点击遥控器的ok键的时候是没有任何响应的(本想参考官方demo找到应对方法的···结果demo全部不是手柄控制的,所以只能自己想办法解决了o(╯□╰)o),在尝试了多种方法之后,最终找到的可行方法是~~修改gazeinputmodule脚本,将它的点击检测里面加上crossplatforminputmanager.getbuttondown("ok")就ok啦~

以上就是如何在unity中使用暴风魔镜蓝牙手柄的详细内容,更多关于在unity中使用暴风魔镜蓝牙手柄的资料请关注其它相关文章!