开发一个最简单的Cardboard虚拟现实应用(四)做一个Cardboard第一人称控制器
[开源互助-原创文章,转载请说明出处]
第三帖中已经创建了一个cardboard自带的demo应用,但它是不能移动的,玩家只能站在原地,通过头部转动来观察四周,除此之外,玩家并没有更多的手段与游戏场景进行交互。本帖将描述如何使用蓝牙手柄实现玩家的位置移动,包括前、后、左、右,跳跃等动作。
第一步:首先我们得有一个第一人称角色在场景中,因此,导入UNITY自带的第一人称模型包:
导入场景后,在项止浏览窗口中:
第二步:将第一人称控制器下的prefab拉入到场景中:
如下:
第三步:移除场景中第一人称控制器自身的maincamera,同时将cardboardmain拉到该第一人称控制器的下面:
稍微调整cardboardmain在父物体中的坐标,使其移到第一人称的上端:
第四步:开始修改第一人称控制器的脚本,有以下几点需要修改:
1、之前第一人称的视线是跟随鼠标移动,现在要使其跟随cardboard跟踪到的头部姿态的运动而移动;
2、之前第一人称的前后左右移动是由键盘上的控键控制,现在要由蓝牙手柄上的按键来控制;
动手:
1、使第一人称的视线其跟随cardboard跟踪到的头部姿态的运动而移动;
在FirstPersonController.cs中的update函数中去掉rotateview(这里就是实现鼠标控制):
同时初始化也去掉:
在Cardboard\Scripts\CardboardHead.cs中的UpdateHead函数中,根据获取到的头部转动数据来控制第一人称的Y轴转向:
这样就实现了使用cardboard的头部转动数据来控制第一人称头部转动的效果。
2、使用蓝牙手柄上的按键来控制第一人称的前后左右移动;
蓝牙手柄被android系统识别手,是作为一种键盘设备来对待的,也就是说,我们无需再为其开发专用的插件,而unity3d中已为其设计了相应的按键事件来响应蓝牙手柄上按键的按下,因此,首先要弄清手上的蓝牙手柄的各个按键都对应UNITY3D中哪个按键事件,可以写一个小demo,用来将按下的按键值显示在屏幕上。
我的蓝牙手柄在unity3d中的键值映射关系如下:
有了以上映射关系后,再找到代码中控制第一人称移动和跳跃的地方,修改之:
在FirstPersonController.cs中
在FirstPersonController.cs中
一般游戏中会使用手柄左前端上面的按键来控制角色的走动或者跑动,修改如下:
在FirstPersonController.cs中
这样,就实现了前面提到的两个目标。
再编一个apk试试吧,enjoy it!