基于移动定位的AR精灵游戏设计

2024-11-06 00:00:00张璘董锦陶琳
数字通信世界 2024年10期

摘要:增强现实(Augmented Reality)AR游戏应用的核心是将现实场景虚拟进游戏世界,实现所处环境在虚拟世界的地理映射,给玩家带来良好的沉浸感和互动性。为了提高游戏的体验感,该文基于移动定位设计了一款AR精灵游戏。游戏将GPS坐标值作为游戏角色在地图中的显示坐标,利用GoogleMap进行地图映射,采用Haversine公式实时计算角色与精灵的间距,实现抓取捕获精灵的过程。游戏以Unity3D为开发平台,采用MonoDevelop作为游戏编辑器,应用C#语言编写游戏脚本,实现虚拟AR精灵在现实场景中的捕获过程。

关键词:增强现实AR;全球卫星定位系统(GPS);移动定位

doi:10.3969/J.ISSN.1672-7274.2024.10.001

中图分类号:TP 391.41 文献标志码:A 文章编码:1672-7274(2024)10-000-03

Design of AR Elf Game Based on Mobile Positioning

Abstract: The core of augmented reality (AR) game applications is to virtualize real scenes into the game world, achieve geographical mapping of the environment in the virtual world, and bring players a good sense of immersion and interactivity. In order to improve the gaming experience, this article designs an AR sprite game based on mobile positioning. The game uses GPS coordinate values as the display coordinates of the game character on the map, uses GoogleMap as the map mapping, and uses Haversine formula to calculate the real-time distance between the character and the sprite, achieving the process of grabbing and capturing sprites. The game is developed using Unity3D as the development platform, MonoDevelop as the game editor, and C # language to write game scVkm1YXBgvcLvYPTjOlOknw==ripts, achieving the capture process of virtual AR sprites in real scenes.

Keywords: augmented reality (AR); GPS; mobile positioning

增强现实类手机游戏市场的增长主要是由移动设备的迅速崛起推动的,它可以将数字虚拟信息与现实世界巧妙地融合在一起[1,2],其中,基于位置移动的虚拟现实游戏近年来占据主流,例如,Niantic在2016年发行的精灵宝《Pokémon Go》允许玩家通过智能手机的GPS和GIS运营商提供的服务在现实世界中发现精灵,巧妙地利用移动地理信息完成精灵的捕捉和战斗[3-4];另一款整合了AR技术的手机游戏是《鲨鱼手指3D水族馆》,它使用移动设备的摄像头镜头把现实世界变成危险的水世界,鲨鱼会试图咬球员的手指,所以球员必须通过倾斜移动设备来避开鲨鱼的攻击[5]。因此,通过使用真实地理信息实现虚拟增强现实的游戏已经成为非常流行的趋势,可提供无缝的交互体验,给人身临其境的沉浸式感受。

1 游戏设计思路

本款增强现实游戏在Unity3D平台上完成全部制作,使用Unity3D平台自带的MonoDevelop作为游戏开发环境进行各个脚本的编写,采用Android SDK(Android Software Development Kit)和JDK(Java SE Development Kit)进行游戏打包,并安装在Android手机上运行。本游戏采用了多场景切换模式,调用GPS服务、CUDLR服务、SQLite数据储存服务的控制和管理,从而完成玩家与游戏之间的互动。

2 各场景功能实现

2.1 游戏地图的添加

市面上的GIS服务商很多,如国内的百度地图、高德地图等,他们通常会将现实世界地图缩放到一定比例制作成地图,并将地图分割成为静态地图瓦片提供给使用者。之所以使用谷歌静态地图,是因为在本游戏中我们只需要将现实世界中的街道映射到游戏地图上,而不需要其他多余的数据如地名、地标建筑物等,这样可避免场景界面的混乱。

2.2 游戏角色与精灵的添加及相对距离测算

2.2.1 游戏角色在玩家地图场景中的添加

