基于Android移动操作环境的手机游戏程序研发毕业论文
2020-02-16 20:44:12
摘 要
人们在使用诺基亚与塞班系统的时候,手机上就已经出现许多有趣的基于java开发的游戏。随着智能手机与手机操作系统的发展,智能机已经走进千家万户,走进每个人的生活之中。自然而然地,人们更多地用智能手机取代台式计算机进行游戏来娱乐身心。现在社会生活节奏越来越快,移动端游戏能更好利用碎片化时间并且操作简单易上手,更能贴合现代玩家的生活偏好。
在手游平台中Android端占比达6-7成。本次课题要做一个Android平台的移动端游戏。游戏设计为2d的横板平台动作类,玩家要在有限的血量下击败关卡内所有怪物才能通关,角色有多个技能,怪物也有多个种类。开发基于Unity游戏引擎,开发过程中会使用到动画系统,动画状态机,音效系统,UI系统等。开发的游戏有一定的可玩度,也可作为二次开发的基础,因此本次课题不仅具有学习意义,也有市场价值。
关键词:手机游戏;游戏开发;Android端;Unity游戏引擎
Abstract
Back in days when Nokia and its Symbian System become world trends and the idea of smartphones is still impossible, there has developed some intriguing mobile games based on Java. The growth of smartphones and mobile operating system has made it possible to bring this intelligent device within reach of every household and into the life of countless families. As a result, smartphones have replaced PC as a new way of leisure entertainment. With the increasing pace of modern life, mobile game makes it easier to cater to the playersrsquo; life style and preference owing to its readily available form, simple and handy operation.
Among all platforms of mobile games, Android operating system has taken up approximately six out of ten. Therefore, this project centers on a mobile game operating on Android platform. The game is designed as a 2D cross-board platform action class and players are required to defeat all monsters in the level with limited blood volume to beat the game. Game characters are given multiple skills and monsters different kinds. The development of this game is based on Unity game engine and the process of developing will involve animation system, animation state machine, sound effect system and UI System. This game has a certain play of degrees, and also can be used as the basis for secondary development. Therefore, this topic not only has learning significance, but also has market value.
Key Words: Mobile game; Game Development; Android platform; Unity Game Engine
目 录
第1章 绪论 1
1.1 开发背景以及意义 1
1.2 国内外研究现状 1
1.3 本课题简介 2
第2章 开发工具介绍 3
2.1 Unity游戏引擎 3
2.2 Visual Studio 2017 3
2.3 Android SDK 3
第3章 游戏界面 4
3.1 主界面 4
3.2 战斗界面 5
第4章 主角 7
4.1 主角物体建立 7
4.2 调试用键盘输入控制脚本 7
4.3 角色动画状态机 8
4.3.1 静止,跑,跳动画 8
4.3.2 普通攻击与技能动画以及伤害触发 10
4.3.3 受击动画与受击减血 12
4.3.4 二段跳与下跳功能 13
第5章 场景搭建 14
5.1 地面,斜坡与悬浮平台 14
5.2 背景与镜头跟随 15
第6章 怪物 17
6.1 小怪 17
6.2 精英怪 20
6.3 Boss怪 22
6.4 使用Prefab与脚本生成怪物 24
第7章 音频音效与程序打包 25
7.1 音频音效 25
7.2 程序打包 25
第8章 总结 28
参考文献 29
致 谢 30
第1章 绪论
1.1 开发背景以及意义
随着计算机硬件的飞速发展,如今的智能手机性能早已超越10几年前又大又沉的台式电脑了。得益于智能手机性能提升与移动操作系统的发展,移动端的各种软件极大地丰富了人们的业余生活,手机游戏正是首要的业余生活调剂品。
本人爱好游戏,即将投身游戏开发行业,因此选择Android端的手机游戏开发,通过课题设计的开发与未来工作相衔接。
开发手机游戏不光要有编程语言的基础,还少不了与游戏引擎打交道。Unity正是一个多平台的全面整合的专业游戏引擎。课题程序的开发选用Unity引擎,以此来了解熟悉Unity开发工具的使用与C#脚本编程,从而在面对未来的工作前积累更多的实践经验。
1.2 国内外研究现状
世界上第一个手机游戏要追溯到1994年,当时在德国发布的mt-2000手机内置了著名的经典游戏《俄罗斯方块》,这样算来手机游戏的历史也有25年了。这20多年过去,如今的手机游戏市场已经发展成了庞然大物。
放眼全球,根据市场情报研究机构Newzoo预测的,2018年全球移动游戏市场规模将达到632亿美元,移动端游戏市场仍是2018年全球游戏细分市场的主要部分,占全球游戏市场规模的47%。《Fortnite》、《Super Mario Bros》和《PUBG》等许多大型IP也都从主机端和PC端移植到移动端。移动端平台值得诸多大型游戏公司不断地进驻,这也正代表着移动游戏的市场依旧存在着巨大的上行潜力。
视线转至国内,在艾瑞咨询发布的中国移动游戏行业研究报告中,2017年中国的移动端游戏用户规模约有6.03亿人,中国移动端游戏市场规模则约有1489.2亿人民币,在人口红利几乎殆尽的情况下,尽管增长率持续下滑,移动游戏用户的增长率仍高达15.7%。由此可见,在中国的移动端游戏市场仍然是不断扩大着的,发展前景依旧是光明而可期的。
此外,移动端游戏越来越往高质量、精品化发展,同时因为受到对“独立游戏精神”追求的影响,中国游戏用户良好的付费习惯、正版意识也逐渐形成。因此只要游戏本身品质足够优秀,即便是强付费类型的游戏,用户也情愿为其买单。例如基于unity开发的手机游戏《元气骑士》,有着精致的像素画风与火热的roguelike特性,或是有着令人赞叹的唯美画风的《纪念碑谷》都多次登上苹果App Store的排行前列和入选编辑推荐栏目。
1.3 本课题简介
本课题开发的是2d动作类游戏,地图场景为悬浮平台类型。主角要在有限的血量下,利用自己的操作技巧躲避怪物的攻击并且对怪物造成伤害,最终击败场景内的所有怪物才可通关。
主角有二段跳的能力,拥有三个不同冷却时间和伤害的技能和三种无冷却的普通攻击。怪物有三种:小怪只会普通攻击,精英怪有石化攻击和自身回血的能力,而boss怪有极具威力的4种技能。面对如此有威胁的怪物们,如何在仅有的100滴血量下击败敌人,就要看玩家有没有“在刀尖上跳舞”的能力了。
第2章 开发工具介绍
2.1 Unity游戏引擎
Unity是由Unity Technologies公司开发的一套跨平台全面整合的专业游戏引擎。
如今的Unity是绝大多数游戏团队开发时的首选3D游戏引擎,并且它在2D游戏开发上的表现也极其的优秀。Unity支持21个平台的游戏,包括所有移动平台、Mac、PC 和 Linux 桌面、Web 或控制台,这些都是当下较为流行的平台,能够满足绝大部分游戏项目的需求。
Unity集所有编辑器于一身,并且IDE环境是可定制的,所以它使用非常方便。比如,在场景编辑中忽然想对模型材质进行编辑,则选中模型并右键,便会弹出材质编辑器[1]。Unity还有着所见即为所得的特性。除了在编辑程序后可以立即调试运行,还能在运行过程中实时编辑并查看变化与效果。其中,如果在运行的过程中对对象的数据进行编辑,会在停止运行后失效(对文件属性的修改不会失效)[2]。
Asset Store即插件商店的出现,不仅稳固了Unity的生态圈,还提供了更多的机会[3]。开发者可以制作插件放到商店中出售,或直接购买别人的插件参考学习和使用。
2.2 Visual Studio 2017
Visual Studio是由微软公司推出的在计算机领域极富盛名的一种软件开发工具集。
在Visual Studio Tools For Unity的帮助下,Visual Studio能够为unity开发者和C#编程人员带来许多强大的功能。例如编写代码的同时使用其强大的重构功能,在Visual Studio中调试Unity游戏程序,通过设置断点并且评估程序中的变量和各种复杂的表达式来快速找出问题。此外vs工具的编码环境还能方便地自定义,选择喜欢的主题、修改字体等等。此外,Tools For Unity也能帮助你快速在Visual Studio中创建Unity脚本方法或者浏览游戏工程项目。
2.3 Android SDK
Android SDK 指的是Android专属的软件开发工具包。其中包含了许多可以帮助你开发Android平台应用的SDK工具与平台工具。SDK工具是独立于平台的,任何开发Android应用的平台都需要配置。而平台工具则是定制的以适应最新的Android平台特性。配置完SDK开发环境后,也需要经常更新SDK版本。而Unity在打包游戏程序到Android平台时就正需要用到Android SDK。
第3章 游戏界面
游戏UI主要有两个部分,一个是进入游戏的主界面,一个是游戏战斗场景内的战斗界面。主界面目前只有进入战斗的功能,只需完成按键功能。战斗界面则有触屏控制用的技能按键,虚拟摇杆,暂停和退出游戏按键,怪物血量条,角色血量条。
3.1 主界面
根据unity UGUI系统的设定,画布Canvas是一个带有Canvas组件的对象,就类似作画的画布。在Canvas上的控件,则类似画布上的图画,画布是画的载体,所有的UI对象都应该放在Canvas里面。
所以建立主界面要首先新建一个Canvas对象,它便会自带Canvas,Canvas Scaler和Graphic Ray caster组件,此外还自带Event System用于监听用户输入。然后设定屏幕自适应,在Canvas Scaler下设置模式UI Scale Mode为Scale with screen size,尺寸与比例为800x600。然后添加image组件作为背景并添加背景贴图。
接下来新建Button对象,它会自带image组件和button组件。导入按键贴图,image type设定为simple。根据设计添加并调整按键位置,最终效果如图:
图3.1 主界面
最后给开始游戏按键添加脚本文件,在按键点击事件函数OnPointerClick()中添加切换进入战斗场景GameOne的代码:SceneManager.LoadSceneAsync('GameOne')。
3.2 战斗界面
首先建立Canvas对象,根据设计添加button对象用于技能按键,普通攻击,跳跃,和暂停与退出游戏按键,同样添加贴图并调整位置。
要实现技能cd遮盖的表示,要在技能button对象下建立一个子对象,设定透明度50,设置image type为filed,具体设置与效果如图:
图3.2 技能对象属性 图3.3 技能图标冷却效果
在技能按键对象下添加脚本,在主循环Update()中实现遮盖比例与技能cd同步:
sImage = GameObject.Find('Skill1/Image').GetComponentlt;Imagegt;();
sImage.fillAmount = restCdTime / cdTime;
然后暂停按键的脚本中通过Time.timeScale = 0;来实现游戏暂停,此时还要切换贴图为继续按钮样式,再次点击则置Time.timeScale = 1恢复运行并且恢复暂停贴图。
退出按键脚本则使用SceneManager.UnloadSceneAsync()来实现退出当前界面,同时使用SceneManager.LoadScene('MainUI')来切换到主界面。
接下来建立角色血量条,新建Scrollbar滚动条物体,其自带一个Sliding Area物体作为滚动部分。导入血量条底部和表面贴图,修改底部贴图image type为simple,表面贴图image type为filed遮盖,调整好透明度。然后用脚本代码处理血量显示:
x = (float)urHP / (float)maxHP;
if (x lt; 0) x = 0;
HPImage.fillAmount = x;
将血量条放在屏幕下方居中如图:
图3.4 血量条
虚拟摇杆的实现,要首先建立一个image对象作为底盘,然后在该对象下再建立个image子物体作为摇杆。
新建脚本,重载拖拽事件函数OnDrag(PointerEventData eventData),在其中获取摇杆对象的位置Vector2 pos = content.anchoredPosition,判断当摇杆相对于锚点的偏移量超出底盘半径,将其限制为半径内。然后通过偏移向量的x,y值判断摇杆的方向,例如x大于零时说明摇杆在右半圆,且y小于0时说明此时摇杆在右下方向,同理类推其他方向,然后根据方向调用角色脚本中预留的对应按键接口即可。
在技能,跳跃,攻击按键脚本中的点击事件函数OnPointerClick()下,判断冷却状态后调用对应的按键接口函数例如: