虚拟现实VR(Virtual Reality)和增强现实AR(Argument Reality)的概念其实在很多年前就已经出现,2015年下半年开始变得火热,在各大媒体圈子中频繁出现,而今年2016年成为VR元年,像Facebook、Sony、HTC、Google等行业巨头都在虚拟现实领域推出自己的硬件设备或者专门成立虚拟现实部门做出很大的投入。

虚拟现实首先在人机交互上发生了跨越性的改变,一方面使用遥控手柄代替传统键盘鼠标等输入设备,跟踪玩家头部,玩家可以通过头部运动自然的以自由视角观察整个虚拟世界,能够720全视角观看周边环境,而在此之前,像观看电影屏幕时,120度为最佳视角范围,电影屏幕只是现实世界的一部分小视角,而虚拟现实技术强调的是玩家的“浸入感”,这也是评估VR设备质量的最重要指标,眩晕感、与现实世界的差异感都是VR设备努力避免的缺陷和努力改进之处。

目前虽然VR话题成为热点,相关技术飞速发展,但其面临的挑战十分巨大,几大公司研发的VR头盔普遍很笨重,需要大量的线缆连接,移动性差,同时价格昂贵,短时间难以推广开来。另一方面,像国内的低端VR设备,如“暴风魔镜”,利用手机屏幕做显示设备,移动性好,设备轻便,价格便宜,但其实现的原理实际上是将手机屏幕分成两部分,即牺牲一半的手机分辨率,造成实际体验中颗粒感强,“浸入感”也差,同时受帧率等因素影响眩晕感、眼睛不适感都很强,难以满足人们的期望。


@暴风魔镜开发流程


VR设备中成本最低的属国内的暴风魔镜,最新的暴风魔镜4代仅售199元人民币,其世界第一的VR设备销量和其知名度主要是因为其体型轻便、价格便宜,成为很多游戏玩家的掌上“玩具”。

暴风魔镜为开发者提供了SDK和示例Demo,使开发者可迅速将暴风魔镜加入到游戏工程中作为VR输入交互设备,暴风魔镜支持的游戏引擎为Unity3D和UnrealEngine4,官方提供的开发文档介绍了魔镜设备的开发方法,支付SDK的接入以及参数的回调、工程的配置等等。另外官方提供了暴风魔镜游戏应用发布平台,注册开发者帐号并进行个人认证或企业认证之后便可以提交应用,审核通过便可将应用进行发布以及获取利润。

这里使用暴风魔镜SDK开发一个场景游戏Demo,实现角色在场景中使用手柄控制自由走动,确认按钮人物跳跃,以及跟踪头部运动以720度自由视角观察场景和天空,并将Unity工程导出Xcode工程,进行相关配置后运行在iPhone真机设备上,使用暴风魔镜进行体验。



一、使用暴风魔镜SDK实现Demo中第三人称角色控制自由走动和自由视角的原理过程并打包在iPhone上运行:



unity运行vr项目崩溃_unity运行vr项目崩溃

         

unity运行vr项目崩溃_虚拟现实_02

可以直接改装已有的第三人称角色Demo也可以按照如下方式自行构建:

1.新建一个Unity工程,导入MojingSDK For iOS AndroidUnity暴风魔镜SDK包;

2.创建一个Scene场景,场景中导入一个地形,设置好光源以及背景音乐等;

3.导入一个人物角色模型,绑定骨骼,设置好状态机人物动画,动画主要有休息、前进、跳跃,角色控制器实现上下左右控制人物前进、左转、右转、转身,确认键控制人物跳跃。SDK提供的Demo中MojingThirdCharacterController预设已经实现了上面的功能以及监听手机陀螺仪事件跟踪用户头部运动实现自由视角;

4.设置好角色模型后要将场景中的MainCamera替换为MojingMain预设摄像头,实际上是将左右两个摄像头绑定在一起,将屏幕分成左右两部分;

5.另外加入IntegrateInputManager跨平台交互预设和Overlay聚焦预设,IntegrateInputManager用于获取手柄的按键事件,可以上下左右切换按钮,按确认键选中触发按钮;Overlay预设组件实现场景中心的GazePointer射线准星,用于聚焦UI按钮,聚焦按钮后点击确认键可以触发按钮点击事件;

完成以上步骤后运行Unity工程Game场景中出现两个摄像头视角的场景,键盘方向键可控制人物走动,但自由视角需要在真机上结合暴风魔镜进行测试

Graphic APIs修改为OpenGLES2和OpenGLES3,Tartget SDK可以选择Xcode工程使用真机调试还是模拟器调试,这里选择Device SDK真机调试;

libz.tbd和libsqlite3.tbd库:


unity运行vr项目崩溃_开发者_03

@另外真机运行可能会出现如下现象崩溃,解决办法在下面的文章中:

二、暴风手柄输入按键的适配与获取(可以单独作为游戏输入设备使用):



unity运行vr项目崩溃_虚拟现实_04

先将IntergrateInputManager预设添加到场景中,然后在脚本中可以直接像Unity中Input.GetButtonDown(KeyCode)类似的方法获取按键事件,SDK中已经进行了键值的适配,适配在脚本中可以找到:


unity运行vr项目崩溃_开发者_05

获取事件的脚本中需要引入:using MojingSample.CrossPlatformInput;

然后在Update周期函数中进行时间判断,比如获取按键按下:if(CrossPlatformInputManager.GetButtonDown("OK")){ }


实例脚本如下:


[csharp]  view plain  copy

 print ?

    1. //  
    2. //MojingInput.cs  
    3. //  
    4. // Created by [JiangXinhou]  
    5. //  
    6. // Copyright jiangxinhou@outlook.com ()  
    7. using UnityEngine;  
    8. using System.Collections;  
    9. using MojingSample.CrossPlatformInput;//引入暴风魔镜跨平台输入类库  
    10.   
    11. public class MojingInput : MonoBehaviour {  
    12.   
    13. // Update is called once per frame  
    14. void Update () {  
    15.   
    16. if (CrossPlatformInputManager.GetButtonDown ("LEFT")) {  
    17. //十字键左键按下  
    18.         }  
    19. if (CrossPlatformInputManager.GetButtonDown ("RIGHT")) {  
    20. //十字键右键按下  
    21.         }  
    22. if (CrossPlatformInputManager.GetButtonDown ("UP")) {  
    23. //十字键上键按下  
    24.         }  
    25. if (CrossPlatformInputManager.GetButtonDown ("DOWN")) {  
    26. //十字键下键按下  
    27.         }  
    28.   
    29. if (CrossPlatformInputManager.GetButtonUp ("OK")) {  
    30. //手柄OK键抬起  
    31.         }  
    32. if (CrossPlatformInputManager.GetButtonUp ("C")) {  
    33. //手柄返回键抬起  
    34.         }  
    35. if (CrossPlatformInputManager.GetButtonUp ("MENU")) {  
    36. //手柄菜单键抬起  
    37.         }  
    38. if (CrossPlatformInputManager.GetButtonUp ("CENTER")) {  
    39. //十字键中心抬起  
    40.         }  
    41. //获取手柄摇杆水平摆动值  
    42. float x = CrossPlatformInputManager.GetAxis("Vertical");  
    43. //获取手柄摇杆竖直摆动值  
    44. float y = CrossPlatformInputManager.GetAxis("Horizontal");  
    45.     }  
    46. }


    三、。。。 。。。


    @未完待续




    /article/details/51437824