Unity中使用暴风魔镜蓝牙手柄

31 篇文章 0 订阅
15 篇文章 1 订阅

鉴于某些手机在使用大朋SDK以及谷歌SDK时会出现神器的小屏现象(比如某想的)故为了能够最大程度的兼容更多的手机,决定使用暴风魔镜的SDK。废话不多说~直接将使用暴风魔镜SDK时遇到的问题以及解决方案简单的罗列一下:

一、蓝牙手柄按键的响应

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

[csharp]  view plain  copy
  1. //摇杆上移  
  2.        if (CrossPlatformInputManager.GetButtonDown("UP"))            
  3.     {  
  4.         Debug.LogWarning("Up_Get");  
  5.            up = 1;  
  6.     }  
  7.        //摇杆下移  
  8.        if (CrossPlatformInputManager.GetButtonDown("DOWN"))  
  9.        {  
  10.            Debug.LogWarning("Down_Get");  
  11.            up = -1;  
  12.        }  
  13.        //摇杆右移  
  14.        if (CrossPlatformInputManager.GetButtonDown("RIGHT"))  
  15.        {  
  16.            Debug.LogWarning("Right_Get");  
  17.            right = 1;  
  18.        }  
  19.        //摇杆左移  
  20.        if (CrossPlatformInputManager.GetButtonDown("LEFT"))  
  21.        {  
  22.            Debug.LogWarning("Left_Get");  
  23.            right = -1;  
  24.        }  
  25.        //摇杆回到中间位置  
  26.        if (CrossPlatformInputManager.GetButton("CENTER"))  
  27.        {  
  28.            Debug.LogWarning("CENTER_Get");  
  29.            up = 0;  
  30.            right = 0;  
  31.        }  
  32.        //按下确定(OK)键  
  33.        if (CrossPlatformInputManager.GetButtonDown("OK"))  
  34.        {  
  35.            Debug.LogWarning("OK_Get");  
  36.        }  
  37.        //按下取消键  
  38.        if (CrossPlatformInputManager.GetButtonDown("C"))  
  39.        {  
  40.            Debug.LogWarning("Cancle_Get");  
  41.        }  
  42.        //按下菜单键  
  43.        if (CrossPlatformInputManager.GetButtonDown("MENU"))  
  44.        {  
  45.            Debug.LogWarning("MENU_Get");  
  46.        }  

二、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啦~


https://i-blog.csdnimg.cn/blog_migrate/362cb8429c7cd5aa4ecdc3292cd4603b.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值