You are on page 1of 54

大连理工大学本科毕业设计(论文)

基于 U3D 的射击游戏设计与实现
Design and Implementation of Shooting Game Based on U3D

学 院(系): 软件学院
专 业: 软件工程
学 生 姓 名: 徐嘉良
学 号: 201975033
指 导 教 师: 马瑞新
评 阅 教 师: 原旭
完 成 日 期:

大连理工大学
Dalian University of Technology
原创性声明

本人郑重声明:本人所呈交的毕业论文(设计),是在指导老师
的指导下独立进行研究所取得的成果。毕业论文(设计)中凡引用他
人已经发表或未发表的成果、数据、观点等,均已明确注明出处。除
文中已经注明引用的内容外,不包含任何其他个人或集体已经发表或
撰写过的科研成果。对本文的研究成果做出重要贡献的个人和集体,
均已在文中以明确方式标明。

本声明的法律责任由本人承担。

作者签名: 日 期:
关于使用授权的声明

本人在指导老师指导下所完成的毕业论文(设计)及相关的资料
(包括图纸、试验记录、原始数据、实物照片、图片、录音带、设计
手稿等),知识产权归属大连理工大学。本人完全了解大连理工大学
有关保存、使用毕业论文(设计)的规定,本人授权大连理工大学可
以将本毕业论文(设计)的全部或部分内容编入有关数据库进行检索,
可以采用任何复制手段保存和汇编本毕业论文(设计)。如果发表相
关成果,一定征得指导教师同意,且第一署名单位为大连理工大学。
本人离校后使用毕业毕业论文(设计)或与该论文直接相关的学术论
文或成果时,第一署名单位仍然为大连理工大学。

论文作者签名: 日 期:
指导老师签名: 日 期:
基于 U3D 的射击游戏设计与实现

摘 要

近年来,射击游戏一直以来都是备受玩家喜爱的游戏类型之一,然而,由于移动端
设备性能的限制,射击游戏在移动端的表现并不如 PC 端出色。在现存的移动端游戏中,
往往存在操作复杂、游戏卡顿、高延迟等问题而饱受诟病。
为了解决这些问题,本文设计了一种基于 U3D 的射击游戏系统,该系统可以对移
动端设备进行优化,以提高游戏的流畅度和可玩性。基于这种特性,本文介绍了一款移
动端的角色扮演类射击游戏。本项目运用了软件工程的思想,使用 UML 面向对象思想并
进行了需求分析、功能设计、功能实现和系统测试。游戏的主要模块包括角色模块、僵
尸模块、UI 模块。其中角色模块实现了角色的动作控制和操作输入,僵尸模块实现了
僵尸攻击动作和属性值的实现,UI 模式是对整个游戏界面进行了实现。首先我们把人
物模型与骨骼绑定,然后我们对这几个模块进行了设计,之后使用了 Unity3D 技术实现
了游戏功能,再对游戏数据库进行了设计和实现,最后,我们采用了黑盒测试方法对游戏
进行了测试。
测试结果表明,该游戏实现了预先设计的功能,且在移动设备上运行时对性能的消
耗较小,游戏画面流畅,数据传输快速稳定,已经达到了系统实现目标。
关键词:射击游戏;Unity3D 技术;模型骨骼绑定

- I -
基于 U3D 的射击游戏设计与实现

Design and Implementation of Shooting Game Based on U3D

Abstract

In recent years, shooting games have always been one of the most popular types of games
for players. However, due to the limitation of the performance of mobile devices, the
performance of shooting games on the mobile side is not as good as that on the PC side. In the
existing mobile games, there are often problems such as complex operation, game stuttering,
and high latency, which are criticized.
In order to solve these problems, this paper designs a shooting game system based on
U3D, which can optimize mobile devices to improve the smoothness and playability of the
game. Based on this feature, this paper introduces a mobile role-playing shooting game.This
project uses the idea of software engineering and UML object-oriented thinking, and carries
out requirements analysis, functional design, functional implementation and system testing.
The main modules of the game include role module, zombie module and UI module. The role
module implements the action control and operation input of the role, the zombie module
implements the zombie attack action and attribute value, and the UI mode implements the
entire game interface. First, we bound the character model with the skeleton, then we
designed these modules, then used Unity3D technology to realize the game function, and then
designed and implemented the game database. Finally, we used the black box test method to
test the game.
The test results show that the game achieves the pre designed functions, consumes less
performance when running on mobile devices, has smooth game images, and has fast and
stable data transmission, which has reached the system's goal.
Key Words:Shooting Game;Unity3D Technology;Model Bone Binding

- II -
基于 U3D 的射击游戏设计与实现

目 录
摘 要 ..................................................................................................................................... I
Abstract ..................................................................................................................................... II
1 文献综述 .............................................................................................................................. 1
1.1 背景及意义 ............................................................................................................... 1
1.2 国内外发展现状 ....................................................................................................... 1
1.3 论文组织结构 ........................................................................................................... 2
2 相关技术 .............................................................................................................................. 3
2.1 Unity 技术 ................................................................................................................. 3
2.1.1 Unity 技术发展 .............................................................................................. 3
2.1.2 Unity 功能介绍 .............................................................................................. 3
2.2 Mono 技术 ................................................................................................................ 6
3 游戏需求分析 ...................................................................................................................... 8
3.1 可行性分析 ............................................................................................................... 8
3.2 用例与流程分析 ..................................................................................................... 10
3.3 功能需求分析 ........................................................................................................... 12
3.3.1 僵尸模块分析 .............................................................................................. 13
3.3.2 角色模块分析 .............................................................................................. 14
3.3.3 UI 模块分析 ................................................................................................. 14
4 游戏设计 ............................................................................................................................ 16
4.1 游戏主题及背景设计 ............................................................................................. 16
4.2 场景设计 ................................................................................................................. 16
4.2.1 场景内容设计 .............................................................................................. 16
4.2.2 操作设计 ...................................................................................................... 16
4.3 数据库设计 ............................................................................................................. 17
4.3.1 数据库总体设计 .......................................................................................... 17
4.3.2 数据库详细设计 .......................................................................................... 21
4.4 功能模块设计 ......................................................................................................... 22
4.4.1 角色模块设计 .............................................................................................. 22
4.4.2 僵尸模块设计 .............................................................................................. 23
4.4.3 UI 模块设计 ................................................................................................. 25
5 游戏实现 ............................................................................................................................ 26

- III -
基于 U3D 的射击游戏设计与实现

5.1 角色模块实现 ......................................................................................................... 26


5.1.1 角色控制功能实现 ...................................................................................... 26
5.1.2 角色死亡功能实现 ...................................................................................... 28
5.1.3 角色动作功能实现 ...................................................................................... 29
5.2 僵尸模块实现 ......................................................................................................... 30
5.3 UI 模块实现 ............................................................................................................ 32
5.3.1 生命条显示功能实现 .................................................................................. 32
5.3.2 操作按钮功能实现 ...................................................................................... 34
5.4 其他功能模块实现 ................................................................................................. 35
5.4.1 摄像机控制功能实现 .................................................................................. 35
5.4.2 动画标签功能实现 ...................................................................................... 36
6 游戏测试 ............................................................................................................................ 39
6.1 软件测试理论 ......................................................................................................... 39
6.2 游戏黑盒测试 ......................................................................................................... 40
结 论 ...................................................................................................................................... 43
参 考 文 献 ............................................................................................................................ 44
修改记录 .................................................................................................................................. 46
致 谢 ........................................................................................................................................ 47

- IV -
基于 U3D 的射击游戏设计与实现

1 文献综述

该系统使用 UML 面向对象思想进行了开发,UML 顺序图是 UML 开发中不可或缺


的软件设计模型之一,用于描述软件系统的动态行为,同时在软件集成测试中扮演着重
要的信息源[1]。
随着互联网的普及,手机游戏已成为一个新兴的行业,进入高速发展阶段。射击游
戏通常具有单体游戏时间短、游戏次数多的特点,让玩家可以在较短的单位时间内完成
一局游戏,并可根据玩家的时间,在任意时间段开启另一局游戏,类似于“快餐”,即玩
即开,增强玩家体验感和零碎时间的利用。

1.1 背景及意义
射击游戏是一种即时的、以单局对战为单位的快餐游戏。近年来,随着互联网的普
及,射击游戏逐渐走进了人们的网络生活。射击游戏种类繁多,从简单的打靶游戏到自
动移动的 2D 游戏,再到如今的全方位操控的 3D 游戏。
射击游戏的另一个重要特性是即时性。它可以让玩家在任意闲散的时间片段内进行
一局游戏,这样不强制玩家一直在线操作很容易让玩家产生依赖。从长远的角度来讲,
玩家在线的时间反而会增长。射击游戏的种种特性使之在游戏市场中脱颖而出,并在近
几年蓬勃发展。与此同时,随着手机和平板的普及,移动端游戏也迅速在市场中占领了
一席之地,并以每年增多 70% 的速度飞速增长。为了适应游戏的发展规律,一些 PC 端
游戏公司和很多页面游戏公司都逐渐转向移动端游市场和射击游戏市场。
近年来,一些公司和游戏团队专注于把射击游戏和移动端游戏结合起来,并取得了
不错的效果。从游戏市场中的调查可以分析出,玩家喜欢单体时间短、即时性强的游戏,
而且玩家更倾向于能调动感知、直观性强的游戏。
因此,在这样的市场背景下,开发这样一个可以在移动端运行的富有战斗色彩、调
动玩家感官的射击游戏,一定会受到广大玩家的欢迎。

1.2 国内外发展现状
在国内射击游戏市场上,随着智能手机的普及,移动端射击游戏已经成为了游戏市
场的主力军。目前市面上存在着大量的移动端射击游戏,其中最具代表性的就是《王者
荣耀》和《和平精英》等游戏。这些游戏在竞技性、玩法多样性、画面质量等方面都有
着较高的水平,受到了广大玩家的喜爱。但是其内容过于老旧,画面质量也只是相对性
提高,而且操作过于复杂。

–1–
基于 U3D 的射击游戏设计与实现

在国外射击游戏市场上,PC 端射击游戏仍然占据着重要的地位。在全球范围内,
许多知名的射击游戏如《使命召唤》、《战地》等都是由 PC 端入手,逐渐发展成了全
平台的游戏。这些游戏在画面质量、音效、游戏机制等方面都具有较高的水准,深受玩
家喜爱。在移动端射击游戏方面,随着技术的不断发展,移动端射击游戏的画面质量、
音效、游戏机制等方面也得到了不断提升。目前市面上存在着许多高品质的移动端射击
游戏。这些游戏在操作性、画面质量、游戏机制等方面都具有很高的水平,为玩家提供
了更加出色和多样化的游戏体验。但是这些游戏对手机配置的要求过高,最主要的愿意
是游戏加载内容过多,优化程度不高。
国内外射击游戏市场发展现状呈现出不同的态势。在国内移动端射击游戏注重于游
戏的流畅性,但是操作过于复杂而且画面质量普遍偏低,而在国外着重于游戏画面,但
是流畅性过低,对手机配置的要求过高。所以在对比了国内优劣之后,本游戏的着重于
在提高游戏画面质量的前提下,对游戏进行优化,提高游戏的流畅性,并且对游戏的操
作进行了化简,降低了玩家的操作门槛和提高了游戏体验,为玩家提供了更加出色和多
样化的游戏体验。

