美文网首页Unity3D与游戏开发AR/VR/MRVR
GoogleVR SDK For Unity 001:Get

GoogleVR SDK For Unity 001:Get

作者: thiagooo0 | 来源:发表于2016-12-13 09:52 被阅读1724次

    (本人unity和vr新手,如有错漏,请大家多多指教)

    google VR官网,可自行翻墙,然后略过下面大部分内容~ 。 ~

    google VR分为Cardboard和Daydream,Cardboard是早期的VR解决方案,而Daydream可以说是Cardboard的进阶版,提供了更加高质量的移动虚拟现实体验。不过Daydream要求比较高(android7.0+商家自定义的daydream设备)。

    google给unity,android,ios和unreal都提供了相应的sdk,大家可以根据需求使用不同的sdk,下文采用unity做google VR的开发。

    我们来看下文档。

    1. Google VR SDK For Unity

    google的sdk如何帮助我们快速地开发vr应用:

    1. 使用头部追踪
    2. 并行的立体渲染(不太会翻译,原文:Side-by-side stereo rendering)
    3. 探测到用户的意图通过trigger 或者 controller
    4. 自动的立体配置(得到双目的vr视图)
    5. 对vr眼镜的镜片造成的扭曲做修正
    6. 中间有一个竖线作为标志,帮助你把手机放入眼镜的时候,可以更加准确。
    7. 陀螺仪的自动校准

    还有还有:

    1. daydream控制器的支持
    2. 空间化的媒体渲染
    3. 有一些预制件和脚本给入门玩家参考和使用
    4. 在unity内运行游戏时,可以通过按下alt/control键加鼠标的移动,模拟用户的头部移动
    5. 一个用来显示fps的预制件,可以检测你程序的渲染效果

    unity和android studio(unity 可以直接生成android apk,不需要用到android原生的话,不需要用android studio)的下载和配置就不说了~ 。 ~

    下载unity的google VR sdk。给个百度云(GoogleVRForUnity.unitypackage)

    2. Get Start

    1. 在unity开启一个3d的项目
    2. 在unity编辑器的界面中,选择Assets -> Import Package -> Custom Package。选择googleVR SDK(GoogleVRForUnity.unitypackage )

    然后选择Import

    1. 选择Assets -> Google VR -> Demos -> Scenes下面看到有四个场景。大家可以自行参考下。

    Stereo Rendering(立体渲染?空间渲染?)

    要开启Stereo Rendering,可以添加GVRViewerMain这个预制件到你的scene中,或者添加GvrViewer这个脚本到一个scene中存在的物体中。添加了以后运行游戏是酱紫的:


    Stereo Rendering可以提供这样的功能。

    1. 模拟头部追踪。在游戏模式中,你可以用鼠标去控制镜头,得到用头追的效果。按住ALT,然后移动你的鼠标,可以模拟头部转动。按住Control键,移动鼠标,模拟头部左右倾斜。
    2. 如果是在开发daydream项目,可以在游戏模式中使用Controller Emulator(controller emulator让我们用第二台安卓手机去代替daydream设备)。
    3. 如果是在开发cardboard项目,在游戏模式中点击鼠标,可以模拟选择一个cardboard viewer。
    4. 失真纠正。由于app真机运行的时候,会有可能出现失真。所以在游戏模式中,摄像机就会做一些失真纠正了。在游戏模式中,可以在GvrViewer properties中选择模拟一种手机模式和视图模式去做模拟。

    User Interactions(和用户交互)

    在VR应用中和用户交互的方式不同于普通的手机应用。在VR模式中,用户不可以在手机屏幕中随便点击。UI元素必须要是立体的,并且可以让用户清晰地看到。而且交互的元素应该环绕着用户,不只是在用户的正前方,用户一转头就啥都看不到是一种很差的体验。Google VR SDK for Unity有一些预制件和脚本可以帮助我们实现用户与界面进行交互。

    daydream控制器

    添加GvrControllerMain预制件到你的scence中去实现通过daydream控制器去输入的功能。详情参考Controller API

    Gaze(注视)

    在cardboard应用中,用户可以通过注视某一个物体来和应用进行交互。google vr sdk提供两个主要的方法帮助我们跟用户通过注视进行交互:使用GvrGaze脚本,或者拥有unity的Event System的GazeInputModule脚本。

    使用GvrGaze

    GvrGaze允许用户可以很轻易地通过注视和game obeject交互。这个脚本对uGUI不起作用。从Assets -> GoogleVR -> Scripts -> UI -> GvrGaze中把它拖到摄像机中,让他生效。他会给实现了IGvrGazePointer和IGvrGazeResponder的objects发送事件。(官方文档中的目录,在下暂时没有找到~ 。 ~)

    使用GazeInputModule

    GazeInputModuleJ脚本是给unity的EventSystem的一个输入模块,当用户注视一个GameObjects的时候,就可以选择它。脚本的目录在Assets -> GoogleVR -> Scripts -> GazeImputModule,把它添加到scene的EventSystem object中去,就可以使用了。

    在场景中和一个3D object去进行交互时,需要给Event Camera中添加一个PhysicsRaycaster组件。当然你也需要去给每一个参加交互的物体添加脚本去响应事件。这个物体当然也需要一个collider组件。
    (看完,发现又没有这么一个例子~ 。 ~可能是sdk版本和官方文档不匹配的缘故吧。但是我明明下的是最新的啊)

    自己动手

    GoogleVr -> Demos -> Scenes -> GVRDemo ,这是一个经典的google vr的寻宝小游戏。现在根据这个demo来无脑写一个自己的vr小程序

    快快快,新建一个项目,导入google SDK,新建一个scenes。

    二话不说,把GvrViewerMain拖到场景中去,再把GvrReticlePointer拖到MainCamera的子目录中。随手再新建一个Cube。这样场景就布置好了。

    接下来就剩下交互了。

    建立一个eventSystem,里面有两个component,把自带的module删掉,添加Gvr Pointer Input Module这个component,里面有一个脚本:GvrPointerInputMoudle。

    在main camera中添加组件GvrPointerPhysicsRaycaster。

    最后轮到cube了,先添加teleport脚本,至于他的两个属性,inactive Material和Gazed At Material,直接用了google sdk 的material了。分别表示cube被选中和没被选中时的材质。

    在cube中再添加event trigger组件,分别添加Enter,Exit,Click事件,选择目标为cube。
    在三个事件中选择对应的SetGazeAt()(用户注视时调用的方法)和TeleportRandomly()(用户点击屏幕时的方法)方法(enter和exit选择的方法带一个布朗类型的输入,所以其中一个打个勾吧)。

    然后运行游戏!bingo!搞掂了。

    8.jpg

    今天先到这里,详细的脚本代码下次再说。
    我的unity,googleVR学习总结目录在这里。

    相关文章

      网友评论

        本文标题: GoogleVR SDK For Unity 001:Get

        本文链接:https://www.haomeiwen.com/subject/dsbvmttx.html