基于Unity3D的AVG卡牌游戏设计与实现
摘要:本文设计并实现了一款融合AVG与Roguelike元素的休闲卡牌游戏。针对现代人碎片化时间的减压需求,采用Unity引擎开发,运用轻量级UI消息框架和管理器+原型设计模式优化代码结构,通过XML实现数据存储。系统包含角色选择、路线探索、回合制战斗、商店交易等核心功能模块,采用UGUI构建交互界面。测试结果表明,游戏在保持AVG叙事特点的同时,通过Roguelike机制有效避免了重复体验的枯燥
摘 要
21世纪随着社会飞速进步和科技的发展,对于工作和学习压力越来越大,对于缓解压力的需求逐渐增多,但是大多数人的时间碎片化,需要简单,快速的活动来放松身心,这就使得游戏开发被人们所需要。基于社会需求,本项目针对休闲新颖的玩法开发了一款AVG卡牌游戏。
通过对市场需求的分析以及行业现状的调研。本项目运用了Unity引擎进行游戏开发,采用轻量级UI消息框架,用于UI之间的通信,解决了一对多的通信问题。使用管理器设计模式+原型设计模式,使游戏代码和数据更加干净整洁,更易于控制和管理。使用了XML可标记语言进行数据的读取和存储,该语言特点是方便快捷的快速使用。使用可UGUI进行游戏页面的搭建和游戏数据的可视化显示,UGUI是目前Unity引擎主流的UI组件,组件自身功能较为成熟,不需要过多的考虑功能的设计,能够满足大部分显示的需求
本项目经过测试后,基本实现预期功能,能够体现完整的游戏性,展现了AVG的特点,添加了Roguelike元素以后,游戏不会因为重复体验而带来枯燥的感觉。项目本身采用的框架设计模式,后续继续开发拓展新功能的难度大大降低。
关键词:AVG卡牌; Unity3D引擎; Roguelike
3 系统设计
系统设计可分为概要设计和详细设计两个阶段。系统的概要设计主要是从总体上确定系统的设计方案、组成系统的模块以及模块之间的关系,同时进行数据设计、实现计划和测试计划。详细设计的主要目的是确定每个系统应该如何被详细实现,包括游戏过程设计等等。
3.1 系统该要设计
对于整个游戏而言,需要一个整体框架,本项目所使用到的整体框架为管理+数据包设计模式,类比MVC设计模式[18]。在游戏中MVC设计模式并不能广泛用于整个游戏,在使用过程会显得十分生硬。本项目所使用到的设计模式参考PureMVC框架[19]。游戏系统之间会存在单独的管理器,管理这一类别的对象。
3.2 系统详细设计
玩家在进入游戏后如图3.1所示
图3.1玩家开始游戏
在开始游戏后,玩家会先选择角色,选择角色时,展示角色相应的生命值,金钱和说明,在选择完角色后,进入第一个场景与NPC对话,选择合适的Buff开始进行游戏,可以查看生成的地图。
在选择路线时如图3.2所示
图3.2玩家选择路线
玩家根据地图展示的路线选择合适的房间进入,会显示相应的敌人,敌人会显示数量和种类,提示玩家这一回合的行动模式,玩家会被战斗系统从手中已有的卡牌中获取一定数量的卡牌。玩家需要根据怪物的行动模式和手中已有的卡牌以及行动点来决定打出的卡牌,卡牌在打出后生效并影响敌人。在玩家点击回合结束后,战斗系统回收玩家手中剩余卡牌,轮到敌人行动。在敌人的行动结束后,这一回合结束,玩家回复行动点,重新在玩家的卡组中抽取卡牌,当抽卡组中没有卡牌时,会从弃牌组中重新获取所有卡牌,并进行洗牌。
玩家在进入商店时候如图3.3
图3.3玩家进入商店
玩家在进入商店后,可以通过战斗获得的金钱来购买卡牌提升自己,也可以从商店中移除不需要的卡牌。
玩家在进入休息处的时如图3.4
图3.4玩家进入休息处
玩家在进入休息处时可以在休息处休息恢复血量,或者选择锻造升级一张卡牌,在点击升级卡牌时,升级系统会展示相应的升级后的数据来提供给玩家参考。
4 系统实现
本系统在window10操作系统,运用Unity引擎进行开发,运用简单易于读取的json作为数据支持,通过C#语言完成整个游戏,游戏整体。本系统特点在于游戏性,以及复杂的功能逻辑。
4.1 开发环境
本系统使用了Windows 10 企业版 64-bit操作系统,该操作系统为目前主流操作系统,界面简约好看,操作不复杂,操作环境好。本系统开发环境为CPU即Intel® Core™ i5-6300HQ CPU @ 2.30GHz,内存为8GB,硬盘即256G SSD,开发引擎为Unity3D2017.4.20f2;本项目的代码编写工具为Visual Studio2019。
4.2 开发规范
代码的规范性和一致性使团队协作开发速度得到了提升,同时也提高开发者对代码理解的清晰程度和改修代码的难易程度。代码的程序结构以及命名风格是开发系统时的重要环节,决定一个项目是否成立的关键一步[23]。命名方法为大驼峰。方法命名为大驼峰,例如ExampleMethod()。脚本变量和属性命名方法为小驼峰,例如myVariable。
4.3 数据存储和读取实现
XML可标记语言来进行数据的存储,利用System.XML进行数据的操作。根据指定路径加载到内存中。通过API加载所有XML文件信息,遍历节点获取数据,并分类保存[24]。
XML存储数据主要通过文本的形式,树型结构。在根节点下可以延伸子节点,在子节点中,存储子节点的属性。子节点可以嵌套子节点,卡牌特性数据,如属性ID,属性名,页面呈现时颜色,属性描述等,XML结果如下展示所示:
图4.1 游戏主菜单界面
界面设计主要利用了Unity3D引擎的UGUI,背景中的云彩使用了重置RectTransf的锚点位置,利用锚点的重置,达到了一个循环的效果,主要组件有Text组件,Image组件和Button组件,在这些组件中添加相应的回调方法,来实现每个组件的具体功能。而UI在很对时候是一个多对一的关系,所以在需要有多个回调的时候,可以给这个组件添加关心事件,利用关心事件,来实现多对一,本质参考了观察者设计模式的思想,详细参考附录1主菜单实现类。
战斗页面所涉及到的模块较多,最上方的是UI模块,下方是抽卡堆,当前手牌,洗牌堆,中间左边的为玩家角色,右边为敌人角色,两个角色下方显示的是双方的生命值。
如图4.2所示为战斗界面,核心代码参考附录2战斗回合管理类。
图4.2 战斗模块界面
在进入战斗时,玩家先开始,玩家会从玩家所有卡牌中克隆出一份新的卡组,然后添加到抽卡堆当中,在抽卡堆中随机抽取相应数量的卡牌,添加到玩家持卡卡组中,也就是图片正中区域展示的卡牌,玩家点选卡牌以后,会出现一个箭头,这个箭头是使用了二阶贝塞尔曲线完成的UI。箭头所指的对象,就是卡牌的使用对象,在箭头变为红色以后,就可以使用卡牌。玩家使用卡牌后会实现卡牌相应的效果,并从可行动点中扣除行动点,然后将使用后的卡牌添加到右下角的弃牌堆当中。玩家点击结束会后,回合就转到敌人,敌人会按AI的预先行动和回合数决定这一回合要做什么。在敌人的回合结束以后,就会重新开始一个新的回合。
如图4.3为商店界面,在商店中随机出售部分卡牌,并有特价卡牌,右下角为卡牌移除服务可移除卡牌,核心代码如下:
图4.3 商店模块界面
4.5 本章小结
本章主要详细介绍了项目开发阶段的开发环境及编码规范,并列展示了部分核心功能界面,项目的基础功能的实现到这里基本结束。接下来开始对项目进行测试。
文章底部可以获取博主的联系方式,获取源码、查看详细的视频演示,或者了解其他版本的信息。
所有项目都经过了严格的测试和完善。对于本系统,我们提供全方位的支持,包括修改时间和标题,以及完整的安装、部署、运行和调试服务,确保系统能在你的电脑上顺利运行。
这里是一个专注于游戏开发的社区,我们致力于为广大游戏爱好者提供一个良好的学习和交流平台。我们的专区包含了各大流行引擎的技术博文,涵盖了从入门到进阶的各个阶段,无论你是初学者还是资深开发者,都能在这里找到适合自己的内容。除此之外,我们还会不定期举办游戏开发相关的活动,让大家更好地交流互动。加入我们,一起探索游戏开发的奥秘吧!
更多推荐


所有评论(0)