1.3 论文组织结构
本论文的题目为基于 U3D 的射击游戏的设计与开发,其是一个工程开发项目,本篇
论文结构展开如下:
第一章讨论了游戏提出的市场背景、游戏内容及开发意义,介绍了游戏市场的现状,
分析了当前游戏市场面临的主要挑战,介绍了本论文主要的研究工作。最后,给出了本
文的整体组织结构。
第二章介绍了阐述了完成该游戏所用到的 Unity 技术的发展过程和功能介绍。
第三章对此游戏进行了可行性分析,包括技术分析和市场分析。
第四章对此游戏进行了需求分析,用户需求分析和功能需求分析。
第五章主要是游戏的设计。主要包括游戏的主题和背景设计、场景设计、游戏数据
库设计、功能模块设计。
第六章是游戏的实现。包括人物模型和骨骼系统实现、游戏操作按钮系统实习、角
色模块实现、僵尸模块实现和 UI 模块的实现的具体实现方法。
第七章是游戏测试。根据软件工程测试理论,对游戏进行了黑盒测试。
结论对本论文的全部工作进行总结,指出论文中还有一些不足需要在未来的工作中
深入研究和探讨。

–2–
基于 U3D 的射击游戏设计与实现

2 相关技术

Unity 是一款流行的跨平台游戏引擎,它允许开发者创建各种类型的游戏和交互应用
程序。Unity 技术基于 C#编程语言,使用 Unity 引擎中的各种工具和模块来创建 3D 和 2D
游戏、虚拟现实和增强现实应用、模拟器和其他交互式体验。

2.1 Unity 技术

2.1.1 Unity 技术发展


Unity 技术是由 Unity Technologies 公司开发的一款跨平台游戏引擎,其发展历程可
以追溯到 2004 年。当时,Unity Technologies 公司的创始人 Bjarne Stroustrup、Markus
Persson 和一些地方开发人员开始开发一款名为"Unity"的游戏引擎,以创建 3D 游戏和
虚拟现实应用[2]。
在最初几年,Unity 技术主要用于游戏开发,但随着时间的推移,它逐渐扩展到其
他领域。2010 年,Unity 技术开始支持虚拟现实和增强现实应用开发,这是其应用领域
的首次扩展。
在 2012 年,Unity 技术发布了其首个版本 3.0,该版本引入了许多新功能和改进,
包括更好的渲染引擎、实时光线追踪、更好的音频支持等等。这是 Unity 技术历史上的
一个里程碑,标志着其开始向主流游戏引擎转型。
在接下来的几年中,Unity 技术不断发展壮大,发布了多个版本。例如,在 2014 年,
Unity 技术发布了其首个版本 4.0,引入了许多新功能和改进,包括更好的物理引擎、
实时渲染、多平台支持等等。
在 2016 年,Unity 技术发布了其首个版本 5.0,这是 Unity 技术历史上的一个重
大版本更新,引入了众多新功能和改进,包括更好的渲染引擎、人工智能、虚拟现实和
增强现实支持等等。
随着时间的推移,Unity 技术不断发展和改进,以满足开发者的各种需求。目前,
Unity 技术已经成为游戏开发和交互应用开发的首选引擎之一,其应用范围广泛,包括
游戏开发、虚拟现实和增强现实应用、模拟器、教育应用程序、移动应用程序等等。

2.1.2 Unity 功能介绍


Unity 是一款跨平台的实时渲染游戏引擎,允许开发者创建各种类型的游戏和交互
应用程序。Unity 具有以下功能:
(1) 实时渲染

–3–
基于 U3D 的射击游戏设计与实现

实时渲染是 Unity 引擎的一个重要功能,它允许开发者在多个平台上 (包括


Windows、Mac、Linux、iOS、Android 等) 实时渲染高质量的图形。Unity 使用优化的
渲染技术和实时光线追踪来提供高质量的图形渲染,使得游戏场景、角色、道具等能够
以极高的分辨率进行呈现。
为了实现实时渲染,Unity 使用了一种新型的渲染管道,它能够在多平台上进行高
效的图形渲染。这种渲染管道使用了一些先进的算法和技术,例如 Shader Graph、Custom
Shader 和 Post Processing Stack,从而能够提供出色的图形质量和性能表现。
此外,Unity 还提供了多种工具和插件,帮助开发者更轻松地实现实时渲染。例如,
Unity 提供了 Post Processing Stack 插件,允许开发者对游戏场景进行后处理,如调整
色调、饱和度、曝光等,从而使游戏场景更加逼真、美观。
总之,Unity 实时渲染功能提供了出色的图形质量和性能表现,能够在多个平台上
实现实时更新,为开发者提供了极大的创作自由度和游戏体验
(2) 编辑器
Unity 有一种名为“编辑器”的工具,用于创建和编辑游戏对象、场景、脚本等。
Unity 编辑器支持多种视图和工具,使开发者能够快速创建和调整场景,并进行可视化
测试。
在 Unity 编辑器中,开发者可以使用各种工具和插件来创建和编辑游戏对象,例如
GameObject、Vector2、Vector3、Color 等。Unity 编辑器还提供了多种动画编辑工具,
使开发者能够快速创建和编辑动画,为游戏角色和道具提供更加丰富的动作表现。
此外,Unity 编辑器还支持多种脚本语言,包括 C#、JavaScript 和 Boo 等。开发
者可以使用这些脚本语言编写游戏逻辑和交互,从而实现更加复杂和智能的游戏功能。
Unity 编辑器还提供了强大的调试和测试功能,允许开发者在运行时检查和调试游
戏,并快速发现和解决问题。Unity 还提供了多种测试场景和工具,例如 Unity Test
Runner、Unity Web Player 和 Unity iOS Studio 等,使开发者能够更轻松地进行测试和
调试,提高开发效率和质量。
总之,Unity 编辑器是 Unity 引擎中的重要组成部分,它提供了多种视图和工具,
使开发者能够快速创建和编辑游戏对象、场景、脚本等,并进行可视化测试和调试,为
开发者提供了极大的创作自由度和游戏体验。
(3) 脚本编程
脚本编程是 Unity 引擎中的重要功能之一,它支持 C# 和 JavaScript 两种脚本语
言。开发者可以使用这些脚本语言编写游戏逻辑和交互,从而实现更加复杂和智能的游
戏功能。

–4–
基于 U3D 的射击游戏设计与实现

在 Unity 中,开发者可以使用脚本语言来编写游戏对象的行为、处理玩家输入、管
理游戏状态等。通过脚本编程,开发者可以快速地调整游戏行为,并实现各种游戏逻辑。
除了脚本语言外,Unity 还支持插件和扩展。开发者可以使用 Unity 提供的插件和
扩展来扩展游戏功能,例如添加新的场景、新的游戏对象、新的动画效果等。这些插件
和扩展可以极大地提高游戏的开发效率和质量。
Unity 还支持跨平台发布,开发者可以将游戏发布到多个平台上,例如 Windows、
Mac、Linux、iOS、Android 等。在发布游戏时,开发者需要将脚本语言编译成可执行
文件,以便在不同的平台上运行。
总之,Unity 支持 C# 和 JavaScript 两种脚本语言,支持插件和扩展,使开发者可
以创建自己的脚本和插件,为游戏提供更多的功能和扩展,提高了游戏开发的效率和质
量。
(4) 物理引擎
物理引擎是 Unity 中一个重要的模块,它提供了支持物体之间相互作用和力学模拟
的功能。通过物理引擎,玩家可以在游戏中实现逼真的物理效果,例如重力、碰撞、摩
擦力等。物理引擎可以用于创建各种类型的游戏,包括模拟、体育游戏、机器人等。
在 Unity 中,物理引擎可以通过两种方式进行使用。一种是使用内置的物理引擎,
例如 Rigidbody、Collider、Motor 等,另一种是自定义物理引擎。使用内置的物理引擎
可以让玩家快速搭建物理系统,而自定义物理引擎则可以让游戏更加定制化,满足更多
的需求。
在体育游戏中,物理引擎可以用于模拟运动员的运动状态和球的运动轨迹。例如,
足球游戏中可以使用物理引擎来实现球的弹跳、滚动和飞射等效果,使得游戏更加逼真。
在机器人游戏中,物理引擎可以用于控制机器人的运动和动作,例如移动、旋转、攻击
等。
总之,物理引擎是 Unity 中非常实用的功能模块,它可以为游戏增加更多的逼真度
和趣味性,让玩家体验更加真实的游戏世界。
(5) 音频处理
Unity 支持音频处理,包括播放、录制、均衡器和混响等。音频处理可以用于游戏
中的各种场景,例如音效、语音聊天、音乐等。
在 Unity 中,可以使用 AudioSource 类来播放音频文件。AudioSource 类支持多
种音频格式,例如 AAC、MP3、WAV 等,同时还支持音量控制、混响、均衡器等效
果。通过 AudioSource 类,玩家可以轻松地在游戏中实现各种音效,例如枪声、爆炸声、
脚步声等。

–5–
基于 U3D 的射击游戏设计与实现

除了播放音频文件,Unity 还支持录制音频。可以使用 AudioRecorder 类来录制游


戏中的音频信息,例如语音聊天、游戏音效等。AudioRecorder 类支持多种音频格式和
采样率,同时还支持音量控制和混响效果。
在音频处理中,均衡器是一种非常重要的工具。它可以对音频信号进行均衡调整,
改变音频的频谱分布,从而达到更好的音效。在 Unity 中,可以使用 EQ 类来实现均
衡器的功能。EQ 类支持多种均衡器模式,例如单音模式、三音模式、动态模式等。
混响是一种常用的音频效果,它可以将音频信号与其他声音混合,从而达到更好的
音效。在 Unity 中,可以使用 Room 混响类来实现混响效果。Room 混响类支持多种
混响模式和房间大小、形状等参数。
总之,Unity 的音频处理功能非常强大,它可以为游戏增加更多的音效和音频效果,
从而提高游戏的趣味性和逼真度。
(6) 网络编程
Unity 是一款流行的游戏引擎,它支持多种网络协议,包括 WebSockets 和 HTTP,
这使得开发者可以轻松创建网络游戏和聊天应用程序。使用 Unity 进行网络编程的优势
之一是,它可以在同一个应用程序中处理多个网络连接,这意味着玩家可以同时与其他
玩家进行通信,而不会干扰彼此的通信。
总之,Unity 支持多种网络协议,使得开发者可以轻松创建各种类型的网络应用程
序。使用 Unity 进行网络编程,开发者可以更加高效地处理多个网络连接,实现真正的
实时通信,从而创造出更加精彩的网络游戏和聊天应用程序。
总之,Unity 是一款功能强大的游戏引擎,支持实时渲染、编辑器、脚本编程、物
理引擎、音频处理、网络编程和多平台支持等功能,使开发者能够快速创建高质量的游
戏和交互应用程序。

2.2 Mono 技术
事实上 Unity 引擎本身和.NET 没什么关系,但是游戏开发者希望能够通过写一套代
码就可以运行在不同平台上,包括 Windows、macOS 和 Android 等平台上,Unity 选择
了具有跨平台能力的.NET 平台的实现方式之一:Mono。
Mono 程序的执行包含一个代码运作引擎,它会将 CIL 的 byte code 转译为原生码
(Native Code)。其中程序的转义包含三种模式:
(1)Just-In-Time(JIT):在程序执行中将 IL 的 byte code 转换成原生码(native code)。

