钱宝健 朱世奕 汪鹏

关键词:手游;Unity3D;AR;安卓系统;人机对战

中图分类号:TP37 文献标识码:A

文章编号:1009-3044(2023)20-0146-04

0 引言

从拨号上网到如今的移动互联网时代,游戏作为一种娱乐形式也随着时代的发展衍化出不同的样貌和业态[1],从几十年前的黑白机纯文字的精简游戏,到现在画面绚丽、功能丰富的庞大游戏,充分说明游戏领域是一个发展潜力不逊色于其他计算机领域的科目。一款好的游戏不仅可以与开发者进行跨时间、跨空间的情感交流,更重要的是为用户提供有效的娱乐放松方式。

电子游戏已经成了人们茶余饭后常见的娱乐项目之一,比起传统的电脑游戏、主机游戏、电视游戏等,手游具有更加方便的便携性以及更为简单的操作性[2]。但国内的大部分手游包含以下特点:周期短、投资小、受益高,导致在移动互联网时代,稚嫩的手游行业是离钱最近的行业[3],但这也导致一些手游在玩法上难以创新。同时,手游不管是在技术还是玩法上都有了巨大进步,玩家的口味也越发刁钻,他们对画面、玩法等都提出了更高要求。

卡牌游戏是游戏类型的一种,它的玩法来自传统的桌面游戏。随着新的游戏形式的融合,当前的卡牌游戏已经不再以单一形式出现,通过吸收借鉴其他类型游戏的特色玩法,使当今的卡牌游戏在原有的规则上增加了越来越多的可玩性和玩法复杂度[4]。为此,本文拟采用LBS(基于地理位置服务)和AR技术开发一款能够让玩家体验新的宠物捕捉融合传统卡牌对战玩法的游戏。

1 现有手游普遍存在的问题

通过对中国手游的市场公开的相关资料进行调研和分析,发现目前手游市场存在一些普遍的问题。第一,大量手游的游戏内容过于单一,缺乏新鲜感,容易让玩家失去兴趣。第二,游戏的互动性较低,多数手游只是让玩家宅在固定场所,缺少与周围场景与玩家的互动,长期下去对玩家的身体也是有害处的。第三,一些手游的游戏设计存在不合理的问题,例如难度过高或过低,任务设计不合理等问题,会影响游戏平衡性和用户体验。

2 游戏分析与设计

2.1 功能需求分析

通过前期对手游玩法的深度调研,以及本游戏的设计目标,本游戏根据玩法划分为以下几个主要模块:AR捕捉模块、小游戏模块、宠物管理模块和人机对战模块。下面将逐一详细介绍各模块。

2.2 AR 捕捉模块

本游戏希望通过嵌入地图SDK,可以根据玩家的位置,对周围地图环境进行3D展示;然后借助手机摄像头,在周围地图展示的AR场景上进行捕捉宠物。捕捉到的宠物会放进宠物仓库,可以用于对战模块。

2.3 宠物管理模块

宠物管理模块分成四个子模块,分别是背包模块、宠物仓库模块、宠物图鉴模块和宠物技能卡牌配置模块。背包模块用于显示出战的宠物信息以及道具信息。玩家可以查看道具信息,可以通过拖拽道具为宠物加载道具或者卸除道具,同时也可借助道具对宠物进行升级。

宠物仓库模块主要用来保存默认领养和捕捉到的宠物信息,也可以对宠物进行放生,以及对宠物进行组队对战。

宠物图鉴模块主要是用来展示宠物头像和相关信息,点击头像按钮可翻动图鉴,未捕获/拥有的宠物会以黑色头像显示。点击头像显示对应宠物信息,未捕捉则信息为未知。

宠物技能卡牌配置模块用于管理出战宠物的技能和管理组队对战功能。为宠物配备技能的过程为点击标签加载对应系别的卡牌,滑动浏览卡牌,点击选中之后再次点击宠物技能栏。组队出战前需要满足以下规则:队伍必须满员,所有宠物必须配备齐3个技能,队伍技能系别个数小于2。

2.4 小游戏模块

为了使得该款游戏玩法更加多样,本游戏设计了小游戏模块,主要包括两种小游戏,分别是树果道具小游戏和矿石道具小游戏。玩家在规定时间内摇晃手机获得树果类道具。矿石道具小游戏需要让玩家选择游玩难度,并在规定时间和步数内根据游戏规则获取矿石类道具。获取到的道具可用于宠物技能和宠物对战。

2.5 人机对战模块

本游戏设计了人机对战模式,该模块总计9个关卡,每次通过一个关卡可以依次解锁下一个关卡。对于战斗的设计分为三个阶段:回合开始:掷骰,出牌,使用囤积点,AI出牌。回合中:根据速度生成行动条并依次切换宠物释放技能。回合结束:异常状态,道具或各种在回合结束触发的效果生效。电脑根据出牌算法计算宠物技能的出牌顺序;玩家可以从UI界面自行选择自己宠物技能的出牌顺序当某一方的宠物全部被击败时,战斗结束,对方宣告胜利。

