1.环境搭建
自从14年底搞了一个unity 4 + oculus dk2+kinect的“严肃”游戏后,一直没有再做过这一类的项目了。到了最近重新着手的时候,发现3种工具都有了大更新。一是unity 4升级为unity 5.4以后,许多功能甚至脚本库都发生了大改动,而且自动集成了oculus开发环境,不用像之前需要导入oculus资源包;二是kinect因为其精确性已经基本被淘汰了,改用新的手势识别设备leap motion,下面记录一下步骤。
unity 5.4.0安装不说了,oculus sdk使用最新的1.9.0,与以前使用的0.4大为不同的是,安装后没有运行的oculus图标,不能进行设置,只能运行支持oculus的程序。leap motion也使用最新版orion beta。3个环境都安装完成以后,就能直接进行开发了。。。。。
在unity中新建一个项目xxx,导入leap motion核心资源包LeapMotion_CoreAsset_Orion_4.1.1.unitypackage,在leap motion官网中下载。里面有一些简单的场景实例,可以直接运行,看看效果。
然后再场景中拖入LMHeadMountedRig的prefab
给下面的leapHandControllrt添加4个prefab:
pepperBaseFullLeftHand和pepperBaseFullRightHand为自带的手的模型之一,勉强算精致
rigidRoundHand_L和rigidRoundHand_R应该为骨头架子模型,控制手势
设置leapHandController下Hand Pool脚本的model pool 的size变量为2,如图绑定prefab
之后便能实现leap motion手势控制了。
而对于oculus,unity 5提供了默认支持,只需要在普通游戏完成以后,在菜单 file-》building-》player setting下,在弹出的面板下勾上virtual reality support,然后增加oculus sdks就行:
如此导出游戏之后,便能在安装有oculus运行环境的电脑上运行游戏了。
2.坑
导出的exe文件不能放在中文路径下,否则不能在头盔里运行,只能在桌面或英文文件夹下运行;
LMHeadMountedRig下的CenterEyeAnchor自带了一个camera组件,正常运行游戏需要取消这个camera组件。
c#脚本中,现在获取当前物体的组件不能直接使用this.AudioSource之类的方法或属性了,需要使用this.GetComponent<AudioSource>();这样的模板方法。不知道是不是升级unity 5以上的原因。
在增加碰撞体的时候,不规则碰撞体只能使用 mesh collider,但是需要其生效需要勾选convex属性,即物体的所有顶点构成一个最小凸多面体,但是这样是影响凹多面体的碰撞效果。
模型问题:unity对fbx支持应该最好,其次是obj,对大部分3dmax制作的max文件来说,通过3dmax转化成fbx都丢失了部分材质贴图,少量没有丢失,可能是3dmax打开现成模型时候缺少必要支持的插件造成的,所以最好模型直接导出为fbx,obj格式需要手动贴图。
另外,模型选择需要仔细,模型划分越细越好,这次游戏我们选择了一个人物模型,整个身体是一个大的mesh render,没有肢体的子模型,造成不能实现肢体动作,贴面的碰撞体,等等一系列问题。
游戏面板问题:通过添加canvas组件绘制游戏面板,包括image,text等组件,这些组件在canvas组件下放置的顺序会影响其遮罩顺序,因此需要注意。
主camera需要与地面平行!并且保持适当高度,否则游戏过程中会产生超强的眩晕感(戴上头盔3秒晕吐),因此camera最好在align with view后调整rotation。