–6–
基于 U3D 的射击游戏设计与实现

(2)Ahead-of-Time(AOT):将 CIL 的 byte code 转译出原生码并存储起来,通常来说,


这种模式可以产生出绝大部分 JIT 所生成的 native code,但是部分代码任然需要 JIT 来
执行,AOT 并非可以完全独立执行的。
(3)完全静态编译:这个模式只支持少数平台,它基于 AOT 编译模式上,更进一步产
生所有的原生码,完全静态编译模式可以让程序的执行期完全不需要用到 JIT,这个做
法适用于 Apple iOS 操作系统、Sony PlayStation 3 以及微软的 XBox 360 等操作系统。
但是 Mono 仍然存在一些缺点。例如:Mono VM 在各个平台移植,维护非常耗时,
有时甚至不可能完成:Mono 的跨平台是通过 Mono VM 实现的,有几个平台,就要实
现几个 VM,像 Unity 这样支持多平台的引擎,Mono 官方的 VM 肯定是不能满足需求
的。所以针对不同的新平台,Unity 的项目组就要把 VM 给移植一遍,同时解决 VM 里
面发现的 bug。这非常耗时耗力。这些能移植的平台还好说,还有比如 WebGL 这样基
于浏览器的平台。要让 WebGL 支持 Mono 的 VM 几乎是不可能的。Mono 版本授权受
限:Mono 的版本已经更新到 3.X 了,但是在 Unity 中,C#的运行时版本一直停留在 2.8,
这也是 Unity 社区开发者抱怨的最多一 条:很多 C#的新特性无法使用。这是因为 Mono
授权受限,导致 Unity 无法升级 Mono。如果换做是 IL2CPP,IL2CPP VM 这套完全自己
开发的组件,就解决了这个问题。提高运行效率:根据官方的实验数据,换成 IL2CPP
以后,程序的运行效率有了 1.5-2.0 倍的提升。
对于 IL2CPP 而言,其将 IL 中间代码转换成 C++代码,图 2.1 是 IL2CPP 的工作原理。

图 2.1 IL2CPP 的工作原理

–7–
基于 U3D 的射击游戏设计与实现

3 游戏需求分析

为了开发出真正满足用户需求的软件产品,首先必须了解用户的需求。需求分析阶
段的任务是确定软件开发工程必须完成的总目标,确定工程的可行性,导出实现工程目
标应该采用的策略及游戏必须完成的功能,估计完成该项工程需要的资源和成本,并且
制定工程进度表。
同时,需求分析团队还需要评估工程的可行性。这包括对技术、资源和经济等方面
的考虑。通过评估可行性,团队能够确定是否具备完成该工程所需的技术能力、资源和
资金等条件。
同时,需求分析团队还需要估计完成该工程所需的资源和成本。这包括人力资源、
物质资源和财务资源等方面的考虑。通过对资源和成本的估计,团队能够制定合理的预
算和计划,确保工程能够按时完成。
最后,需求分析团队制定工程进度表,明确工程的时间范围、关键里程碑和任务分
配等。这有助于团队成员了解工作安排和优先级,并确保工程能够按计划进行。

3.1 可行性分析
随着移动设备的普及,手机游戏市场已经成为游戏开发的一个重要领域。在这个市
场中,射击游戏一直是一个受欢迎的类型。本章旨在探讨开发基于 Unity3D 引擎的手
机端射击游戏的可行性。在分析中,我们将考虑游戏的技术可行性以及市场潜力。通过
这些因素的评估,我们将得出结论,以帮助开发人员决定是否值得开发这款游戏。
一、 技术可行性
在开发基于 Unity3D 引擎的手机端射击游戏时,以下是需要考虑的技术可行性因
素:
(1) Unity3D 引擎的可行性
Unity3D 引擎是一款功能强大的游戏引擎,提供了广泛的功能和工具,特别适用于
射击游戏的开发。因此,选择 Unity3D 引擎是可行的,可以利用其强大的功能来开发
射击游戏。
(2) 图形和音效的可行性
射击游戏通常需要高质量的图形和音效,以提供令玩家满意的游戏体验。Unity3D
引擎具有出色的图形渲染能力和音频系统,可以实现高质量的图形和音效,从而确保玩
家获得更好的游戏体验。
(3) 多平台支持的可行性

–8–
基于 U3D 的射击游戏设计与实现

手机端射击游戏需要在多个平台上运行,包括 iOS 和 Android 等移动设备。


Unity3D 引擎具有跨平台的特性,可以轻松发布游戏到多个移动设备平台,因此实现多
平台支持是可行的。
(4) 服务器端技术的可行性
如果游戏需要支持多人在线功能,就需要使用服务器端技术。Unity3D 引擎提供了
与服务器通信和多人游戏开发相关的功能和工具,可以实现多人在线游戏的可行性。
(5) 游戏引擎 API 的可行性
为确保游戏在不同移动设备上的运行,需要使用合适的游戏引擎 API。Unity3D 提
供了 Networking API,可以用于实现多人游戏和网络功能,从而保证游戏的可行性和跨
平台性。
综上所述,基于 Unity3D 引擎开发手机端射击游戏的技术可行性很高,可以充分利
用引擎提供的功能和工具,实现高质量的图形和音效、多平台支持、多人在线游戏以及
跨平台性。
二、 市场可行性
该游戏具有市场可行性,以下是具体因素:
(1) 射击游戏在市场上的普及程度
了解射击游戏在市场上的受欢迎程度和趋势非常重要。市场上存在大量的射击游戏
爱好者,而且射击游戏是玩家喜爱的游戏类型之一,并且射击游戏在市场上具有广泛的
普及程度和稳定的需求。
(2) 目标受众
了解目标受众的特征对市场可行性的评估至关重要。确定目标受众的年龄、性别、
地理位置和偏好等信息,有助于了解市场规模和需求潜力。手机端射击游戏在年轻玩家
中特别受欢迎,并且目标受众广泛分布于全国各个地理区域。
(3) 竞争对手
评估现有的射击游戏和潜在的竞争对手对市场可行性的影响非常重要。了解竞争对
手的游戏特点、市场份额和品牌影响力,可以判断市场是否饱和或竞争激烈。虽然市场
上已经存在大量成功的射击游戏,但是产品存在明显的差距,其要么流畅度不够,要么
操作过于复杂,而本游戏注重于简化操作,提高流畅性,具有很强的竞争力。
(4) 游戏的价格和促销策略
考虑游戏的定价策略和促销策略对市场可行性的影响。价格和促销策略可能会影响
玩家的购买意愿和市场接受程度。如果游戏的价格定位合理且具有吸引力,并且采取了

–9–
基于 U3D 的射击游戏设计与实现

有效的促销措施,那么可能会吸引更多的玩家并提高市场的可行性。而本游戏是完全免
费的,对玩家具有很强的吸引力。
通过综合分析以上因素,该射击游戏在手机端市场的具有可行性。

3.2 用例与流程分析
综合考虑游戏市场现状,本游戏主要针对在校学生和上班白领两大群体进行设计。
针对这些玩家群体的偏好,游戏进行了相应的优化。在战斗方面,游戏注重呈现丰富而
逼真的动画效果,以满足玩家对战斗的追求。同时,在处理战斗破坏和牺牲场景时,通
过进度条和画面声音的合理配合来实现,尽量减少过于尖锐的声音和血腥画面的呈现。
由于在校学生和白领一族都无法长时间在线上进行游戏操作,并且上线时间相对固
定,本游戏采取了单局作战的设计方式。这样的设计让玩家可以在闲暇时间内进行游戏,
增加了游戏的周期性,使游戏对玩家更具平衡性。
对于游戏的管理,管理员用户将通过登录后台管理页面来进行操作和管理游戏数据。
这样的管理方式为管理员提供了便捷的工具,使其能够高效地管理和监控游戏的运行情
况。
通过这些优化措施和流畅的设计,本游戏能够更好地满足在校学生和上班白领的游
戏需求。丰富而逼真的战斗动画、合理处理的破坏场景、单局作战的游戏方式以及便捷
的后台管理系统,都为玩家提供了更好的游戏体验。
一、 用例分析
游戏主界面是整个游戏的入口,用户可以在主界面选择各种功能。角色移动和角色
转动用例表示玩家通过输入控制角色在游戏中进行移动和转向操作。角色动作用例表示
角色执行特定的动作,例如跳跃或攻击。角色射击用例表示玩家控制角色进行射击操作。
控制角色生命值用例表示游戏系统根据一定的规则和条件来管理和控制角色的生命值。
怪物控制用例表示游戏系统对怪物的生成和行为进行控制。背包系统用例表示玩家可以
管理和使用背包中的物品和装备。游戏结束用例表示游戏在满足一定条件时结束,并展
示相应的结算信息。根据以上用例我们得到图 3.1。

–10–
基于 U3D 的射击游戏设计与实现

图 3.1 游戏用例图

图 3.2 游戏流程图

–11–
基于 U3D 的射击游戏设计与实现

二、 流程分析
游戏的主要流程包括过场动画显示、启动游戏、进入游戏、角色战斗、通关游戏和
重新加载游戏。首先,在过场动画显示阶段,游戏会展示动画场景。接着,玩家启动游
戏,进入游戏主界面,可以选择角色和游戏模式等。一旦进入游戏,玩家将控制角色进
行战斗。在如果角色被敌人击败,将触发角色死亡的场景。此时,玩家重新加载游戏,
继续进行游戏。根据以上过程得到流程图 3.2。

3.3 功能需求分析
本游戏主要分两大部分:装备解锁和打怪生存,从功能实现上主要划分为三个模块:
僵尸模块、角色模块和 UI 模块。
在僵尸模块中,涉及到僵尸的模型、动作和属性等方面。首先,需要设计和创建不
同类型的僵尸模型,包括外貌、动画和特效等。每个僵尸模型都会有独特的行为和攻击
方式。其次,需要定义僵尸的动作,例如行走、奔跑、攻击和死亡等。这些动作将通过
动画控制器进行管理和切换。最后,需要确定每种僵尸的属性,包括生命值、速度、攻
击力和抗性等,以便与角色进行交互和战斗。
角色模块主要涉及角色的动作和死亡。包括近战攻击、奔跑、跳跃、下蹲、瞄准、
射击和死亡等模块。近战攻击模块定义了角色进行近身战斗的动作和效果,包括攻击范
围和伤害值等。奔跑和跳跃模块管理角色的移动和跳跃动作,并根据玩家的输入进行响
应。下蹲模块允许角色躲避攻击或进入瞄准状态。瞄准和射击模块控制角色使用远程武
器进行准确射击,并计算子弹的弹道和伤害。死亡模块定义了角色死亡时的动画和效果,
以及游戏结束的逻辑。
UI 模块涉及游戏界面的交互和显示。移动滑杆模块提供玩家控制角色移动的界面元
素,可以通过滑动来调整角色的移动方向和速度。角色操作按钮模块包括各种操作按钮,
例如攻击、跳跃、换弹和使用道具等,玩家可以点击这些按钮执行相应的动作。快捷按
钮模块允许玩家在游戏中快速地切换不同的武器和物品。背包界面模块提供了管理和使
用玩家装备、道具和资源的界面,包括购买、升级和解锁等功能。游戏整体结构如图 3.3
所示。