2.6 游戏整体架构

根据本游戏的功能分析和相关模块设计,设计出系统的整体架构。本系统自底向上包含四层,每一层独立实现各自的功能模块,具体架构图如图1所示。最底层为平台层,玩家基于安卓操作系统环境才能正常安装该游戏。平台层上层为数据资源层,它包括静态配置数据和一些动态加载的数据,即系统中的配置文件与玩家存档数据。数据资源层上层为应用系统层,它分为核心功能,模块功能和第三方SDK功能。核心功能体现了该游戏本质是一个卡牌对战游戏,模块功能主要体现了该游戏对传统卡牌游戏的一个创新,融合了增强现实技术和基于位置服务的技术。最上层为玩家。

3 游戏实现

3.1 开发环境

Unity游戏引擎是由一家名为 Unity Technologies 的公司开发的功能十分强大的支持跨平台的游戏引擎[5],相较于传统游戏引擎,它的功能强大,支持跨平台运行[6]。开发者可以调用Unity3D的各种API简单方便地解决众多有关开发的技术问题 ,同时Unity3D 可以根据需求安装对应的插件,设计者可以简单方便地完成对应功能的设计;Unity3D也允许玩家轻松创建交互式内容,如3D视频游戏、建筑可视化、实时3D 动画等。

本游戏基于Unity3D引擎和C#语言进行开发,系统整体使用单例模式进行管理,并使用观察者模式来减少代码耦合度,使用JSON进行数据交换,由此来提高游戏的运行效率。游戏最后打包成安卓系统可运行的apk格式,需要用户开放定位权限、摄像机权限和存取数据的权限。

3.2 宠物捕捉模块实现

宠物捕捉模块实现了两种捕捉场景,场景一是通过接入GoMapSDK后,调用API获取玩家当前设备的具体位置,并根据当前位置展现附近的实景地图,通过在实景地图上设置相应的事件供玩家进行捕捉。场景二是通过接入EasyARSDK,并开启摄像头权限,即可开启AR捕捉模块。玩家点击主界面的实景捕捉后进入实景捕捉模块,如图2所示:左上角分别为背包、仓库、卡牌配置;右上角为三个事件的手动刷新按钮,退出按钮,控制虚拟摇杆显隐按钮。玩家可以点击刷新按钮刷新出对应的事件并显示在地图上,玩家需要携带设备前往或者使用摇杆控制角色前往事件地点。在玩家距离事件大约10m触发碰撞检测,玩家可以选择进入或放弃事件,如图3所示。

玩家在进入宠物捕捉事件并授予程序调用摄像头权限后,即可进入AR捕捉。玩家点击右上角可选择背包中不同的精灵球。进入事件后宠物模型将随机刷新至玩家的周围场景,玩家可以小幅度移动设备,让后置摄像头找到宠物,并调整角度,力度抛射出精灵球,精灵球接触到宠物之后会进行捕捉判定。捕捉会基于宠物自身的稀有度和精灵球的发射参数判断是否捕捉成功,捕捉成功后会提示“捕捉成功”,将宠物放入仓库后更新保存玩家信息,否则会提示“捕捉失败”,玩家可以选择继续捕捉,如图4所示。

3.3 宠物管理模块实现

1) 背包模块

玩家点击背包后,将根据背包中出战的三只宠物生成对应的信息。并在右侧生成所有的道具,玩家可以点击显示道具信息,拖动进行浏览,将可使用道具与可携带道具(根据背景识别)拖到宠物身上即使用或携带。

2) 仓库模块

玩家点击仓库后,将根据仓库信息生成所有的宠物图标,玩家可以随意拖曳调换它们的位置或拖入背包。点击宠物图标,会在右侧显示它们的属性值。连续点击三次放生即销毁对应的宠物(携带的道具会放回背包中)。主要实现逻辑包括宠物图标的生成、宠物图标的拖拽交互和宠物放生。

3) 宠物图鉴模块

玩家点击主界面的冒险手册按钮后,加载出图鉴界面,玩家可以翻页浏览图鉴,点击查看对应宠物信息,未捕捉过的宠物呈现为黑色背景。开启图鉴的方式有两种:方式一通过局域网交易获得;方式二通过捕捉野生宠物并培养进化获得。效果图如图5所示。

4) 宠物技能卡牌配置模块

