基于Unity开发的Pico设备 MR塔防游戏【Mini战争】
游戏分为白天/夜晚两部分。白天时玩家需要在场景中放置基地,然后通过扫描场景来构建出独特的防线(比如在现实中扫描一个桌子,在游戏的虚拟场景中就会出现一个相同形状的障碍物,敌人需要绕开或翻越障碍物才能继续前进)。除此之外,玩家通过拖动防御塔卡牌,可以在场景中放置对应的防御塔(类似植物大战僵尸),在一切完成后,游戏进入夜晚部分:从某处会源源不断地刷出怪物朝基地进攻,当所有怪物死亡后,玩家获胜;当基地被摧
项目介绍:
该项目是一个实训期间由六人团队经过两周时间完成的一个MR塔防游戏 Demo.通过该游戏,用户可以在现实中体验塔防游戏的乐趣。
项目演示视频:
MR塔防游戏【Mini战争】_哔哩哔哩bilibili
玩法介绍:
游戏分为白天/夜晚两部分。白天时玩家需要在场景中放置基地,然后通过扫描场景来构建出独特的防线(比如在现实中扫描一个桌子,在游戏的虚拟场景中就会出现一个相同形状的障碍物,敌人需要绕开或翻越障碍物才能继续前进)。除此之外,玩家通过拖动防御塔卡牌,可以在场景中放置对应的防御塔(类似植物大战僵尸),在一切完成后,游戏进入夜晚部分:从某处会源源不断地刷出怪物朝基地进攻,当所有怪物死亡后,玩家获胜;当基地被摧毁后,玩家失败。
核心功能:
项目使用了PICO的官方SDK:PICO Unity Integration SDK 3.2.0进行开发。主要使用了空间网格扫描功能、手柄/手射线交互功能、手势追踪功能以及手部追踪功能。
开发过程:
开发分为三个模块:MR交互系统、UI系统、战斗系统。
MR交互系统:
在MR交互系统中,主要实现了:
1.扫描玩家当前所处空间并获取空间环境信息
2.实现了玩家与虚拟游戏对象的多种交互方式
主要遇到的问题:
1.空间扫描精度不够:PICO的空间扫描的精度似乎比较低,暂时没找到好的办法来提高精度,因此选择修改了游戏玩法,由在桌面上体验变成了在房间中体验。
2.所有需要能够交互的物体都必须带有XR Simple Interactable 组件,否则无法交互。但有时候,有些不需要交互的物体如果带上了XR Simple Interactable组件,会对正常交互造成影响。比如在拖动卡片生成防御塔时,为了让玩家清晰的看到将会生成哪种防御塔,在放置之前会出现该防御塔的预览。一开始,我们将预览对象和实际生成对象用的是同一个对象,导致出现了一些Bug:比如无法在场景中正常放置防御塔了:放置防御塔的逻辑是手部发出的射线与场景中的特定对象发生交互后,在该对象位置处放置防御塔。但由于射线会先经过预览对象,导致交互时优先与预览对象发生交互。最终选择动态添加XR Simple Interactable组件(当防御塔成功放置后,给防御塔对象添加XR Simple Interactable组件)
3.使用PICO的手势追踪功能时,发现只有四指合拢,大拇指朝上(鼓励的手势)这个手势识别精度较高,其它的手势几乎都无法准确识别。暂时未找到解决方法。
4.给一个交互按钮添加了多个事件,导致使用该交互时,会执行不需要的事件。解决办法暂时是在注册的事件中添加条件判断。
UI系统:
在UI系统中,主要实现了:
1.引导系统:MR的操作相对于手游/端游而言会相对复杂一些,因此更需要一个完整的引导系统来帮助玩家熟悉操作,以免长时间摸不着头脑。
2.卡牌系统:防御塔卡槽和技能卡槽。玩家可以通过点击或拖动卡牌来在场景中放置防御塔/释放技能。
3.游戏中各状态对应的UI界面
战斗系统:
在战斗系统中,主要实现了:
各个防御塔的行为:创建了一个防御塔基类,然后派生出箭塔、法师塔、炮塔三种防御塔。每个防御塔具有不同的特性和效果。
各种怪物:创建了一个敌人基类,派生出“爬行魔兽”、“飞行魔兽”、“巨锤战士”、“领主”四种怪物。怪物具有不同的移速、护甲、生命值、(对基地)伤害值等属性。
技能系统:创建了一个技能基类,派生出“火球术”“冰锥术”等技能,并创建SkillData类,将技能的数据采用创建实体化数据的形式存储。当点击技能卡牌时,获取对应的技能数据并执行对应效果。
怪物管理器:控制怪物的产生和销毁,游戏进入夜晚后,每隔一段时间,会在怪物传送门附近随机刷新出一定数量的怪物。
对象池:怪物和子弹的产生/销毁使用对象池进行管理,产生怪物/子弹时,从对象池中获取,销毁怪物/子弹时,将其放入对象池。
测试:
未完待续
更多推荐
所有评论(0)