–12–
基于 U3D 的射击游戏设计与实现

图 3.3 游戏主体结构

3.3.1 僵尸模块分析
僵尸模块主要有以下几个功能,僵尸模块的具体结构如图 3.4 所示:
(1) 僵尸模型:在设计僵尸模型时,需要考虑其外貌与游戏主题的契合度。根据游戏
设定,可以创建各种不同的僵尸类型,如传统的行尸走肉、怪异的变异僵尸或者
特殊能力的特种僵尸等。注重表现每个僵尸类型的独特特征,包括外貌特征、体
型比例、身体部位的损伤和变异等。这样的设计可以提升游戏的视觉吸引力和玩
家对游戏世界的沉浸感。
(2) 僵尸动作:定义僵尸的动作时,首先需要确定每个动作的具体表现方式和效果。
行走动作应该使僵尸以缓慢而笨拙的步伐移动,体现出僵尸的迟缓特性。奔跑动
作则需要加快僵尸的速度和动作节奏,让玩家感受到僵尸的追逐和威胁。攻击动
作应该具有威慑力和凶猛性,通过僵尸的肢体动作和攻击效果表现出来。死亡动
作则可以设计为僵尸倒地或分解的过程,使玩家能够清楚地知道僵尸已被击败。
(3) 僵尸属性:确定僵尸的属性是为了给每个僵尸类型赋予不同的特点和挑战,同时
也为玩家与僵尸的交互和战斗提供了基础。

图 3.4 僵尸模块结构

–13–
基于 U3D 的射击游戏设计与实现

3.3.2 角色模块分析
角色模块主要有以下几个功能,角色模块的具体结构如图 3.5 所示:
(1) 近战攻击:近战攻击模块定义了角色进行近身战斗的动作和效果,包括攻击范围
和伤害值等。在这个模块中,需要设计和实现角色近战攻击的动画和特效,以及
确定攻击的范围和伤害数值。通过精确的攻击范围和适当的伤害值,玩家可以在
近距离与敌人展开战斗。
(2) 奔跑与跳跃:奔跑和跳跃模块管理角色的移动和跳跃动作,并根据玩家的输入进
行响应。这些动作模块是为了增加游戏的流畅性和灵活性,使玩家可以在战斗中
快速移动、躲避敌人的攻击或者跳跃到障碍物上获取优势位置等。
(3) 瞄准和射击:瞄准和射击模块控制角色使用远程武器进行准确射击,并计算子弹
的弹道和伤害。在这个模块中,需要设计瞄准准星和射击的操作方式,以及计算
子弹的飞行轨迹和命中目标后的伤害效果等。
(4) 角色死亡:死亡模块是游戏中一个重要的组成部分,它定义了角色死亡时的动画
和效果,以及游戏结束的逻辑。当角色生命值降为零时,死亡模块会触发相应的
死亡动画和死亡状态。

图 3.5 角色模块结构

3.3.3 UI 模块分析
UI 模块主要有以下几个功能,UI 模块的具体结构如图 3.6 所示:
(1) 移动滑杆:移动滑杆模块是游戏中负责提供玩家控制角色移动的界面元素之一。
它通常以一个可滑动的滑杆形式呈现在游戏屏幕上,玩家可以通过触摸或拖动滑
杆来控制角色的移动方向和速度。玩家也可以通过在滑杆上滑动指尖来调整角色
的移动方向。滑杆的位置和滑动的距离与角色的移动速度和方向相关联。

–14–
基于 U3D 的射击游戏设计与实现

(2) 操作按钮:角色操作按钮模块是游戏中用于执行各种角色操作的界面元素之一。
它包括多个操作按钮,如攻击、跳跃、换弹和使用道具等,玩家可以通过点击这
些按钮来触发相应的角色动作。角色操作按钮模块的设计旨在提供简单直观的操
作方式。通过将不同的操作功能分配到独立的按钮上,玩家可以快捷地选择所需
的操作,并实时响应角色的动作。
(3) 背包界面:玩家可以通过点击背包按钮,进入到背包界面中,在这个界面中,左
侧是角色的个人展示,右侧是各种物品展示和装备栏。

图 3.6 UI 模块结构

–15–
基于 U3D 的射击游戏设计与实现

4 游戏设计

总体设计是指在开发游戏过程中,涵盖游戏基本框架搭建、场景设计、数据库和功
能模块设计等方面的规划和设计工作。

4.1 游戏主题及背景设计
游戏以末日生存为主题,玩家扮演主角 Tommy,在拥有有限资源的条件下,突破僵
尸的重重包围,最终取得胜利。其中玩家需要合理的使用各种道具武器、炸药等工具应
对各种不同的局面。

4.2 场景设计
场景设计是总体设计的一个重要组成部分。场景设计包括确定游戏内各个场景的内
容设计,玩家操作设计等。

4.2.1 场景内容设计
游戏是在一个封闭的角斗场中进行的,其中拥有一个怪物生成点,生成点设置在大
门附近,每间隔一段时间会生成一个僵尸,但是僵尸的总数却限制在一定的范围之内,
避免僵尸过多造成游戏难度过大。枪械射击是具有射击音效的,并且游戏拥有背景音乐,
音乐可以一直循环。至于玩家的各种动作也是拥有音效的,并且怪物头顶上是会显示怪
物血条以及怪物名称。
本游戏采用无尽模式,有源源不断的僵尸复活,玩家要在有限的时间内杀死尽可能
多的僵尸取得胜利。玩家被僵尸攻击会减少 HP 值,HP 值为 0 时即会倒地身亡,然后
重生游戏会重新开始。最开始玩家配备一把拥有有限子弹的冲锋枪和几瓶生命药水,在
这样的条件下生存并且取得胜利。

4.2.2 操作设计
本游戏的操作设置包括以下内容:左侧虚拟摇杆用于用户控制角色的移动,右侧虚
拟滑动用于用户控制角色的转动。此外,右侧还有一系列按钮供用户操作角色的不同动
作。右侧开火按钮用于控制角色开火,右侧跑动按钮用于控制角色奔跑,右侧下蹲按钮
用于控制角色下蹲,右侧防御按钮用于控制角色进行防御,右侧瞄准按钮用于控制角色
的瞄准。最后,右侧上跳按钮则允许用户控制角色进行跳跃动作。通过这些操作设置,
玩家可以根据需要自如地控制角色的各种动作,提供了丰富的游戏体验。

–16–
基于 U3D 的射击游戏设计与实现

4.3 数据库设计
游戏软件的数据库设计和优化至关重要。它需要符合必要的数据库范式理论,以减
少数据的冗余并确保数据的完整性和准确性。只有在适用的数据库产品上设计出合理的
数据库模型,才能降低整个系统的编程和维护难度,并提升系统的实际运行效率。
首先,由于该游戏是一款射击生存类的动作游戏,快速和即时的信息交互至关重要,
因此需要高效的数据读取能力。
其次,随着网络截取软件的不断发展,我们还需要考虑信息交互格式的安全性和数
据存储的安全性。此外,由于数据量庞大且游戏数据之间关系复杂,数据库的设计和优
化对游戏开发起到至关重要的作用。
数据库设计是将业务对象转化为表和视图等数据库对象的过程。一个良好的数据库
应具备以下特点:便于用户访问数据、满足数据存储需求、具备良好的数据库安全机制
以保护数据、数据准确且易于管理、数据库整体性能合理且尽可能减少冗余数据的存储。
在本游戏中,采用了关系数据库模型,这是目前最流行的数据库模型之一。它简化
了数据管理和数据检索等任务。关系数据库模型支持三种表关联关系:一对一、一对多
和多对多,这使得数据之间的关联能够得到有效地处理。
通过合理的数据库设计和优化,我们能够提高游戏的性能,并确保数据的完整性和
一致性,提高玩家的体验感。

4.3.1 数据库总体设计
(1) 数据库需求分析
根据本游戏的实际需要和游戏设计需求,本游戏需要的数据至少包括: 玩家数据模
块、枪械模块、子弹模块、消耗品模块、近战武器模块、背包模块、僵尸模块等。具体
模块设计如下。
①玩家数据:其中包括玩家 id、玩家使用枪械 id、玩家生命值、玩家气力值等内容。
②枪械信息:其中包括枪械 id、枪械名称、枪械类型、枪械子弹数量等内容。
③子弹信息:其中包括子弹 id、子弹伤害值、子弹类型、子弹特效、子弹音效等内
容。
④消耗品信息:其中包括消耗品 id、消耗品名称、消耗品类型等内容。
⑤近战武器信息:其中包括近战武器 id、攻击力、攻击速度、武器类型等内容。
⑥背包信息:其中包括物品数量,物品种类、物品名称等内容。
⑦僵尸信息:其中包括僵尸 id、僵尸类型、僵尸移动速度、僵尸攻击速度、攻击力、
生命值、抗性值等内容。

–17–
基于 U3D 的射击游戏设计与实现

本游戏包含了大量的数据表,由于篇幅所限,故本文只列举了与重要功能相关的数
据表。
(2) 数据库概念结构设计
数据库设计常常使用实体-关系图(entity-relationship diagram)来建立数据模型。ER
图包含了实体、关系和属性三种基本成分,通过图形符号表示它们之间的关系。
在 ER 图中,实体通常用矩形框表示,关系用连接相关实体的菱形框表示,实体(或
关系)的属性则用椭圆形或圆角矩形表示,并通过无向边将实体(或关系)与其属性连
接起来。这种模型更贴近人们的思维方式,即使对计算机技术不熟悉的用户也能够理解,
因此 ER 模型成为用户与分析员之间有效的交流工具。本游戏的数据库设计采用了 ER
图来说明。
由于游戏项目庞大,这里给出一些重要关系的实体关系图,以展示数据库设计的概
貌。通过这些图形化表示,可以清晰地呈现游戏中各实体之间的关系,从而帮助开发团
队更好地理解数据结构和关联。这些实体关系图不仅提供了数据模型的视觉表示,还可
以作为后续开发和维护的指导依据,确保数据库的一致性和高效性。
在本游戏的数据库设计中,ER 图的使用帮助开发团队进行数据建模和分析,同时也
提供了一个可视化的交流工具,使得团队成员之间更容易理解和讨论数据库结构。这有
助于确保游戏数据的准确性、完整性和高效性。
在游戏中,一个玩家通常可以携带多个不同类型的枪械,并且每种枪械都可以使用
多种不同类型的子弹。这意味着玩家数据与枪械之间存在一对多的关系,一个玩家可以
拥有多个枪械。
同时,枪械与子弹之间存在多对多的关系,即每种枪械可以使用多种不同类型的子
弹,而同一类型的子弹也可以被多种不同的枪械使用。如下图 4.1 所示。
在游戏中,玩家往往需要面对多个僵尸敌人。这种情况下,一个玩家可以同时攻击
多个僵尸,而每个僵尸只能攻击玩家一个人。因此,玩家与僵尸之间存在一对多的关系。
如下图 4.2 所示。

–18–
基于 U3D 的射击游戏设计与实现

图 4.1 玩家,枪械和子弹关系图

图 4.2 僵尸和玩家关系图
在游戏中,当玩家只有一个背包时,这个背包可以装载不同种类的物品。每个物品
种类又包含多个具体的物品。因此,背包与枪械、消耗品和近战武器之间存在一对多的
关系。如下图 4.3 所示。