基于移动定位的AR游戏使得玩家对角色移动的操控并不能通过屏幕触摸来实现,而是需要通过GPS定位获取玩家在现实世界中的地理映射,也就是游戏角色在虚拟地图中的经纬度是玩家在真实世界中GPS测得的经纬度值。通过导入Unity的跨平台输入模块,为游戏角色添加GPS罗盘控制脚本,以实现游戏角色的移动。添加该脚本需要以下几个步骤。

(1)通过绑定游戏角色罗盘方向:将手机指南针的正北向绑定为游戏角色的面部朝向,当玩家水平转动手机时,游戏角色也会随之在背景地图上转动朝向,确保转向能够平滑完成。

(2)设置游戏角色的GPS定位:当启用手机GPS服务时,将GPS定位得到的经纬度设置为角色的坐标值,当玩家移动手机时,游戏角色随着GPS坐标的变化也会随之在游戏地图上开始移动,这样就能实现映射玩家真实地理位置的初衷。

(3)刷新游戏地图:背景地图的加载是以游戏角色的GPS坐标为中心,向谷歌云平台发送静态地图图像请求来不断获取新的地图背景的。当游戏角色的GPS坐标移动出中心位置坐标边界时,便向谷歌云平台发送当前新的GPS坐标,请求更新谷歌静态地图并重新加载进游戏地图中。这样游戏角色将始终置于新的游戏地图中心点位置,保证了游戏地图空间的不断扩展,而不是仅局限于最初请求得到的空间区域。

2.2.2 精灵在玩家地图和捕获场景中的添加

AR精灵在玩家地图场景中添加位置需要满足所处位置的随机性,调用Unity的随机生成函数Random.value,将其叠加在当前获取的GPS经纬度上即可得到精灵本身在虚拟地图中的坐标,继而调用Unity中的3D模型生成一个随机精灵。同时使用Unity 3D自带的SQlite轻型数据库,用以存放每个精灵生成时的虚拟经纬度坐标,用以实现后续精灵与游戏角色相对距离的计算。由于游戏角色随着玩家的移动在虚拟地图上的位置将发生变化,因此精灵显示的位置也同样需要相应变化,才能反映出角色与精灵两者之间距离的相对变化,这种变化同样通过加载背景地图的方式更新,这里更新帧速率为60 FPS。

精灵在捕获场景中实现了虚拟物体与真实世界的叠加,作为增强现实的技术核心,强调把现实场景中的信息展现在虚拟世界当中,这种虚拟与现实场景的叠加通过Unity 3D平台自带的相机渲染模式,首先将UI界面创建成一个空白的画布,设置屏幕空间将整个屏幕满屏覆盖,继而启动摄像机模式,将画布放置到摄影机前方,画布看起来绘制在一个与摄影机固定距离的平面上,渲染速率为60 FPS,这样就可以为AR精灵与玩家捕获过程提供现实交互背景。

2.2.3 游戏角色与精灵两者之间相对距离的测算

游戏角色在虚拟地图中的三维空间中计算相对距离可以模拟精灵动态位置的调整。这里设置一个可视距离阈值,当两者相对距离小于可视距离阈值时,表示精灵离玩家在允许范围内,可以出现在游戏屏幕上,因此在地图上构建一个实体化3D精灵模型;反之当两者相对距离超出了可视距离阈值时,表示精灵距离玩家尚远,此时精灵就会在游戏地图上消失。

为了帮助玩家找到精灵的位置,这里设置了探索范围,探索范围设置为可视距离阈值的1~2倍,精灵雷达会时刻判断游戏角色与周围的虚拟精灵是否在这个探索范围之内,若处于范围内会在游戏窗口左上角出现脚印,预示着玩家正在接近某个虚拟精灵。考虑到虚拟地图经纬度坐标的空间距离,可以通过Haversine公式对经纬度和弧度的转变得到地球上任意两点间距[6],从而得到游戏角色与精灵三维空间的相对距离,如式(1)所示:

式中,、分别表示两点纬度值;、分别表示两点经度值;表示三维空间中两点的最短距离。精灵与角色相对距离测算流程图如图1所示。