玩家点击卡牌配置后,左侧会加载出队伍信息和已配置的技能。右侧为可配置的卡牌与卡牌所属的“训练师专注”(卡牌所属类别)标签。拖动可浏览各个类别的卡牌,点击选中卡牌,再次点击宠物技能槽可以进行配置。当玩家的专注数大于2时,会提示玩家无法进入战斗。实现逻辑是从DataMgr中获取到卡牌配置文件的集合,遍历它并获取到每一个技能的信息并根据其生成一个预制体放入Content 下并根据Grid Layout Group组件进行整理。卡牌的名字将会改成对应的技能名,这也是技能配置时的数据索引。具体效果图如图6所示。

3.4 小游戏模块实现

1) 树果道具小游戏

玩家进入树果获取小游戏后,点击屏幕中央的按钮开始游戏,在10s内摇晃手机会不断生成不同的道具(每0.3s最多生成一个)并在屏幕边缘的墙壁和其他道具进行弹跳,中间数字显示了生成了多少个道具,当时间结束时生成的道具会全部放入背包中并更新保存玩家信息。实现逻辑通过使用API监听手机陀螺仪的信息,当陀螺仪的x或y轴的幅度大于一定值便会在屏幕中间生成一个树果。该树果具有碰撞体积,并随机向一个方向发射。由于墙壁和树果具有自定义物理材质(高弹力且摩擦力为0) ,所以会出现屏幕弹跳的效果。核心代码如下所示:

if (Input.acceleration.x > 4 || Input.acceleration.y >4||Input.GetMouseButtonDown(0))

{

//如果间隔时间少于0.3s 则该次摇动不会生成树果

if(canIns)

{

timesTxt. text = (int. Parse(timesTxt. text) + 1). To?String();

GameObject g = (ResourceMgr.GetInstance().Load

("Prefabs/Sprites/Fruit"));

int index = Random. Range(0, sprites. Count);

g.GetComponent().sprite = sprites[index];

g.AddComponent();

g. GetComponent (). AddForce(Vec?tor2.one * Random.Range(-300, 300));

}}

2) 矿石道具小游戏

玩家进入矿石道具小游戏后,深层探索与浅层探索表示游戏难度的高低。高难度的游玩模式给予的步数和时间会更少,但奖励品质更高。进入游戏后玩家需要在生成的13×6的砖块上寻找宝藏格,点击非白色砖块且非宝藏砖块会显示一个数字,数字代表它与宝藏格的水平+竖直距离之和。玩家需要在规定时间和步数之内通过多个数字格判断出宝藏格的位置,点击宝藏格后会随机生成一个道具放入背包,并更新保存玩家信息。如图7所示。

3.5 人机对战模块实现

玩家点击主界面的道馆对战后,将进入关卡选择界面,共计有9关,起始只可以挑战第一关,当通过一个关卡之后才可以挑战后一关。玩家点击一个关卡后,系统将根据当前关卡的配置文件生成敌人的信息。胜利的条件是击败对手所有的宠物。具体对战过程分成以下三个阶段。

出牌阶段:当前回合开始,系统随机掷骰,点数会对双方玩家造成相同的效果。掷骰后,进入出牌阶段,系统会根据存活宠物携带的技能随机发3张卡牌,玩家根据费用出牌,出牌不可以超过当回合的费用上限。也可以使用囤积点(每回合剩余费用/2会变为囤积点)进行一些特殊操作,当玩家点击回合结束时,AI 开始计算出牌并打出。

战斗阶段:双方玩家的出牌会根据出牌宠物的速度进行重新排序,在左方以进度条的方式显示,宠物根据进度条释放技能(如果宠物的速度被降低或提高,那么也会重新排序进度条),当进度条的宠物被击败后,它本回合释放的所有技能将会跳过。所有的非强化类技能释放目标为对手场上的全部宠物。切换宠物的时机可以是当一个宠物释放技能结束或上一个宠物被击败时。

回合结束阶段:当行动条上的所有动作全部释放完毕,开始进入回合结束的场景渲染,比如天气,场地的持续回合计算,回合结束类道具的触发和异常状态如中毒、烧伤等。等待回合结束后,继续下一个回合的出牌阶段,直至有一方被击败。图8展示了对战界面效果图。

4 结束语

本文介绍了一款基于Unity3D引擎并结合增强现实技术的手机游戏。该游戏的特点在于融合了增强现实技术,帮助玩家在虚拟与现实之间创造出属于自己的游戏世界,让玩家享受更加真实的游戏体验,提高了游戏的趣味性、互动性和挑战性。利用AR实现的宠物捕捉功能促使玩家在游戏场景中进行运动,使得该游戏成为锻炼身体的一种新型途径。为了使该游戏玩法更加多样化,本款游戏设计了树果道具和矿石道具小游戏功能。在游戏的开发过程中,为了确保游戏的稳定性和流畅性,该游戏整体使用单例模式进行管理,并使用观察者模式来减少代码耦合度,使用JSON进行数据交换。在未来的游戏开发过程中,游戏开发者将不断探索和创新,为用户提供更加优质的游戏体验。