–19–
基于 U3D 的射击游戏设计与实现

图 4.3 背包关系图
(3) 数据库物理结构设计
在本游戏中,使用了多个表来支持各种功能的实现。本文将仅介绍主要功能所
涉及的表,它们的名称和用途如下表所示(表 4.1)。
表 4.1 游戏数据表
数据表名称 中文名称 备注
user_account 玩家表 存储玩家基本信息
user_bag 背包表 记录玩家背包的内容
user_gun 枪械表 包含各种可用的枪械信息
bullet 子弹表 存储游戏中各种可使用的子弹信息
zombie 僵尸表 记录各种种类僵尸的属性和特征
item 消耗品表 包含各种可用的消耗品信息
weapon 近战武器表 存储游戏中可用的近战武器信息

–20–
基于 U3D 的射击游戏设计与实现

4.3.2 数据库详细设计
(1)玩家数据模块(user_account)
玩家数据表(user_account)是用来存储玩家的相关信息的重要表格。该表记录了玩
家的各种数据,包括玩家 ID、玩家生命值、玩家气力值、玩家使用的枪械 ID 等等。下
表(表 4.2)展示了该表的字段说明。
表 4.2 玩家数据表
字段名 数据类型 字段说明 键引用
uid Int(10) 玩家 ID PK
Health Int(10) 玩家生命值
Energy Int(10) 玩家气力值
GunID Tinyint(3) 使用的枪械 ID FK

(2)背包表(user_bag)
背包表(user_bag)是用来存储背包中物品的相关信息的重要表格。该表记录了背包
中的各种数据,包括物品 ID,物品种类,物品数量,物品名称等等。下表(表 4.3)展
示了该表的字段说明。
表 4.3 背包表
字段名 数据类型 字段说明 键引用
ItemID Int(10) 物品 ID PK
Type Varchar(255) 物品种类
num Int(10) 物品数量
name Varchar(255) 物品名称

(3)枪械表(user_gun)
枪械表(user_gun)是一个关键的表格,用于存储各种枪械的相关信息。该表记录了
枪械的各种数据,包括枪械 ID、枪械子弹数量、枪械名称、枪械类型等。以下是表 4.4
中枪械表的字段说明。
表 4.4 枪械表
字段名 数据类型 字段说明 键引用
GunID Int(10) 枪械 ID PK
Type Varchar(255) 枪械种类
num Int(10) 枪械数量
name Varchar(255) 枪械名称

(4)子弹表(bullet)

–21–
基于 U3D 的射击游戏设计与实现

子弹表(bullet)是一个关键的表格,用于存储各种子弹的相关信息。该表记录了子
弹的各种数据,包括子弹 ID、子弹伤害值、子弹类型、子弹特效、子弹音效等。以下
是表 4.5 中子弹表的字段说明。
表 4.5 子弹表
字段名称 数据类型 字段说明 键引用
Id Int(10) 子弹 id PK
Type varchar(255) 类型
AttackValue Int(10) 子弹伤害值
Effect varchar(255) 特效
Sound Smallint(5) 声效 id 编号

(5)僵尸表(zombie)
僵尸表(zombie)是一个重要的数据表,用于存储僵尸的相关信息。该表记录了僵
尸的各种数据,包括僵尸 ID、僵尸类型、僵尸生命值、僵尸抗性值、僵尸移动速度、
僵尸攻击速度、以及攻击力等。以下是表 4.6 中僵尸表的字段说明。
表 4.6 僵尸表
字段名称 数据类型 字段说明 键引用
id Int(10) 僵尸 id PK
Health Int(10)) 僵尸生命值
Type Varchar(255) 僵尸类型
RV Int(10) 僵尸抗性值
MR Smallint(5) 僵尸移动速度
AR Smallint(5) 僵尸攻击速度
Hurt Tinyint(5) 僵尸攻击力

4.4 功能模块设计
角色模块主要是处理玩家移动、转向、射击、装弹等行为。怪物模块主要是处理僵
尸攻击、僵尸生成、僵尸移动、僵尸死亡等行为。而 UI 模块主要是操作按钮、背包界
面、血条显示、名称显示等界面。接下来本文将从这三个模块进行功能设计。

4.4.1 角色模块设计
角色模块在游戏中扮演着重要的角色,负责处理玩家的移动、转向、射击和装弹等
各种行为。

–22–
基于 U3D 的射击游戏设计与实现

(1)角色模块负责处理玩家的移动。无论是探索还是战斗,玩家需要能够自由地在
游戏场景中移动。角色模块通过接收玩家的输入指令,实时更新角色的位置和方向,并
与游戏场景进行碰撞检测,确保玩家在移动过程中与环境的正确互动。
(2)角色模块还负责处理玩家的转向。玩家需要能够准确地改变角色的朝向,以便
与敌人进行对抗或者探索环境。角色模块根据玩家的输入指令,实时调整角色的朝向,
并更新相应的动画和视觉效果,使玩家能够准确感知角色的朝向变化。
(3)角色模块还承担着玩家的射击和装弹行为的处理。在射击游戏中,玩家需要能
够使用各种武器进行攻击。角色模块接收玩家的射击指令,根据当前装备的武器类型和
状态,进行射击动作的触发,并计算伤害等相关效果。同时,角色模块还负责监控玩家
的弹药数量,根据游戏规则和武器属性进行装弹操作,确保玩家在合适的时机进行弹药
补充。角色模块的流程图如下图 4.4 所示。

图 4.4 角色模块流程图

4.4.2 僵尸模块设计
僵尸模块是游戏中一个重要的组件,主要负责处理僵尸相关的各种行为,包括攻击、
生成、移动和死亡等。下面对怪物模块的功能进行详细扩展:
(1)僵尸生成(Zombie Spawning):

–23–
基于 U3D 的射击游戏设计与实现

确定生成位置:根据游戏规则和地图设计,确定僵尸生成的位置。
生成条件判断:根据游戏进度、玩家位置等,判断是否满足生成僵尸的条件。
生成僵尸:在合适的位置生成僵尸实例,并进行初始化设置。
(2)僵尸移动:
寻找目标:根据设定的策略,僵尸会选择最近的玩家作为移动目标。
移动路径计算:根据玩家位置和地图障碍物等信息,计算僵尸的移动路径。
移动执行:根据计算出的移动路径,逐步更新僵尸的位置,实现移动效果。
(3)僵尸攻击:
攻击目标选择:判断僵尸周围是否有玩家,选择最近的玩家作为攻击目标。
攻击条件判断:根据游戏规则和僵尸状态,判断是否满足进行攻击的条件。
执行攻击:当满足攻击条件时,对目标进行攻击操作,减少目标的生命值。
(4)僵尸死亡:
死亡条件判断:根据游戏规则和攻击效果,判断僵尸是否满足死亡条件。
死亡处理:死亡时,进行相应的死亡动画播放、资源释放和数据清理等处理。
奖励发放:根据游戏规则,对玩家进行奖励,例如得分增加或获得道具等。
僵尸模块的流程图如下图 4.5 所示。

图 4.5 僵尸模块流程图

–24–
基于 U3D 的射击游戏设计与实现

4.4.3 UI 模块设计
UI 模块是游戏中一个重要的组成部分,主要负责处理与用户界面相关的各种操作和
显示。下面是 UI 模块的扩展说明:
(1)按钮操作:UI 模块包含各种交互按钮,如开始游戏按钮、暂停按钮、设置按
钮等。这些按钮用于触发相应的游戏功能,例如开始游戏、暂停游戏、调整游戏设置等。
(2)背包界面:UI 模块提供背包界面,玩家可以在这个界面中管理和操作他们的
物品和道具。玩家可以查看已拥有的物品、装备和使用道具等。
(3)血条显示:UI 模块通过血条显示玩家和敌对角色的血量信息。这样玩家可以
清楚地了解角色的当前生命值,帮助他们做出相应的策略和决策。
(4)名称显示:UI 模块还负责显示角色的名称和相关信息。这样玩家可以快速辨
认不同的角色,并了解他们的属性和特点。
UI 模块的流程图如下图 4.6 所示。

图 4.6 UI 模块流程图

–25–
基于 U3D 的射击游戏设计与实现

5 游戏实现

5.1 角色模块实现
角色模块中需要涉及许多比较复杂的内容,其中最主要的几个功能分别是角色控制
功能、角色死亡功能和角色动作功能:
角色控制功能是控制角色移动、跳跃、射击等动作来实现游戏操作。因此,游戏中
需要编写相应的控制指令,来控制角色移动、跳跃、射击等动作。
角色死亡功能是如果角色死亡,那么需要对系统进行初始化,恢复系统数据以便于
玩家能够重新开始游戏。
角色动作功能是通过模型与骨骼进行绑定,使静态的模型能够按照现实中的人体一
样可以执行各种动作,例如,奔跑、跳跃和下蹲等。

5.1.1 角色控制功能实现
类功能介绍:控制玩家开火,武器装弹和武器瞄准等。
public virtual void Shoot(Vector3 aimPosition, bool applyHipfirePrecision = false, bool
useSecundaryWeapon = false)
{
// 检查是否正在射击中
if (isShooting) return;
var weapon = rWeapon ? rWeapon : lWeapon;
// 检查是否存在有效的武器
if (!weapon || !weapon.gameObject.activeInHierarchy) return;
var secundaryWeapon = weapon.secundaryWeapon;
// 如果需要使用副武器但副武器不存在,则返回
if (useSecundaryWeapon && !secundaryWeapon) return;
var targetWeapon = useSecundaryWeapon ? secundaryWeapon : weapon;
// 如果目标武器禁用重新装填,则加载所有弹药
if (targetWeapon.dontUseReload)
LoadAllAmmo(targetWeapon, useSecundaryWeapon);
// 如果目标武器为自动重新装填并且弹药数为零且有未装填的弹药,则重新装
填武器并返回
else if (targetWeapon.autoReload && targetWeapon.ammoCount <= 0 &&
WeaponHasUnloadedAmmo())

–26–
基于 U3D 的射击游戏设计与实现

{
ReloadWeapon();
return;
}
var _aimPos = applyHipfirePrecision ? aimPosition +
HipFirePrecision(aimPosition) : aimPosition;
var applyRecoil = false;
// 射击目标武器,并在回调中确定是否应用后坐力
targetWeapon.Shoot(_aimPos, transform, (bool sucessful) => { applyRecoil =
sucessful; });
// 如果应用后坐力,则生成随机的水平和垂直后坐力值
if (applyRecoil)
{
var recoilHorizontal = Random.Range(targetWeapon.recoilLeft,
targetWeapon.recoilRight);
var recoilUp = Random.Range(0, targetWeapon.recoilUp);
StartCoroutine(Recoil(recoilHorizontal, recoilUp));
}
UpdateAmmoDisplay(rWeapon ? 1 : -1);
// 如果目标武器禁用重新装填,则加载所有弹药
if (targetWeapon.dontUseReload)
LoadAllAmmo(targetWeapon, useSecundaryWeapon);
}
首先,该函数名为“Shoot”,并且它是一个“public virtual”的函数,这意味着它可
以被继承,并且具有公共的返回值,但是它没有实现虚函数的行为。该函数接受一个
“Vector3”类型的参数“aimPosition”,它表示射击的目标位置。同时,该函数还接受两
个可选的参数:“bool”类型的参数“applyHipfirePrecision”(用于指定是否使用开火精度),
以及“bool”类型的参数“useSecundaryWeapon”(用于指定是否使用备用武器)。如果
函数被调用时“isShooting”变量的值为“true”,则该函数将返回,因为此时游戏正在进
行射击操作。如果“rWeapon”变量不为空,则返回“rWeapon”变量,否则返回“lWeapon”
变量。如果武器对象不处于活动状态,则返回。如果“useSecundaryWeapon”变量为“true”,
则返回备用武器对象。如果“targetWeapon.dontUseReload”变量为“true”,则加载所有
可 用 的 弹 药 到 目 标 武 器 中 。 如 果 “ targetWeapon.autoReload ” 变 量 为 “ true ” 且
“targetWeapon.ammoCount”小于等于 0,并且“WeaponHasUnloadEDAmmo()”函数