图1 精灵与角色相对距离测算流程图

2.3 精灵的捕获与逃跑

AR精灵手游主要通过玩家对精灵发现、捕获的过程提高游戏趣味性,采用投掷精灵球对精灵进行捕获。精灵球在相机拍摄的现实背景中移动,当投掷到精灵身上时,精灵的运动速度减慢直到最后静止不动,完成捕获过程。在这个算法中,添加了精灵动画速率和精灵随机属性两个参数:设置精灵的动画速率初始值为1,使得精灵在捕获场景中能一直以该速率运动,当精灵球碰撞到精灵后,会产生碰撞反馈,CollionReaction脚本中的碰撞函数调用精灵递减速率函数,重新计算精灵当前速度:

因此每次碰撞过后,精灵速度都会减慢,当多次成功击中精灵后,精灵就会停止运动,捕获场景也会出现精灵被捕获成功的标记,并在数秒后切换回玩家地图场景。为了增加捕获难度,添加了精灵随机属性参数Power和逃跑概率区间参数Level,每只精灵都会随机从0~10中随机生成这两个参数值,其中Power用于设定精灵的动画恢复速率,表示为补偿精灵球碰撞而减掉的部分速率值,计算表达式为

因此随机属性参数Power值越高的精灵,捕获时需要成功投掷精灵球的次数也越多。逃跑概率区间参数Level用于计算精灵的逃跑概率为:

脚本会每20 s随机在0~80范围内生成随机数,该数值与逃跑概率进行一次比较,也就是每20 s判断一次精灵是否会逃跑:若逃跑概率大于随机数,则精灵就会逃跑,也就是突然消失在游戏地图中;否则精灵无法实现逃跑状态,将被继续捕获。精灵捕捉与逃跑流程图如图2所示。

3 App测试结果

对该款游戏性能进行测试,将Android SDK平台下开发的APK装载进手机,图3(a)是玩家虚拟地图场景,该地图上有玩家角色与地图场景之间的切换,玩家也可通过触碰精灵,进入精灵捕捉场景,如图3(b)所示,在此界面内能够实现精灵球向精灵的动态投掷过程。图3(c)是当精灵球被多次投掷,精灵运动速率降低到0时,完成捕获,图3(d)为某种场景下精灵在捕获过程中发生了逃跑。

4 结束语

本文利用Unity3D游戏开发平台制作了一款基于移动定位的增强现实AR精灵游戏,使用UnityStore上提供的3D人物和精灵模型,本款游戏的优点是能让玩家利用智能终端GPS定位及GIS服务商提供的地理信息数据,在手机端体验精灵与现实场景的结合,感受AR特效体验与游戏乐趣。

参考文献

[1] Peter Brown.增强现实:为现实世界加持超越游戏的酷炫体验[J].中国集成电路,2018,27(12):19-22.

[2] Youm D.H.,Seo S.H.,Kim J.-Y.Design and development methodologies of Kkongalmon, a location-based augmented reality game using mobile geographic information[J].Eurasip Journal on Image and Video Processing,2019 (1):1-11.

[3] Patrick Helmholz, Michael Meyer, Susanne Robra-Bissantz.Catch them all again! – Eine pokémon go vergleichsstudie[C].Communities in New Media: Research on Knowledge Communities in Science, Business, Education and Public Administration - Proceedings of 21th Conference GeNeMe,2018.

[4] Paavilainen J., Korhonen H., Alha K., Stenros J., Koskinen E., Mayra F. The Pokémon go experience: A location-based augmented reality mobile game goes mainstream[C].2017 Conference on Human Factors in Computing Systems - Proceedings, 2017.

[5] Ulrike Spierling, Antonia Kampa. An Extensible System and Its Design Constraints for Location-Based Serious Games with Augmented Reality[C].Serious Games -3rd Joint International Conference, JCSG 2017.

[6] 樊东卫,何勃亮,李长华,等.球面距离计算方法及精度比较[J].天文研究与技术,2019,16(1):69-76.