Unity 什么unity 蓝牙手柄柄可以开发

unity3d 是哪个公司开发的?_百度知道鉴于某些手机在使用大朋SDK以及谷歌SDK时会出现神器的小屏现象(比如某想的)故为了能够最大程度的兼容更多的手机,决定使用暴风魔镜的SDK。废话不多说~直接将使用暴风魔镜SDK时遇到的问题以及解决方案简单的罗列一下:
一、蓝牙手柄按键的响应
在暴风魔镜的官网下载了最新的SDK后导入Unity项目,发现SDK中的DEMO全部是非手柄控制的,然后只能参照着SDK里面的接口说明文档自己研究~~结果发现接口文档非一般的坑,一开始是直接在MojingInputManager.cs里面直接填充,直到最后才发现用IntegrateInputManager.prefab替换场景中原有的MojingInputManager.prefab以后就可以跟检测Unity的输入一样检测到手柄的输入了,以下为源码(详情可直接参考接口文档3.9节): //摇杆上移
if (CrossPlatformInputManager.GetButtonDown(&UP&))
Debug.LogWarning(&Up_Get&);
//摇杆下移
if (CrossPlatformInputManager.GetButtonDown(&DOWN&))
Debug.LogWarning(&Down_Get&);
//摇杆右移
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&);
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啦~
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:599次
排名:千里之外[原创文章,转载请注明出处,谢谢 !]
温馨提醒,本篇第一节主要介绍cardboard虚拟现实系统的组成,如果只想看如何开发的具体步骤请直接跳到第二节^_^
前述:恕我啰嗦一下,主要照顾对cardboard不太了解的朋在,Cardboard是由Google公司的两位巴黎办公室的员工利用业余时间创作出来的作品,它最大的特点就是将原来人们以为高大上的虚拟现实技术以廉价的方式带进了公众的视野,到目前为止,google已推出了改良版的cardboard 2代盒子,相比1代,2代改善了成像,增加了视野范围等。软件方面,google推出了两套SDK代开发者使用,一套是cardboard sdk for unity,这是专为unity游戏开发引擎开发的开发工具包,另一套就cardboard sdk for android,这是专为android系统开发的工具包。其它的知识,随着朋友们逐步参于到社区活动当中,会有不断深入了解。
本帖记录了我如何作为一个小白开发出一个cardboard虚拟现实系统的整个过程,希望能帮助同样是小白,而又对虚拟现实非常感兴趣的朋友开始进入这一充满想像力的技术领域。
一、我们来看一下整个系统的组成:
解释一下上面图中的含义,
1、一个cardboard虚拟现实系统包含了硬件和软件;
2、硬件包含了一个Cardboard盒子,Cardboard盒子相当于整个系统的支架,它长成这样:
其采用分屏式3D成像原理,使每只眼睛只能看到手机屏幕的一半,然后通过软件在屏幕上生成左右两个画面,同时这两张画面按照人的左右眼视距对同一场景进行显示,这样,最终在人的大脑中加工成3D立体画面感。
3、Cardboard除了需要实时生成像上面这样的3D画面,为了实现沉浸式虚拟现实的效果,它还要做一件重要的事-追踪玩家头部转动,并根据转动角度实时地调整生成的3D画面,这一系列的活动,都是在智能手机上完成的,这里提一下,cardboard采用手机来作为系统的一部份,使得大多数人都能轻易地体验虚拟现实,但其不足之处亦非常明显,即性能受限,对于大型动作游戏场景无法获得较高的帧率,影响了玩家的体验。关于cardboard如何发挥出它的最大优势,找到性能和效果的平衡,带给用户最好的体验,也正是要探究的一个重要问题。
4、硬件部份还有一个重要角色,即外围交互设备;
在虚拟的世界中,玩家有一个最本能的需求,即与其中的角色进行交互,玩家看到的、听到的都是由手机中的软件实时生成的,从技术层面上说,这种交互就是与手机中软件应用的交互,因此必然需要借助一些穿戴的硬件设备来将玩家的身体信息采集后传入手机中。
当前还没有一套完整的标准去规定外围设备应该做成什么样的?采用什么协议与主机交互?因此,外围设备的开发现阶段也是针对性的,不同的开发平台,外设之间不能直接通用,比如为oculus开发的设备也许就不能直接运用于htc的vive;
在虚拟世界中,玩家可以以全身参于与其中角色的交互,交互方式丰富多样,也许不会有一款外设将所有交互方式都统一。因此,怎样设计和制作cardboard虚拟现实系统的外围交互设备,使其给玩家在不同的场景下带来最大的方便和乐趣,也是要探究的一个重要问题。
从整体虚拟现实体验上看,硬件性能和舒适度的提升,会对体验的提升产生立杆见影的效果,而且在影响玩家体验的几大因素之中,许多也只能依靠硬件方案来解决。
到此为止,Cardboard的硬件部份就简单浏览了下,接下来看看Cardboard的软件部份。
5、软件部份包含了Cardboard的一个个应用,以及应用运行的平台。到目前为止Cardboard官方提供SDK已经同时支持android平台和ios平台。同时Cardboard也采用非常流行的unity3d游戏引擎来开发应用。
系统图中所说的unity3dappforcardboard就是使用unity3d+cardboardSDKforUnity插件开发出来的APP。使用unity3d你可以直接生成运行于android或是ios的unity3d应用。
因此,在开发cardboard之前,需要先学习unity3d游戏开发的基础知识。了解android和ios开发的基本过程。
unity3d开发方面的基础知识,可以通过英宝通unity教学视频来学习。
android和ios开发的基本过程,请百度之。
二、Cardboard硬件的组装:
组装即是把上面第一节所说的硬件各部份组合到一起。即:外设+Cardboard盒子+手机,当前我们要使用的外设是蓝牙手柄,手机选用samsun note3,盒子使用google在今年推出的cardboard 2代,所以硬件的实例即是:蓝牙手柄+Cardboard2015+samsun note3。
组装过程如下:
1、打开cardboard2015包装,从中抽取出cardboard,如下图所示:
2、仔细翻看,你会找到盒子上打印的组装过程图示,按图示进行操作:
3、简单三步,同时将你的手机插入镜片前面的纸板中,你就可以得到如下的成品:
4、蓝牙手柄无需做结构上的组装,是与手机通过蓝牙协议进行通信,在后面软件开发时会讲到。
到此,整个cardboard系统的硬件部份就完成了,是不是很简单?你也可以按照盒子的google的官方设计图纸进行制作,见本站另一篇帖子:
其实说简单也不简单,cardboard虽然由非常容易获取的材料经过简单工序加工而成,但其中各种结构参数将直接影响到玩家眼中的成像,以及佩戴舒适度,如何提升虚拟现实眼镜的成像质量?如何提升玩家佩戴舒适度?这也直接决定了一款虚拟现实产品的市场竟争力,因此,这一方面也是VR研究的重要内容。
三、软件开发
对于大多数浏览本帖的朋友,也许更关心的是如何开发出具有高度体验值的软件应用。软件开发涉及需求研究、架构、实现等多个方面,好的VR软件应用,应该是有吸引玩家的内容和高质量的体验效果,所以必须从玩家当中去寻找需求,不断优化性能以提升用户体验。
如何为cardboard系统开发虚拟现实软件应用呢?第一节中说到,cardboadr应用其实就是运行于android或者ios平台上的应用程序,那么也就是说开发cardboard应用其实就是开发android APP或者ios APP。但不用担心,我们有unity这一开发平台,unity提供了完整的游戏引擎以及可见即可得的开发环境,同时unity还可以将你开发的同一应用直接生成android app或者ios app,你所要做的就是在它开始编译前选择相应的平台即可,如下图:
所以,cardboard软件开发者主要做的事情即是使用unity开发平台来开发基于unity3d游戏引擎的应用。
然而,cardboard应用又不同于一般的unity3d应用,cardboard应用要实现以下几个基本的需求:
1、需要模拟人的头部和两只眼睛;
2、需要获取手机中的重力传感器、陀螺仪等传感器的数据,对其处理后生成稳定的姿态数据,用来控制头部模型的姿态;
3、需要在两只眼睛上各放置一个摄像头,并将两个摄像头的视面分别显示在手机屏幕的左右两边;
4、需要对显示在手机屏幕左右两边的图像进行失真较正,使玩家通过透镜中看到的画面没有形变;
这些基础性的需求,都由google推出的cardboard SDK for unity实现了,开发者所要做的就是将这个SDK导入unity项目中,并根据自己的需要,去调用SDK提供的接口即可;
根据以上的讨论,最后,我们来开发一个简单的cardboard APP for Android。
(以下开发采用的cardboard SDK为0.5.2,Unity版本为:5.5.2f1)
一、搭建开发环境:
1、在unity官网下载unity开发工具:/cn/get-unity,并安装;
你可以下载一个免费的个人开发版,这是真正的免费,免费版除了一些功能不具备以外,其它都与专业版没有差距,对于初入的开发者而言完全足够:
2、下载android SDK(由于cardboard SDK是一个unity的android插件,所以在开发过程中可能碰到由于android SDK的版本与cardboard SDK不匹配的情况,这时,请将android SDK进行在线更新即可,如果被墙了,可以通过设置代理来更新,具体参考/Linux/958.htm)
3、在github上下载cardboard SDK for Unity:/googlesamples/cardboard-unity (建议watch这个项目,这样你可以即时获取到该项目的最新信息和发布情况)
二、打开unity,创建一个项目:
三、导入cardboard SDK:
1、首先删除默认创建的Main C
2、导入SDK:
在打开的文件选择器中,找到你下载的cardboard sdk for unity package,并选中:
在打开的包对话框中选择ALL,并点击导入:
导入后可以在项目视窗口看到cardboard目录和plugis目录:
3、按上面同样的步骤导入cardboard官方提供的一个demo包:
4、双击DemoScene目录下的DemoScene场景文件,即可打开一个演示场景:
四、生成android apk安装文件:
1、选择菜单栏的file菜单,在下拉菜单中选择build setting菜单:
在打开的对话框中先择择player setting:
在属性视窗中,有几处需要修改:
公司名称和产品名称要与包中径中的两个名称保持一致:
然后ctrl + s进行保存设置。
回到build setting对话框,选择build按钮,并在打开的文件存放对话框中选择你想要存放生成文件的路径,然后等待unity自动生成android apk安装文件。
到此,将生成的APK安装到你的手机上,然后点击运行,然后将手机插入cardboard盒子,你就可以体验到沉浸式的虚拟现实场景了^-^
需要补充unity和android开发的知识的同学可以去补习一下了。后面我们将逐步开发虚拟现实第一人称控制器,以及将蓝牙手柄接入游戏中。
阅读(...) 评论()2822人阅读
Unity3D(90)
Unity不愧是收费开发软件,有写好的Joystick(虚拟手柄),使用起来很简单,我们一起来学习一下哈!!
本文源代码Win版的 :
我们先添加手柄图标啊!先导入一个包。在Project视图中按右键啊。
内容如下:
我们再来创建装有虚拟手柄的容器。
创建完后改名称Joy 再修改一些属性如下图:
之后再将Joystick与虚拟手柄的容器相关联。
创建一个人物:导入人物的包。
我们接下来一个一个JS的脚本:
#pragma strict
var hero :GameO
var joyStickPlayer:J
function Start ()
hero = GameObject.Find(&Hero&);
function Update ()
if(joyStickPlayer.tapCount &0 )
var joyPosition_x = joyStickPlayer.position.x;
var joyPosition_y = joyStickPlayer.position.y;
if(joyPosition_y != 0 || joyPosition_x != 0)
hero.transform.Translate(Vector3.forward* Time.deltaTime * 5);
hero.transform.LookAt(Vector3(hero.transform.position.x + joyPosition_x,hero.transform.position.y,hero.transform.position.z + joyPosition_y));
hero.animation.Play(&run&);
hero.animation.Play(&idle&);
我们还要修改一下,摄像头的源文件,修改方法见
最后,做如下图的操作,要在真机上测试哦,Android或iOS都可以的。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:618024次
积分:10969
积分:10969
排名:第932名
原创:479篇
转载:22篇
评论:129条
QQ群:(iOS开发)
阅读:3639
阅读:15988
(1)(3)(1)(5)(1)(2)(5)(1)(1)(1)(4)(1)(5)(11)(10)(8)(10)(3)(8)(4)(21)(25)(12)(12)(18)(6)(18)(19)(29)(33)(144)(85)暴风魔镜开放平台
MojingSDK for Unity3D(下文简称SDK)是为了配合Unity3D软件开发者开发适用于VR眼镜(包括但不限于暴风魔镜公司出品的眼镜)而推出的SDK(Software Development Kit)开发包。开发包主要从手机陀螺仪获取头部跟踪数据、校正静态偏置值,图像抗镜片畸变、蓝牙手柄适配及交互性操作等方面为开发者提供便利性支持。SDK采用Unity3D的标准unitypackage包格式发布,同时支持Android平台和iOS平台发布。
二、开发环境
1、对于Android平台发布的开发者,建议采用Unity3D 4.6.0(Win)及以上的版本,Android-SDK版本为 24.0.2,JDK 1.7.0以上;支持Zeemote JS1 V3(魔镜1代手柄)、Mojing(魔镜2代手柄)、Mojing3(魔镜3代手柄)、小米蓝牙手柄等标准蓝牙手柄作为交互外设进行控制,支持Android2.3以上。Android SDK Location配置,如下图1所示。
Android SDK Location配置
2、对于iOS平台发布的开发者,建议采用Unity3D 5.1.0(Mac)及以上版本,Xcode采用6.0以上版本,支持Mojing4(魔镜4代手柄)作为交互外设进行控制,支持iOS6.0以上。
三、支持的设备
1、支持的眼镜及镜片
开发环境所使用软件名称及版本信息如下表1所示:
Manufacture
产品 Product
眼镜 Glasses
暴风魔镜II标准镜片
暴风魔镜III标准镜片
暴风魔镜3 Plus
暴风魔镜III60度镜片
暴风魔镜3 Plus
暴风魔镜III96度镜片
表1 SDK支持镜片列表
2、获取厂商列表
GetManufacturers ( string strLanguageCodeByISO963)
函数功能:获取json文件厂商列表
输入参数:中文(“zh”)
返回值:厂商列表
3、获取产品列表
GetProducts ( string strManufacturerKey, string strLanguageCodeByISO963)
函数功能:获取Manufacturer下的产品列表
输入参数:厂商信息KEY,“zh”
返回值:产品列表
4、获取镜片列表
GetGlasses(string strProductKey, string strLanguageCodeByISO963)
函数功能:获取Product下的镜片列表
输入参数:产品信息KEY,“zh”
返回值:镜片列表
Mojing.cs,Awake( )中解析出GlassesKey和GlassesName,获取所有镜片的名称和对应的Key,加入glassesKeyList和glassesNameList;Menu.unity示例场景中生成眼镜列表,选择不同的眼镜,产生不同的畸变效果。
图2 Game窗口镜片切换下拉菜单效果
5、支持的蓝牙手柄
SDK包里,凡涉及到蓝牙手柄交互操作的场景demo,均需提前在手机上适配并连接蓝牙手柄,对于不同的系统平台,需要相应的蓝牙手柄做支持,如下表2所示。
支持的系统平台
魔镜1代手柄
Zeemote JS1 V3
魔镜2代手柄
魔镜3代手柄
魔镜4代手柄
小米蓝牙双手柄
小米蓝牙手柄
新游无线游戏手柄
Newgamepad N1 Pro
北通NE蓝牙手柄
BETOP 2585 BFM
表2 SDK支持蓝牙手柄列表
四、SDK包介绍
1、在导入UnityPackage之前,确保Unity3D版本满足SDK包的要求,本文第二部分已详细说明,此处不再赘述。
2、导入SDK开发包,如下图3所示。包内容如下图4所示。
导入 SDK package
图4 SDK包文件目录
3、Demo中包含如下5个示例场景,涵盖SDK各个常见易用的功能模块。
场景文件夹目录
360PhotoDemo.unity
图6 360PhotoDemo场景层次图
在全景图360PhotoDemo场景中,球体物体材质为全景图片材质,MojingMain实现陀螺仪位姿实时响应,MojingInputManager监听并接受蓝牙外设输入并响应,ruler_x,ruler_y分别为竖直和水平方向的标尺。Canvas画布实现UI Button,EventSystem监听触屏或按键操作,可切回Menu场景。MojingMain.prefab、MojingHead.prefab和MojingInputManager.prefab在Assets\MojingSDK\Prefabs目录中已提供,开发人员可根据实际需要添加和修改
Menu.unity
Menu场景层次图
在菜单切换场景中,Button选择提供两周交互模式:(1)蓝牙手柄摇杆键切换Button,OK键按下确定,响应Demo.cs中的回调;(2)GazePointer射线检测 选中Button,触屏按下确定,响应Demo.cs中的回调。Canvas画布下的各个Button回调响应函数,实现对应的场景切换或者模式切换。
ButtonOnClick回调响应函数
UIListController.cs根据镜片列表信息实例化出镜片Text选项,可通过蓝牙手柄摇杆或GazePointer捕获焦点选择镜片模式。
镜片切换下拉菜单
Mojing1stC.unity &Mojing3rdC.unity
漫游示例场景中,根据需要入MojingFirstCharacterController.prefab或MojingThirdCharacterController.prefab,实现角色控制,MojingInputManager.prefab监听并接受蓝牙外设指令键值并响应。
4、Plugins文件夹
图10 Plugins文件夹目录
4.1 Plugins/Android
存放Android插件,包括.jar、.so、.xml文件等。开发者可根据实际需要在Assets\Plugin\Android\AndroidManifest.xml文件中配置手柄的使用方式以及使能可支持的蓝牙手柄型号。
4.1.1配置手柄的使用方式
&lt&ltmeta-data android:name="com.baofeng.mojing.joystick.LongPressTime" android:value="1000" /&gt&gt
&lt&ltmeta-data android:name="com.baofeng.mojing.joystick.SendRepeatKeyEvent" android:value="false" /&gt&gt
&lt&ltmeta-data android:name="com.baofeng.mojing.joystick.RepeatKeyEventInterval" android:value="16" /&gt&gt
&lt&ltmeta-data android:name="com.baofeng.mojing.joystick.TranslateJoystickToGamePad" android:value="true" /&gt&gt
&lt&ltmeta-data android:name="com.baofeng.mojing.joystick.8DirectionGamePad" android:value="false"/&gt&gt
&lt&ltmeta-data android:name="com.baofeng.mojing.joystick.SendPadCenterKeyEvent" android:value="true"/&gt&gt
参数的含义如下:
LongPressTime:长按时间,单位毫秒;
SendRepeatKeyEvent:是否发送重复键值;
RepeatKeyEventInterval:发送重复键值的间隔,单位毫秒;
TranslateJoystickToGamePad:是否将摇杆信息翻译成GamePad;
8DirectionGamePad:是否启用八向轴GamePad操作;
SendPadCenterKeyEvent:将摇杆信息翻译成GamePad时,是否产生中间按键的键值。
使能特定的蓝牙手柄型号
修改Assets\Plugin\Android\AndroidManifest.xml中如下meta-data的值,true表示使能该手柄,false表示不用该手柄
&lt&ltmeta-data android:name="com.baofeng.mojing.joystick.use.mojing1" android:value="true"
&lt&ltmeta-data android:name="com.baofeng.mojing.joystick.use.mojing2" android:value="true" /&gt&gt
&lt&ltmeta-data android:name="com.baofeng.mojing.joystick.use.mojing3" android:value="false" /&gt&gt
&lt&ltmeta-data android:name="com.baofeng.mojing.joystick.use.xiaomi" android:value="true" /&gt&gt
&lt&ltmeta-data android:name="com.baofeng.mojing.joystick.use.icade" android:value="true" /&gt&gt
&lt&ltmeta-data android:name="com.baofeng.mojing.joystick.use.hid" android:value="true"/&gt&gt
其中,name项支持配置哪种手柄,value项指出该手柄是否使用。在本文档发布之时,支持的手柄类型有:
mojing1: 第一代暴风魔镜手柄,为Zeemote协议的手柄,蓝牙名称为“Zeemote JS1 V3”
mojing2:暴风魔镜二代,以及早期发售的暴风魔镜三代所配手柄,为加密HID协议,蓝牙名称为“Mojing”
mojing3:部分暴风魔镜三代及暴风魔镜III Plus所配手柄,外形和mojing2相同,为HID及私有协议,蓝牙名称为“Mojing3”,SDK是以私有协议方式支持,因此当手机中有配对的Mojing3,但是实际没有开时,会在连接过程中导致较长时间等待。
xiaomi:小米的蓝牙手柄,其本身是标准的HID手柄,直接使能通用HID手柄即可使用,但是小米的左摇杆会自动发摇杆和gamepad两套结果,使能该手柄,将会根据配置,只发送一套需要的键值。
icade:目前市场上主流的支持ios系统用的通讯方式,为了方便既有苹果手机,又有安卓手机的童鞋,不必把手柄切来切去而增加的支持。由于目前只确认北通的BETOP 2585可以通过蓝牙名字区分出icade模式,因此眼下仅支持该型号手柄工作在icade模式下。
hid:通用蓝牙HID手柄的支持。
4.2 Plugins/iOS
存放iOS插件,包括.a、.bundle、.m、.mm文件等。开发者可在UnityIOSAPI.h头文件中看到接口函数的声明,具体的函数功能及参数说明见本文第五部分“SDK功能模块”。
五、SDK包介绍
1、陀螺仪头部跟踪
为了获取手机陀螺仪数据,控制场景内相机的位姿,需将场景内默认Camera替换为MojingMain,并且为GameObject添加脚本组件,如图11所示。
图11 MojingMain物体结构及组件
1.1 启动头部跟踪
boolean Unity_StartTracker (int nSampleFrequence)
函数功能:启动头部跟踪,此函数必须在调用其它头部跟踪函数之前调用。
输入参数:采样频率,以Hz为单位。内部会判定用户手机头部跟踪可使用的最小采样间隔,如果最小采样间隔不能满足nSampleFrequence参数所指定的采样频率,则自动采用手机允许的最小采采样间隔,SDK中设置为100。
返回值:初始化成功返回True,否则返回False。
注意:调用本函数之前,所有其他的头部跟踪相关函数调用都将失败。
本函数必须与Unity_StopTracker函数成对调用。
1.2 头部跟踪复位
void Unity_ResetTracker ( )
函数功能:头部跟踪复位。
输入参数:无。
返回值:无。
1.3 复位YAW旋转角
void Unity_ResetSensorOrientation ()
函数功能:YAW旋转角度复位,即欧拉角中的横摇角。
输入参数:无。
返回值:无。
1.4 开始校准头部跟踪偏置值
boolean Unity_StartTrackerCalibration();
函数功能:强制校准头部跟踪偏置值。
输入参数:无。
返回值:成功清楚偏置值校准状态返回True,否则返回False。
注意:无论是否调用此函数,在StartTracker之后都会自动进入校准状态。
1.5 获取头部跟踪偏置值是否已经校准
boolean Unity_IsTrackerCalibrated ();
函数功能:判断头部跟踪偏置值是否已完成校正。
输入参数:无。
返回值:已经校准过返回True,否则返回False。
1.6 获取当前视角,以矩阵形式表示
void Unity_getLastHeadView (float[] headView)
函数功能:获取当前视角,以矩阵形式表示。
输入参数:headView 浮点型数组,长度必须是16。
返回值:返回的视角信息存放于headView 数组中。
1.7 停止使用头部跟踪
void Unity_StopTracker()
函数功能:停止使用头部跟踪。
输入参数:无。
返回值:无。
?注意:调用此函数之后,除Unity_StartTracker( )之外其他的头部跟踪调用都将不可使用。
本函数必须与Unity_StartTracker( )函数成对调用。SDK中在程序启动时调用Unity_StartTracker( ),程序退出时调用Unity_StopTracker( ),而并非场景切换时调用,此做法是为了保持整个Application中的陀螺仪坐标系保持一致。
2、图像抗镜片畸变
反畸变是为了适用于对抗镜片畸变、色散而必须在显示图像中做特殊的图形处理和颜色处理的过程。如无特别声明,所有畸变函数的调用必须在Open GL线程中进行。
2.1 启用畸变
boolean Unity_EnterMojingWorld(String GlassesKey)
函数功能:启动畸变系统。
输入参数:GlassesName指定畸变需要适配的眼镜型号,参见表1。
返回值:True 表示执行成功,False表示执行失败。
2.2 获取推荐视场角(FOV)
float Unity_GetGlassesFOV ()
函数功能:获取推荐的视场角,以角度为单位。
输入参数:无。
返回值:以角度为单位的视场角大小。
2.3 绘制本地纹理
void SetTextureID(int textureID)
函数功能:SDK根据当前的眼镜型号、畸变参数、和手机屏幕尺寸,生成一副纹理。
输入参数: textureID为获取本地纹理ID,可通过GetNativeTextureID( )方法获取
返回值:无
注意:通过此函数得到Texture句柄以后,应该根据纹理的类型绘制对应的图像内容,图像内容应该充满整个纹理。
推荐分别获取单眼的纹理并分别绘制图像后交由绘制畸变图像方法绘制。
使用自行创建的纹理绘制并绘制图像后交由反畸变系统绘制的方法依然被SDK支持,但是不推荐使用。
2.4 绘制场景变化通知
boolean Unity_OnSurfaceChanged(int newWidth, int newHeight)
函数功能:当绘制场景变化时,通知SDK根据新的屏幕尺寸计算畸变参数。
输入参数:newWidth 新的窗口宽度值,必须是窗口的长边;
newHeigth 新的窗口高度值,必须是窗口的短边;
返回值:True 表示执行成功,False表示执行失败。
注意:此函数可以在OpenGL线程之外调用;
新的绘制效果将在下一次调用DrawTexture函数时生效;
初始化SDK调用Init函数时会根据当时的窗口信息取得适用的屏幕尺寸并在Unity_EnterMojingWorld时用该尺寸初始化畸变参数表。
2.5 修改畸变适配的眼镜型号
boolean Unity_ChangeMojingWorld(String GlassesName)
函数功能:根据GlassesName,更改绘制图像在屏幕上的位置。
输入参数:GlassesName指定畸变需要适配的眼镜型号。
返回值:True 表示执行成功,False表示执行失败。
注意:此函数可以在OpenGL线程之外调用;
新的绘制效果将在下一次调用DrawTexture函数时生效。
2.6 刷新镜片渲染效果
UpdateProfile( )
函数功能:刷新FOV,获取更新镜片渲染效果
输入参数:无
返回值:无
2.7 停用畸变
boolean Unity_LeaveMojingWorld()
函数功能:停止使用畸变。
输入参数:无
返回值:无
注意:此函数必须与Unity_EnterMojingWorld在同一OpenGL线程中成对调用。
3、魔镜蓝牙手柄适配及交互控制
对于Android开发者,SDK中的蓝牙协议支持魔镜1代手柄、2代手柄、3代手柄和小米蓝牙手柄;对于iOS开发者,SDK中的蓝牙协议支持魔镜4代手柄。Unity3D工程中,接收蓝牙手柄数据及状态的脚本为MojingInputManager.cs,该脚本中函数侦听蓝牙手柄状态,响应手柄操作。
3.1 蓝牙连接检测
onDeviceAttached(string deviceName)
函数功能:检测蓝牙手柄连接。
输入参数:连接的手柄名称。
输出参数:无。
3.2 蓝牙断开检测
onDeviceDetached(string deviceName)
函数功能:检测蓝牙手柄连接。
输入参数:连接的手柄名称。
输出参数:无。
3.3 蓝牙开关是否打开
onBluetoothAdapterStateChanged(string state)
函数功能:判断蓝牙是否打开
输入参数:蓝牙打开与否,目前按照android的定义,“12”表示开,“10”表示关。
输出参数:无。
3.4 蓝牙设备按键按下响应函数
OnButtonDown(string currentBtn)
函数功能:侦听蓝牙手柄按下的逻辑处理;对于不同按键的按下区域(图12所示),对应不同的case响应。
输入参数:设备名称/轴id/键值(多轴手柄)、设备名称/键值
输出参数:无。
常用键值:表3
Demo场景响应示例
Zeemote JS1 V3
确定/ 漫游场景中响应角色跳跃
菜单键,demo中未做响应
返回至menu场景/退出应用
LEFT_BUTTON
漫游场景中控制角色朝向/运动方向
RIGHT_BUTTON
DOWN_BUTTON
CENTER_POSITION
摇杆处于中心位置
确定/ 漫游场景中响应角色跳跃
返回至menu场景/退出应用
菜单键,demo中未做响应
LEFT_BUTTON
漫游场景中控制角色朝向/运动方向
RIGHT_BUTTON
DOWN_BUTTON
CENTER_POSITION
摇杆处于中心位置
小米蓝牙手柄
Newgamepad N1 Pro
BETOP 2585 BFM
A 键,demo中未做响应
B 键,demo中未做响应
X 键,demo中未做响应
Y 键,demo中未做响应
KEYCODE_BUTTON_L1
L1键,demo中未做响应
KEYCODE_BUTTON_R1
R1键,demo中未做响应
KEYCODE_BUTTON_L2
L2键,demo中未做响应
KEYCODE_BUTTON_R2
R2键,demo中未做响应
KEYCODE_MENU
MENU键,确定
KEYCODE_BACK
返回至menu场景/退出应用
KEYCODE _UP
DPAD轴摇杆,控制角色朝向/运动方向;LEFT轴和RIGHT轴,demo中未做响应
KEYCODE _DOWN
KEYCODE _LEFT
KEYCODE _RIGHT
手柄键值表
DPAD摇杆,配合按键,识别字符串表示为100/19、100/20…
左摇杆,配合摇杆区域,识别字符串表示为101/19、101/20…
AXIS_RIGHT
右摇杆,配合摇杆区域,识别字符串表示为102/19、102/20…
小米蓝牙手柄轴id表
图12 摇杆键值区域图
3.5 蓝牙设备按键抬起响应函数
OnButtonUp(string currentButton)
函数功能:侦听蓝牙手柄抬起的逻辑处理。
输入参数:设备名称/轴id/键值(多轴手柄)、设备名称/键值
输出参数:无。
常用键值:表3
3.6 蓝牙设备按键长按响应函数
onButtonLongPress(string pressBtn)
函数功能:侦听蓝牙手柄长按的逻辑处理。
输入参数:设备名称/轴id/键值(多轴手柄)、设备名称/键值
输出参数:无。
常用键值:表3
3.7 传递轴坐标
onMove(string info)
函数功能:传递轴坐标
输入参数:设备名称/轴id/x,y,z
输出参数:无。
3.8 触屏操作响应
OnTouchEvent(string touchEvent)
函数功能:响应手机触屏按下/抬起
输入参数:“ACTION_DOWN”表示触屏按下,“ACTION_UP”表示触屏抬起。
输出参数:无
4、角色控制器
SDK中第一、第三人称角色控制器基于Mojing蓝牙手柄输入控制,实现场景内漫游和MojingMain控制,是Mojing蓝牙手柄实现交互的一个应用实例。
4.1、第一人称角色控制器
将MojingFirstCharacterController.prefab 和MojingInputManager.prefab拖入场景中,如下图13所示。
图13 第一人称角色控制物体及组件
Mojing1stController.cs为第一人称控制脚本,包含角色自主漫游、跳跃、惯性、碰撞检测等部分,参数调整与Unity自带第一人称角色控制器相似。
4.1.1 Character Controller Component
Unity3D自带Character Controller组件,参数:
Step Offset:以米为单位的角色控制器的台阶偏移量。
Radius:角色胶囊体的半径。
Height:角色胶囊体高度。
4.1.2 Mojing1stController 脚本组件
控制第一人称角色漫游,参数:
InputMoveDirection:角色移动方向。
InputJump:角色是否可跳跃。
4.1.3 MojingInputManager 脚本组件
接收蓝牙外设输入,并响应。具体函数接口上文已做了详细介绍,不再赘述。
4.2、第三人称角色控制器
第三人称角色控制器预制体MojingThirdCharacterController.prefab,由蓝牙外设手柄控制漫游,如需在场景中实现第三人称角色控制器,将MojingThirdCharacterController.prefab 和MojingInputManager.prefab拖入场景中,如下图14所示。
图14 第三人称控制物体及组件
4.2.1 Animator 动画系统组件
第三人称模型(下图15所示)采用Animator动画系统,利用Animator状态机(下图16所示)实现动作动画及切换。
第三人称角色模型
第三人称角色模型Animator状态机
4.2.2 Character Controller 组件
同4.1.1 。
4.2.3 Mojing3rdController.cs
第三人称控制脚本,包含角色漫游、跳跃、惯性、碰撞检测、参数调节与Unity自带第三人称角色控制器类似。参数:
WalkMaxAnimationSpeed:行走动画播放速度。
JumpAnimationSpeed:跳跃动画播放速度。
Division:蓝牙外设输入摇杆左右键时,每次响应的旋转角度为90°/Division。
WalkSpeed:角色移动速度。
Jump Heigh:最大跳跃高度。
Gravity:角色重力。
CanJump:角色是否可跳跃。
4.2.4 Mojing3rdCamera.cs
第三人称相机控制,包含相机实时跟随及陀螺仪头控。
Distance:相机距离角色的水平距离。
Heigh:相机距离角色的垂直距离。
六、应用程序发布
Unity3D支持跨平台发布,此SDK支持Android平台、iOS平台发布。
1、Android Application发布
对于Android Application发布,建议使用Unity3D 4.6.1(Win)以上版本发布。Player Settings如下图17所示:
图17-1 Android发布 Player Settings
图17-2 Android发布 Player Settings
在Build Settings窗口中添加需要Build的场景。
图18 添加Bulid场景
2、iOS Application发布
对于iOS Application发布,建议使用Unity3D 5.1.0(Mac)发布。Player Settings设置:
libMojingSDK.a 文件,属性栏添加 CoreBlueTooth.framework,如下图19所示。
图19 libMojingSDK.a 文件属性设置
2.2 添加需要Build的场景,Run in Xcode as 设为”Debug“(暂时),如下图20所示。
图20 Build Settings窗口设置
2.3 Default Orientation设为Landscape Right
图21-1 iOS发布Player Settings
2.4 Graphics APIs设为 OpenGLES2
图21-2 iOS发布Player Settings
Unity 发布为xcode工程包,打开后,在UnityAppController.mm文件中加入OpenGL绘制的注册语句:
#include "Libraries/Plugins/iOS/UnityIOSAPI.h"
UnityRegisterRenderingPlugin(&UnitySetGraphicsDevice, &UnityRenderEvent);
文件位置:
图22-1 Xcode工程设置
加入语句位置:
图22-2 Xcode工程设置
2.6 Xcode工程设置:
图22-3 Xcode工程设置
2.7 连接手机,Build。
以上为MojingSDK for Unity的开发说明文档,各位开发者可根据unitypackage及该文档进行操作和实践。如遇开发问题,欢迎与我们联系,进行咨询与讨论。
暴风魔镜VR开放平台

我要回帖

更多关于 unity 手柄 的文章

 

随机推荐