–27–
基于 U3D 的射击游戏设计与实现

返回“true”,则重新加载所有弹药到目标武器中,并返回。将“_aimPos”参数设置为
“applyHipfirePrecision”参数指定的值加上“aimPosition”参数。检查“applyRecoil”
参数是否为“true”。如果“applyRecoil”参数为“true”,则生成一个随机的后坐力方向
(范围为“targetWeapon.recoilLeft”到“targetWeapon.recoilRight”) 和一个随机的后坐
力高度 (范围为 0 到“targetWeapon.recoilUp”)。启动一个“Recoil”子程序,该子程
序会在后坐力产生时执行。更新“AmmoDisplay”变量的值 (用于显示可用的弹药数量)。
如果“targetWeapon.dontUseReload”变量为“true”,则加载所有可用的弹药到目标武器
中。检查“totalAmmo”变量是否小于等于 0,如果是,则调用“weapon.onFinishAmmo”
函数 (用于在弹药耗尽时触发)。如果“useSecundaryWeapon”变量为“true”,并且
“secundaryTotalAmmo”变量小于等于 0,并且“weapon.secundaryWeapon”不为空,
则调用“weapon.secundaryWeapon.onFinishAmmo”函数 (用于在备用弹药耗尽时触发)。

5.1.2 角色死亡功能实现
功能:角色死亡时触发相应函数及功能。
using UnityEngine;
using UnityEngine.Events;

namespace Invector.vCharacterController
{
// 角色死亡触发器
public class vOnDeadTrigger : MonoBehaviour
{
public UnityEvent OnDead; // 死亡事件

void Start()
{
vCharacter character = GetComponent<vCharacter>();
if (character != null)
character.onDead.AddListener(OnDeadHandle);
}

// 死亡事件处理方法,调用死亡事件
public void OnDeadHandle(GameObject target)
{
OnDead.Invoke();

–28–
基于 U3D 的射击游戏设计与实现

}
}
}
这段代码定义了一个名为 vOnDeadTrigger 的 MonoBehaviour 组件,它包含一个名
为 OnDead 的 UnityEvent。该组件应用于 vCharacter 组件,并且在 Start() 方法中注
册了一个 OnDeadHandle 方法作为该事件的监听器。
UnityEvent 是 UnityEngine 中的一组类,用于在 Unity 中定义事件。UnityEvent 类
支持在事件处理程序中使用事件参数和事件返回值。
在 Start() 方法中,vCharacter 组件被检查是否存在。如果存在,则将其 onDead 方
法添加到监听器列表中,以便在目标对象死亡时调用该方法。
OnDeadHandle 方法接收一个目标对象作为参数,并在该对象死亡时调用 OnDead
事件。OnDead 事件是在目标对象死亡时触发的,因此该事件处理程序可以执行与目标
对象死亡相关的操作。

5.1.3 角色动作功能实现
人物模型是游戏制作中非常重要的一个环节,它的初始态通常是静态的,但是在游
戏中,玩家需要控制人物进行各种动作,例如行走、跳跃、攻击等。为了实现这些动作,
人物模型需要能够根据玩家的操作进行相应的动作反应。这就需要对人物模型进行绑定
建立相应骨架,使其能够模拟现实生活中的人体动作。
在建立人物模型骨架的过程中,需要考虑许多因素。首先,需要使用 3D 建模软件
创建一个人物模型,并为其添加骨骼系统。骨骼系统是人物模型的核心部分,它由许多
骨骼组成,这些骨骼可以控制人物模型的动作。骨骼系统的设计需要考虑到人物模型的
动作需求,例如行走、跳跃、攻击等,以便实现更加真实的角色动作。
为了使人物模型更加贴近现实生活中的人体,需要建立脊椎、手臂、手掌、股骨、
髌骨和胫骨这样的活动关节组成。这些关节的添加可以使人物模型的动作更加真实自
然。例如,建立脊椎关节可以使人物模型的头部和躯干能够旋转和倾斜,从而更好地模
拟现实生活中的人物动作。而建立手臂和手掌关节可以使人物模型的手能够弯曲和伸
展,从而更加自然地进行各种操作。骨骼与模型的绑定如下图 5.1 所示。

–29–
基于 U3D 的射击游戏设计与实现

图 5.1 人物骨骼构建

5.2 僵尸模块实现
僵尸模块的实现是游戏开发中一个重要的部分,它负责实现僵尸在游戏中的攻击、
移动和寻找玩家等功能。下面将详细介绍这些功能的实现方式。
首先,对于僵尸的攻击功能,可以通过设计碰撞检测系统来实现。这涉及到为僵尸
和玩家添加适当的碰撞体,以便在接触时触发攻击行为。当僵尸检测到玩家在攻击范围
内时,可以通过调用相应的攻击动画和音效来模拟攻击效果。同时,还需要管理玩家的
生命值,以便减少其生命值并实现攻击效果。
其次,僵尸的移动功能可以通过使用路径规划算法来实现。可以为每个僵尸分配一
个目标点,然后使用寻路算法(如 A*算法)来确定移动路径。通过更新僵尸的位置,
使其按照路径向目标点移动,可以实现平滑而自然的移动效果。此外,还可以添加一些
变化因素,如随机移动、追逐玩家等,以增加游戏的难度和策略性。
最后,对于僵尸寻找玩家的功能,可以使用基于感知的方法。通过为僵尸添加感知
范围和感知能力,可以让它们在一定范围内寻找玩家。可以使用射线投射或区域检测等
技术来检测玩家的存在。一旦检测到玩家,僵尸可以根据一些策略,如最短路径或追逐
行为,朝着玩家的位置移动。僵尸攻击的主要代码如下:
public class zombiecontrol : MonoBehaviour
{
public GameObject target1; // 僵尸追逐的对象

–30–
基于 U3D 的射击游戏设计与实现

public float speed1; // 僵尸的速度


public float ATK; // 僵尸攻击力
private int thought; // 僵尸的随机想法
private float v1 = 10.0f; // 三个随机数
private float v2 = 10.0f;
private float v3 = 10.0f;
void zombie_move()
{
transform.LookAt(thought == 0 ? target1.transform.position : new Vector3(v1 * 30,
v2 * 30, v3 * 30));
transform.Translate(Vector3.forward * Time.deltaTime * speed1); // 向前移动
}
void OnDestroy()
{
GameObject zombieCount = GameObject.Find("Canvas/zombieCount");
string str = zombieCount.GetComponent<Text>().text;
numberInt += 1;
zombieCount.GetComponent<Text>().text = "杀死丧尸:" + numberInt.ToString();
}
void zombie_view()
{
if (time > 0)
time -= Time.deltaTime;
else
{
time = 5.0f;
v1 = Random.value;
v2 = Random.value;
v3 = Random.value;
}
}
使用 System.Collections、System.Collections.Generic、UnityEngine、UnityEngine.UI
库。定义了类 zombiecontrol。 声明了多个私有字段,包括游戏对象 target1、僵尸速度
speed1、僵尸攻击力 ATK、碎片预制件的 GameObject bodyPieces、僵尸随机想法 thought、
计时器 time、三个随机数 v1、v2、v3、僵尸朋友对象 zombie_friends、玩家和僵尸之间

–31–
基于 U3D 的射击游戏设计与实现

的距离 distance。初始化一些参数值,比如为 target1 赋值,生成随机想法,为随机数 v1、


v2、v3 赋值等。Update()方法:每帧更新操作。首先计算玩家与僵尸之间的距离 distance,
若距离小于等于 10,则将僵尸的想法设置为 1,开始追逐;若距离大于 10 且想法为 1,
则将想法设置为 0,停止追逐;当想法为 1 且距离大于 1.5 时,僵尸向目标移动;当想
法为 0 时,僵尸进行随机运动。OnCollisionEnter(Collision col)方法:碰撞检测。当僵尸
被子弹撞击时,销毁子弹,生成碎片并添加爆炸力,最后销毁僵尸本体。僵尸模块实现
界面如下图 5.2 所示。

图 5.2 僵尸模块实现

5.3 UI 模块实现

5.3.1 生命条显示功能实现
功能介绍:控制和显示游戏玩家的生命值血条。
public int MaxHealth { get; protected set; } // 最大生命值

public float CurrentHealth


{
get { return _currentHealth; }
protected set
{
if (_currentHealth != value)
{

–32–
基于 U3D 的射击游戏设计与实现

_currentHealth = value;
onChangeHealth.Invoke(_currentHealth); // 当当前生命值发生变化时触发
事件
}

if (!_isDead && _currentHealth <= 0) // 如果尚未死亡且当前生命值小于等于 0


{
_isDead = true;
onDead.Invoke(gameObject); // 触发死亡事件,并传递当前游戏对象
}
else if (_isDead && _currentHealth > 0) // 如果已经死亡且当前生命值大于 0
{
_isDead = false; // 标记为非死亡状态
}
}
}
public bool IsDead
{
get
{
if (!_isDead && CurrentHealth <= 0) // 如果尚未死亡且当前生命值小于等于 0
{
_isDead = true;
onDead.Invoke(gameObject); // 触发死亡事件,并传递当前游戏对象
}
return _isDead; // 返回死亡状态
}
set { _isDead = value; } // 设置死亡状态
}
这段代码是使用 UnityEngine 框架编写的一个角色类,其中包含了角色的属性、状
态和事件处理。
具体如下:
public int MaxHealth 是一个获取/设置角色最大生命值的属性,其值为整数类型。

–33–
基于 U3D 的射击游戏设计与实现

public float currentHealth 是一个获取/设置角色当前生命值的属性,其值为浮点数类


型。
public bool isDead 是一个获取角色是否死亡的属性,如果当前生命值小于等于 0,
则返回真,否则返回假。
protected set 修饰符意味着该属性的值可以被保护地修改,只有本类的内部代码可
以访问。
if 语句用于检查当前生命值是否小于等于 0,如果是,则调用 isDead 方法并将游
戏对象传递给该方法,从而实现角色死亡的效果。
onChangeHealth 是一个事件处理程序,用于在生命值发生变化时触发。
onDead 是一个事件处理程序,用于在角色死亡时触发。
总体来说,这段代码定义了一个角色类,其中包含了角色的属性、状态和事件处理程序,
使得角色可以在 UnityEngine 环境中进行操作和交互。血条和气力值界面实现如下图
5.3 所示。

图 5.3 血条和气力值界面

5.3.2 操作按钮功能实现
在我们的游戏中,玩家可以通过左下角的摇杆按钮来操作角色进行移动。这个摇杆
按钮是一个可滑动的中心按钮,通过计算滑动方向与中心的矢量,可以操作角色进行相
应的移动。通过在滑动按钮上添加了风格样式,提高了玩家操作体验感。
除了移动操作,还可以使用其他操作来控制角色。例如,可以使用“拳击”按钮来
进行一次近战攻击,或者使用“瞄准”按钮来进行一次远程攻击。这些按钮位于游戏界
面的右下角,对应了游戏中七种不同的操作,包括“拳击”,“瞄准”,“防御”,“跑”,
“上跳”,“下跳”,“下蹲”。每个操作按钮中心都有相应的动作图标,以便玩家更好
地了解他们正在执行的操作。
当角色的生命值下降时,需要通过治疗道具来补充玩家血量。在左上角,可以看到
一个角色的血量和气力值的显示条。只有当气力值充足时,玩家才能对角色进行更复杂
的操作,例如使用更强力的技能或装备。
在右下角,我们有七个按钮,它们分别对应了“拳击”,“瞄准”,“防御”,“跑”,
“上跳”,“下跳”,“下蹲”七种操作。每个操作按钮中心都有相应的动作图标,以便
玩家更好地了解他们正在执行的操作。

–34–
基于 U3D 的射击游戏设计与实现

最后,在右上角,我们可以看到一个背包按钮。这是一个打开背包系统的按钮,玩
家可以存储、查看和管理他们的道具和装备。人物操作按钮界面如下图 5.2 所示。

图 5.2 游戏操作界面

5.4 其他功能模块实现

5.4.1 摄像机控制功能实现
功能介绍:控制摄像机的旋转。
public void RotateCamera(float x, float y)
{
if (currentState.cameraMode.Equals(TPCameraMode.FixedPoint) || !isInit)
{
return;
}
if (!currentState.cameraMode.Equals(TPCameraMode.FixedAngle))
{
// 锁定目标
if (!lockTarget)
{
// 自由旋转
mouseX += x * currentState.xMouseSensitivity;
mouseY -= y * currentState.yMouseSensitivity;
movementSpeed.x = x;
movementSpeed.y = -y;

if (!lockCamera)
{

–35–
基于 U3D 的射击游戏设计与实现

// 限制垂直和水平旋转角度
mouseY = vExtensions.ClampAngle(mouseY, lerpState.yMinLimit,
lerpState.yMaxLimit);
mouseX = vExtensions.ClampAngle(mouseX, lerpState.xMinLimit,
lerpState.xMaxLimit);
}
else
{
// 锁定相机角度到目标的角度
mouseY = currentTarget.root.eulerAngles.NormalizeAngle().x;
mouseX = currentTarget.root.eulerAngles.NormalizeAngle().y;
}
}
}
}
这段代码用于旋转摄像机。根据函数签名,它接受两个参数 x 和 y,分别代表摄像
机要旋转的 x 轴和 y 轴角度。
首先,该函数检查当前摄像机模式是否为 TPCameraMode.FixedPoint 或
TPCameraMode.FixedAngle,如果是,则直接返回,因为摄像机已经固定不动了。
如果不是,则函数会检查是否已经锁定了目标。如果已经锁定了目标,则函数会直
接调用 FreeRotation 方法来旋转摄像机,其中 x 和 y 参数分别代表旋转的 x 轴和 y
轴角度。如果未锁定目标,则函数会先检查是否需要锁定相机,如果需要,则调用
LockCamera 方法来锁定相机,否则,函数会调用 FreeRotation 方法来旋转摄像机。
在 FreeRotation 方法中,函数会使用鼠标输入来旋转摄像机。具体来说,它会将鼠
标 X 轴输入乘以当前相机灵敏度 x,将鼠标 Y 轴输入减去当前相机灵敏度 y,然后
根据是否需要锁定相机和目标,对鼠标 Y 轴和 X 轴输入进行限制和平滑处理。
最后,函数会将所有输入的旋转角度转换为摄像机旋转角度,并将它们应用到摄像
机上。
总之,这段代码实现了对摄像机的旋转控制,它可以根据用户的输入来旋转摄像机,
并且可以灵活地锁定和解锁目标,使摄像机始终保持在目标上。

5.4.2 动画标签功能实现
功能:给各个动作进行标签,方便引擎调用
namespace Invector.vEventSystems

–36–
基于 U3D 的射击游戏设计与实现

{
public class vAnimatorTag : vAnimatorTagBase
{
public string[] tags = new string[] { "CustomAction" };
// 当进入动画状态时调用
public override void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo,
int layerIndex)
{
base.OnStateEnter(animator, stateInfo, layerIndex);
HandleStateInfo(tags, layerIndex, (info, tag, index) => info.AddStateInfo(tag,
index));
OnStateEnterEvent(tags.vToList()); // 触发进入动画状态事件
}

// 当退出动画状态时调用
public override void OnStateExit(Animator animator, AnimatorStateInfo stateInfo,
int layerIndex)
{
HandleStateInfo(tags, layerIndex, (info, tag, index) =>
info.RemoveStateInfo(tag, index));
base.OnStateExit(animator, stateInfo, layerIndex);
OnStateExitEvent(tags.vToList()); // 触发退出动画状态事件
}

// 处理动画状态信息
private void HandleStateInfo(string[] tags, int layerIndex,
Action<vStateInfos.StateInfo, string, int> action)
{
if (stateInfos == null) return;
// 遍历所有标签和状态信息
foreach (var tag in tags)
{
foreach (var stateInfo in stateInfos)
{
action(stateInfo, tag, layerIndex);

–37–
基于 U3D 的射击游戏设计与实现

}
}
}
}
}
这 段 代 码 是 使 用 UnityEngine 库 中 的 Animator 组 件 来 实 现 一 个 自 定 义 的
Animator 标签类。该类继承自 vAnimatorTagBase 类,该类提供了两个 OnStateEnter 和
OnStateExit 方法,分别用于在 Animator 组件的进入和离开指定状态时执行相应的操
作。
在 vAnimatorTag 类中,首先定义了一个名为 tags 的字符串数组,该数组中存储了
该 Animator 标签要标记的状态名称,例如"CustomAction"。
在 OnStateEnter 方法中,首先调用了 base.OnStateEnter 方法,然后检查状态信息
是否为空,如果不为空,则遍历 tags 数组,并将每个状态名称添加到状态信息中。最
后,调用 OnStateEnterEvent 方法,将 tags 数组转换为一个可迭代的列表,以便在事
件处理程序中进行处理。
在 OnStateExit 方法中,首先调用了 base.OnStateExit 方法,然后检查状态信息是
否为空,如果不为空,则遍历 tags 数组,并将每个状态名称从状态信息中删除。最后,
调用 OnStateExitEvent 方法,将 tags 数组转换为一个可迭代的列表,以便在事件处理
程序中进行处理。

–38–
基于 U3D 的射击游戏设计与实现

6 游戏测试

6.1 软件测试理论
测试是执行程序以发现其中错误的过程。为了揭示程序中的错误,测试的目标是不
容忽视的。因此,在综合测试阶段,测试工作不应完全由编写者自行进行,而是需要由
一个专门的测试小组来完成。此外,需要明确的是,尽管测试可以发现程序中的错误,
但无法证明程序没有错误[14]。
测试的主要准则涵盖以下几个方面:与用户需求一致的测试、在测试开始前制定完
善的测试计划、应用帕累托原则指导软件测试、逐步扩大规模的测试、承认穷尽测试是
不可能的,并确保独立的第三方从事测试工作,以实现最佳的测试效果。
测试产品有两种方法:如果已知产品应该具备的功能,可以通过测试来验证每个功
能是否正常工作;如果了解产品的内部工作原理,可以通过测试来验证内部动作是否按
照规格说明书的规定正常进行。前一种方法称为黑盒测试,后一种方法称为白盒测试。
其中,黑盒测试也被称为功能测试,白盒测试也被称为结构测试。
软件测试按照以下顺序进行:从单元测试开始,逐步进行集成测试,最后进行确认
测试和系统测试。在传统的软件游戏中,单元测试主要集中在最小的可执行程序单元(如
过程模块)。完成这些单元测试后,将它们整合到程序结构中,并进行回归测试,以检
测模块接口错误和新添加单元引入的副作用。最后,对整个游戏进行测试,以发现软件
需求中的错误。
对于信息管理游戏,使用游戏功能说明和功能流程图。首先,对每个模块进行逐一
的单元测试,并收集测试结果进行分析,反复使用测试用例进行测试。然后,对模块进
行集成测试,可以使用测试工具如 WinRunner、Loadrunnel、TestDirector、Rational Robot
进行测试。使用 SilkTest 进行功能测试,使用 WAS 进行性能测试。还需要进行界面测
试,并查看游戏在互联网上的运行情况。
针对信息管理游戏的测试,可以采用游戏功能说明和功能流程图进行测试计划的制
定。首先,对每个模块进行单元测试,逐个测试其功能和逻辑正确性。测试结果应该被
记录并进行分析,以便及时修复发现的错误。通过使用各种测试用例和场景,可以不断
进行测试,确保模块的稳定性和正确性。
接下来,进行模块的集成测试。将独立测试通过的模块集成到整个程序结构中,并
进行回归测试,以验证模块间的接口和交互是否正常。这个阶段需要特别关注模块集成
可能带来的副作用和错误,确保整个系统的稳定性和一致性。

–39–
基于 U3D 的射击游戏设计与实现

确认测试是在整个开发周期的后期进行的测试阶段,旨在确认软件系统是否符合用
户需求和规格说明书的要求。通过执行一系列的功能和性能测试,确认测试可以验证系
统是否达到了预期的功能和性能水平。同时,界面测试也是重要的一部分,以确保用户
界面的友好性和一致性。
最后,进行游戏测试。这是将整个软件作为一个整体进行测试,以验证游戏在真实
环境中的运行情况。游戏测试涉及各种用户场景和游戏流程,以确保游戏的可玩性、稳
定性和响应性。
需要注意的是,测试只能发现程序中的错误,而不能证明程序没有错误。因此,在
测试过程中需要保持开放的心态,及时处理发现的问题,并进行持续的改进和优化。测
试工作需要独立的第三方进行,以确保测试的客观性和全面性。测试流程如图 6.1 所示。
单元测试 单元测试 单元测试

系统集成测试

功能测试

性能测试

系统集成测试

界面测试

安装测试

可使用的系统

图 6.1 测试流程图

6.2 游戏黑盒测试
在本游戏的测试过程中,我们采用了黑盒测试的方法。我们对每个模块进行了详细
的测试,并进行了综合测试。
(1) 进入游戏功能测试
当用户单击移动设备上的游戏图标时,游戏将进入载入画面。在这个阶段,游戏会
加载所需的资源,并成功获取玩家数据。一旦资源加载和玩家数据获取完成,游戏将根
据加载的信息呈现虚拟的僵尸角斗场画面。载入流程图如 7.2 所示。

–40–
基于 U3D 的射击游戏设计与实现

图 6.1 游戏载入流程图
(2) 游戏中功能测试
这一部分对游戏的基本功能模块进行测试:角色移动测试、射击测试、角色动作测
试、怪物掉血测试、角色死亡测试、枪械测试、背包测试等功能测试。
首先根据不同的方向滑动左侧的滑杆,发现角色移动位置和转动方向与设计的方向
是一致的,说明角色的方向控制实现正确。
然后对角色进行射击测试,点击射击按钮,发现角色进行了射击,其中射击动作,
射击音效和射击效果等如预期正常运行。如图 6.3 所示。
然后对角色的各个动作按钮进行测试,单击动作按钮,角色的动作如预期正 常运
行,说明角色动作实现正确。如图 6.4 所示。
然后对角色进行掉血死亡测试,角色健康值减少,角色死亡后进行重生,其效果符
合预期,说明角色掉血和死亡功能正确。

–41–
基于 U3D 的射击游戏设计与实现

然后对背包进行测试,点击背包按钮,进入背包界面,然后点击装备栏,对枪械进
行装备,可以装备上,说明背包中装备枪械功能正确运行,然后观测到背包左侧是角色
的个人展示,符合角色的形象,说明背包的个人展示功能正常运行。如图 6.5 所示。
最后对怪物的 AI 和攻击进行测试,发现怪物可以发现玩家,并且攻击玩家,说明
怪物的 AI 功能正确并且攻击动作等实现正确。如图 6.6 所示。
然后对系统中各个数据进行测试,如下表 6.1 所示。
表 6.1 数据测试
输入数据 预计输出数据 实际输出数据 是否相符
射击伤害 5~6 5.5 相符
怪物伤害 0~10 6.0 相符
子弹射速 30/s 27/s 相符
僵尸生成 1.0/s 1.0/s 相符
人物血量 100 100 相符

图 6.3 角色射击测试 图 6.4 角色动作测试

图 6.5 背包界面测试 图 6.6 僵尸 AI 及攻击测试


通过对游戏的功能、性能和画面等方面进行全面的测试,我们得出结论,目前的游
戏是一个实用的游戏。

–42–
基于 U3D 的射击游戏设计与实现

结 论

本文首先探讨了 Unity Engine 构成的手机游戏开发环境,然后对游戏进行了分析、


设计和实现,从当今游戏市场的角度出发,总结了玩家的需求,并确定了游戏的功能和
结构,完成了游戏的功能实现和数据库实现。本游戏的重点在于射击、击杀和生存等方
面。
从项目开发的角度出发,本游戏结合了移动端游戏和射击游戏的特点,采用了软件
工程的思想和 UML 统一建模语言,对游戏进行了分析、设计和实现。
根据当今游戏市场的特点,本游戏注重流畅度和操作性,让玩家在僵尸围攻的情况
下通过使用有限的资源来生存下来。与许多游戏存在的“流畅度不高,操作复杂”的问
题不同,本游戏采用了针对性强的功能模块设计,严格控制资源的流入和流出。
然而,本游戏仍然存在一些不足之处。游戏界面实现相对简单,布局可能不够美观,
还有待改善。在数据传输过程中可能会出现卡顿等问题,需要进行特殊处理。此外,僵
尸种类、枪械种类等信息还不够完善。因此,游戏需要不断丰富和完善。下一步的改进
计划包括完善目前的功能和游戏,提高游戏的效率,美化游戏界面,并增强游戏的功能
和趣味性。
总的来说,本文通过分析、设计和实现,对游戏进行了全面的考虑。尽管游戏仍有
改进的空间,但从目前的实现来看,游戏已经具备实用性,并能满足玩家的需求。未来
的改进将进一步提升游戏的品质和用户体验。

–43–
基于 U3D 的射击游戏设计与实现

参 考 文 献

[1] 沈剑乐,王林章,李宣东,等. 一个基于 UML 顺序图的场景测试用例生成方法[J]. 计算机科


学,2004,31(8):179-184. DOI:10.3969/j.issn.1002-137X.2004.08.054.
[2] 尹心红,江悦妍,左国花,邓加帆,谭修竹,冯静,陈莉.基于 Unity 3D 技术的家庭访视教育游戏设
计与开发[J].电脑知识与技术,2022,18(18):77-79.
[3] 王骏.Unity 引擎下多人在线网络游戏设计及开发[J].电子技术与软件工程,2022,(12):38-41.
[4] 顾笑迎,吴瑨,李硕. 基于 Unity3D 的自引查找工具设计与实现[J]. 图书馆研究与工作,
2022-05-12.
[5] 魏晓菲.基于 Unity 3D 的计算思维教育游戏的设计与开发[D].江西科技师范大学,2022.
[6] 胡 静 , 胡 欣 宇 . 基 于 Unity3D 引 擎 的 游 戏 设 计 与 开 发 [J]. 电 子 元 器 件 与 信 息 技
术,2021,5(02):138-140+154.
[7] 李学剑. 小型移动 APP 开发项目需求管理研究[D]. 山东:山东大学,2017.
[8] 沈士钊. 基于 Unity3D 引擎的三维角色扮演游戏设计与实现[D]. 湖北:华中科技大学,2017.
DOI:10.7666/d.D01542398.
[9] Zhijie Li, Shuangyu Ma, Changhua Li, Xiao Liang, Jie Zhang. Floor Evacuation Simulation
Based on BIM and MR[J]. Journal of System Simulation, 2023, 35(3): 658-669.
[10] ZHANG Chen, HE Biao, GUO Renzhong, MA Ding, CHEN Yebin. A Data Conversion Method from
Oblique Photogrammetric 3D Models to Renderable Assets in Unreal Engine 4[J]. Geomatics
and Information Science of Wuhan University, 2023, 48(4): 514-524.
[11] 孙志鹏. 基于多元组合决策系统的射击游戏设计与实现[D]. 江苏:中国矿业大学,2020.
[12] 网 易 ( 杭 州 ) 网 络 有 限 公 司 . 游 戏 中 图 标 的 处 理 方 法 及 装 置 :CN202010831976.9[P].
2020-10-16.
[13] 陈琦伟. 基于 B/S 构架和工作流 OA 系统的设计与实现[D]. 四川:电子科技大学,2010.
DOI:10.7666/d.D314516.
[14] 杜莹, 孙百才, 巩敦卫. 软件测试路径选择优化模型及其进化求解[N]. 软件学报, 2022,
33(9):3297–3311.
[15] 田翠华,许立灿,彭奕翔,陈施恩,陈玉明.基于 Unity 3D 异星大冒险游戏的设计与开发[J].中国
现代教育装备,2019,(01):6-11.
[16] 区泽宇,李晶,魏菊霞,严道葵,陈灿,许皓然.基于 Unity3D 游戏的设计与开发[J].无线互联科
技,2019,16(23):62-63.
[17] 沈旭,梁进大.基于 Unity3D 的单机竞技游戏设计与开发[J].办公自动化,2018,23(19):47-53.
[18] 陶渊博,杨智,陆熙鹏,孙艳.《诸子百家之薪火相传》RPG 游戏的设计与开发[J].数字技术与应
用,2019,37(02):152-153.
[19] 田冲.基于 Unity3D 技术的路标学习游戏软件的设计与开发研究[D].导师:王兴辉.沈阳师范大
学,2018.

–44–
基于 U3D 的射击游戏设计与实现

[20] Bill Kapralos.Learning about serious game design and development at the K-12
level[J].The International Journal of Information and Learning Technology,2021,38(3).
[21] Mak Hugo Wai Leung,Han Runze,Yin Hoover H F.Application of Variational AutoEncoder (VAE)
Model and Image Processing Approaches in Game Design.[J].Sensors (Basel,
Switzerland),2023,23(7).
[22] Joshua Bycer.Game Design Deep Dive:Role Playing Games[M].CRC Press:2023-05-23.
[23] Sung Yun Kang, Jiang Chengyun, Ki Hong Park, Park Jihong. Design and Implementation
of Basketball Game Content based on Unity Game Engine and Android Platform [J]. Digital
Content Society Paper, 2020, 21 (9).
[24] Adam O. Bebko,Nikolaus F. Troje.Experimental design with Unity Game Engine[J].Journal
of Vision,2020,20(11).
[25] Markus Borg,Daniel Brytting,Daniel Hansson.Enabling Visual Design Verification
Analytics - From Prototype Visualizations to an Analytics Tool using the Unity Game
Engine.[J].CoRR,2018,abs/1808.09767(abs/1808.09767).
[26] 周丕基,廖传艺,杨帮礼,张建平,韦泽波,邓晓晖.基于 Unity 引擎的矿山三维空间辅助管理系统
开发[J].测绘与空间地理信息,2023,46(04):155-157+161.
[27] 方科.VR 内容开发现状以及基于 Unity2021.3+HTC Vive Pro2 的 VR 开发环境配置[J].信息记录
材料,2022,23(10):129-131.
[28] 何小慧,廖晓芳,关韵婷.海豚保卫战 2D 游戏在 Unity3D 下的开发[J].电子技术与软件工
程,2022,(01):61-64.
[29] 王 洋 , 王 元 鸿 , 胡 志 慧 . 基 于 Unity 网 络 游 戏 开 发 技 术 的 研 究 与 实 现 [J]. 科 学 技 术 创
新,2021,(10):95-96.
[30] 郭欣桐.基于 Unity 的休闲益智类游戏设计与开发[J].电子技术与软件工程,2021,(01):34-36.

–45–
基于 U3D 的射击游戏设计与实现

修改记录
一、 毕业论文(设计)题目修改
原题目:基于 U3D 第三人称射击游戏移动端开发
修稿后题目:基于 U3D 的射击游戏设计与实现
二、毕业论文(设计)内容重要修改记录
第二章:从 Unity 技术扩展到 Unity 和 Mono 技术
第三章:把之前的第三章可行性分析和第四章需求分析合并为新第三章需求分析。
第六章:对第六章进行了更为详细的数据测试。
三、毕业论文(设计)外文翻译修改记录
更改了翻译中部分单词,使其表达更通顺,更流畅。对表达不通顺的语句进行了重新
翻译,使其翻译更贴近作者真实意图。
四、毕业论文(设计)正式检测重复比
第一次查重 8.2%,第二次查重 8.1%

–46–
基于 U3D 的射击游戏设计与实现

致 谢

经过两个多月的不懈努力,我终于完成了毕业设计。在这个过程中,我要特别感谢
我的指导老师,他在毕设论文方面给予了我悉心的指导和建议。他的专业知识和经验帮
助我将论文写得更加规范,更符合实际流程。他还对游戏界面和功能提出了宝贵的意见,
使我能够改进和完善游戏的设计。
此外,我也要感谢我的父母,他们在整个毕业设计期间给予了我无条件的支持和理
解。他们是我最坚实的后盾,给予我鼓励和勇气,让我坚持下去并完成这个项目。没有
他们的支持,我无法顺利完成毕业设计。
同时,我还要感谢那些关心我、支持我、在我困难时给予帮助的亲人和朋友们。他
们给予了我鼓舞和激励,让我在完成毕业设计的过程中感到温暖和关怀。他们的存在让
我感到无论遇到什么困难,我都不是孤单一人在战斗。
最后,我要对所有在我毕业设计过程中给予帮助和支持的人表示衷心的感谢。正是
因为有了你们的帮助和支持,我才能够顺利完成这个毕业设计,迈向新的阶段。感谢你
们的陪伴和鼓励,我会倍加珍惜,并以更加努力和进取的态度,迎接未来的挑战。

–47–

You might also like