摘要 I
Abstract Ⅱ
1 前言 1
1.1 研究背景及意义 1
1.2 研究现状 1
2 开发环境与开发技术 3
2.1 开发环境 3
2.1.1 软件环境具体介绍 3
2.2 开发技术 5
2.2.1 C#开发语言 5
2.2.2 数据结构 5
2.2.3 设计模式 5
3 系统分析 6
3.1 可行性分析 6
3.2 需求分析 6
3.2.1 功能需求 6
3.2.2 运行需求 7
4 游戏设计 7
4.1 游戏介绍 7
4.2 设计原则与要求 8
4.3 游戏界面 8
4.4 功能模块 8
5 各功能软件设计 9
5.1 关卡设计 10
5.2 商店 12
5.3 暂停 13
5.4 防御塔的放置升级与出售 13
5.5 防御塔的攻击 14
5.6 敌人的产生与自动寻路 15
5.7 技能 16
5.8 防御塔的第一人称控制攻击 17
5.9 能量与生命 18
6测试与分析 18
6.1 游戏测试理论基础 18
6.2 游戏测试目的 19
6.3 游戏测试用例 19
6.4 游戏测试效果图 20
7 结论 23
参考文献 24
致谢 25
摘 要:近些年来,网络的高速发展给现在的人们带来了许多的便利与别样的娱乐方式,而网络游戏作为一种非常受人们喜爱的娱乐方式,已经进入了越来越多的人的日常生活,与此同时游戏也可以带来可观的经济价值。塔防游戏与FPS游戏都是当下主流的游戏玩法,这2种玩法凭借多样的游戏模式与超高的游戏体验始终保有相当数量的玩家。
本次游戏开发运用Unity3d游戏引擎,使用C#语言开发,Unity3d游戏引擎是一种便捷并且可视化的游戏引擎,C#语言是一种安全的、稳定的面向对象的编程语言,根据游戏需求完成不同的功能,如防御塔建造、防御塔攻击、商店等,通过第一人称方式控制防御塔实现FPS元素与塔防模式的结合。游戏操作简单易上手,可以通过手动控制防御塔体会FPS游戏身临其境的感觉。
关键词:FPS游戏;塔防游戏;Unity3d;C#
The Design of FPS and Tower Defense Based on the Unity3d
Abstract:In recent years, the rapid development of the Internet has brought a lot of convenience and other entertainment to people who want to be present. As a popular way of entertainment, online games have entered more and more people’s daily life. At the same time, games can also bring considerable economic value. Tower defense game and FPS game are the mainstream game playing methods at present. These two kinds of playing methods always keep a considerable number of loyal players with a variety of game modes and super high game experience.
This game development using unity3d game engine, using C# language to develop, unity3d game engine is a visual and convenient game engine, C# language is a safe and stable object-oriented programming language, according to the needs of the game to complete different functions, such as defense tower construction, defense tower attack, store, through the first person control of the defense tower to achieve FPS elements and towers Combination of defense modes. The operation of the game is simple and easy to use. You can experience the experience of FPS game through manual control of the defense tower.
Keywords: FPS Games;Tower Defensee Games;Unity3d;C#
1 前 言
1.1 研究背景及意义
近些年来,伴随着科技水平的不断提高,移动端设备也在的不断发展,娱乐在人们的生活中越来越重要,游戏也随之迅速发展受到大家的青睐。在人们生活日益富足的现在,除物质需求之外,精神需求日益增加,对于娱乐项目的要求越来越高,以此游戏产业迅速发展,而游戏产业的发展除了能够提高游戏质量促进技术的提高外,还可以为整个社会提供巨大的经济效益。
本次设计是将FPS元素与塔防游戏相结合完成一种区别于传统塔防玩法的游戏,Fps游戏,第一人称射击游戏,就是以游戏玩家的第一人称视角来进行游玩的一种射击类型的游戏。玩家们不仅仅和其他种类的的游戏一样只是单纯控制游戏中的虚拟角色来进行游玩,还会给玩家带来更多的视觉冲击,也会产生身临其境的感受,极大增强了玩家游玩时的真实感,给玩家才来其他种类游戏感受不到的沉浸感。塔防,炮塔防御的简称。虽然塔防游戏从来没有过成为过真正的主流游戏,但是它作为一个非常经典的休闲游戏类别,依赖与老少皆宜的轻松玩法,一直受到了相当一部分人的喜爱,从产生到如今已经经历了二十多年。游戏玩法必然是要发展的,纵观最近几年的爆款游戏,无一是遵循传统,每一款都有其独特的特点,在玩法上、类别上进行不同程度的融合,使得游戏内容更加丰富,玩家的游戏体验更加充实,游戏才会受到欢迎。
1.2 研究现状
世界上的第一台电子游戏机出现在上个世纪的七十年代。在1971年的美国,一个在美国麻省理工学院的叫NolanBushnell的人创造了世界上第一个专用游戏机,这个游戏机搭载了一款游戏,它的主要玩法是两个对立的玩家互相对抗,两者各自控制一台星际战舰向对方发动攻击,这两台战舰还会受到来自星球的引力影响,最终活下来的才是胜利者。这个游戏的名字叫做《ComputerSpace》,虽然这个游戏最终却失败了,不过它却使得电子游戏第一次进入公众的视野。
自此之后,游戏产业逐步发展,一直到今天游戏产业依然火爆。Fps游戏,第一人称射击游戏,就是玩家以第一视角来进行控制游玩的一种射击类型游戏。玩家们在游玩体验中不再像别的游戏一样只是单纯的控制游戏中的虚拟角色来进行游玩,更会身临其境的体验游戏所带来的奇妙感受,给玩家带来其余种类的游戏感受不到的别样的沉浸感,大大增强了游戏的真实性与主动性。最早的FPS游戏雏形可以追溯到20世纪的80年代,当时在街机上大热的Battle Zone被移植到了当年的计算机上,虽然只有寥寥几条线就构成了全部的游戏画面,但对于当时的计算机来说却也是意义非凡,而FPS游戏到了今天,依然有许多游戏都取得了巨大成功。如《守望先锋》,这是暴雪娱乐公司在四年前开发并发售的一款将MOBA 、FPS两者的特点进行了全新的融合的新游戏,以玩家组队对抗为主,采用FPS的模式相互战斗,有6VS6、3VS3、1VS1等不同的模式,不同模式具有不同的胜利条件与不同的队伍人数,由于引入了MOBA游戏中的英雄机制,游戏开始之前每个玩家都需要选择各自要使用的英雄,各个英雄相互配合使游戏产生了更多变数,玩家的不同配合也使得游戏产生了许许多多不同的玩法[1]。塔防,虽然自诞生起就一直受到了人们的喜爱,但是也从来也没有过成为过真正的主流游戏,不过老少皆宜的休闲特新也使得其一直受让人们的喜爱,传统的塔防游戏一直都是单纯的使用防御塔防御来自敌人的攻击。不过,随着当前整个游戏行业在游戏玩法上的探索与创新,传统的塔防类玩法的游戏也迎来了又一个春天,一些更多样的塔防游戏开始问世,如《部落冲突》,这是一个区别于传统塔防类型游戏的一款具有变化玩法的游戏,在游戏中,在一定范围内都可以派遣小兵,小兵的出生点并非固定,只要玩家的资源充足,可以一次性召集很多数量的小兵,只是需要消耗更多的资源,游戏中有很多种兵种,也有很多的进攻方式,在面对一些独特的防御类型时,需要选择相对应的战术、派遣不同类别不同数量的小兵才能获得胜利,在防御和进攻两个方面,玩家都要牢牢掌握技巧[2]。
2 开发环境与开发技术
2.1 开发环境
本次游戏设计开发环境分为硬件环境和软件环境。
硬件环境:一台内存不小于4G,硬盘内存不小于128G,中央处理器(CPU)大于3HZ的电脑。
软件环境:游戏引擎:Unity3d引擎,编译系统:Visual Studio 2017,Windows系统:WIN10。
2.1.1 软件环境
1.Unity3d引擎系统:
Unity3d由Unity Technologies公司开发,是一个功能完整的专业的游戏引擎,可以进行多平台的可视化的游戏开发,它可以让开发者轻松的创造出如三维的游戏与三维动画等,使游戏开发变得简单且轻松[3]。
引擎特色详细介绍:
(1) 综合编辑:Unity 3d 拥有可视化编辑的特性,在它的用户界面中可以进行动态的游戏预览、属性的编辑与视觉化编辑。Unity 3d的可视化编辑在使得游戏开发者更加便捷且轻松的同时,还可以在游戏运行的同时实时修改各个参数的数值,方便对游戏的参数进行调整,可以同时查看游戏在各个不同的参数条件下的不同运行情况,为游戏开发节省了大量的时间[4]。
(2) 资源导入:Unity3d也支持几乎全部的主流的三维格式,例如3dsMax、Maya等,贴图材质还可以进行自动转换,转换后为U3D格式,它可以与大部分相关的应用程序进行协调工作。Unity3d可以自动导入各种资源,还可以根据资源的不同改动进行自动的更新。
(3) 脚本语言:本次开发会使用C#进行开发,C#是在游戏开发中经常使用的脚本语言,也是Unity3d支持的三种不同的脚本语言:C#、JavaScript 和 Boo中的一种。
(4) 地形编辑器:Unity 3d 引擎中内置了一个用于创建地形的系统,此系统支持自动的地形LOD与水面的特效,也可以很方便的创建各种各样的复杂的地形,以满足开发者的不同需要,并且还支持树木与植被贴片[5],能够满足游戏场景中各种不同的需求。
(5) 物理特效:Unity3d中内置了英伟达的PhysX物理引擎,物理引擎是进行物理模拟的计算机程序,使用了质量、速度、空气阻力还有摩擦力等变量。通过这个物理引擎,游戏开发者可以重现并模拟现实世界中的许多物理效果[6],例如碰撞检测、重力效果、弹簧效果等等。
(6) 光影:Unity3d提供了拥有柔和的阴影以及非常逼真的烘焙效果的光影渲染系统[7]。
引擎功能如图2.1所示。
2.Visual Studio 2017:
美国微软公司的开发工具包系列产品。Visual Studio是Windows平台里在当前前最多人使用的的一种应用程序的集成开发环境,是一个很完整的开发工具集。在Visual Studio中其中包含了开发者在整个软件生命周期中需要使用到的大部分的工具,例如代码管控、集成开发环境与UML等等。
2.2 开发技术
2.2.1 C#开发语言
C#是微软公司发布的一种拥有稳定、安全、简单等的特点的一门编程语言,是一个在.NET Core与.NET Framewor上面运行的并且拥有面向对象的特性的高级程序设计语言。它是由C++和C衍生出来的拥有面向对象特性的一种编程语言,在去掉了一些C与C++原本拥有的一些复杂的特性的同时,也继承了C++与C的许多强大功能[8]。C#看起来与Java有着很多的共通之处:包括了如接口、单一继承,还有较为相似的语法和使用中间代码编译的过程[9],但是他们两者之间也有着较为明显的不同点,如:与组件对象模型直接集成,这也是Delphi的一个特点,并且C#还是微软公司.NET windows网络框架中的主角。
2.2.2 数据结构
数据结构是一种数据元素的集合,并且带有结构特性。它研究的是数据之间的相互联系,还有数据的的逻辑与物理结构,并且对这种结构定义相适应的运算,设计出相对应的算法,并且保证经过这些运算以后所得到的新结构仍然可以保持原来的结构类型,是相互之间存在一种或多种特定关系的数据元素的集合。“结构”就是指各个数据元素之间存在的关系,分为逻辑结构和存储结构。
数据结构主要是研究构造复杂软件系统的基础,它的核心技术就是是分解与抽象。通过分解可以分解出数据的三个层次,再通过抽象,舍弃数据元素的具体内容,得到逻辑结构。类似地,通过分解将处理要求划分成为各种功能,再通过抽象舍弃实现细节,就得到运算的定义。上述两个方面的结合可以将问题变换为数据结构。这是一个从具体即具体问题到抽象即数据结构的一个过程。然后,再通过增加对实现细节的考虑进一步得到存储结构和实现运算,从而完成设计任务。这是一个从抽象即数据结构到具体即具体实现的过程[10]。
2.2.3 设计模式
设计模式,是一套很多人知道的、被反复使用的、经过分类编目的代码设计经验的总结。使用设计模式是为了让代码更容易被他人理解,并可以被重用,保证程序的重用性、代码可靠性。是对面向对象的设计中反复出现的问题的解决方案[11]。
3 系统分析
3.1 可行性分析
塔防游戏是集益智、休闲与娱乐于一体的游戏玩法,而FPS则是即时控制的第一人称攻击玩法,更改其攻击模式与UI界面可实现防御塔自动攻击方式更改为为玩家手动控制,因此本设计将FPS与塔防相结合具有可行性。本次游戏开发使用的Unity3d引擎以及Visual Studio 2017均可在网络上免费下载并使用。Unity3d引擎操作简单、功能强大,亦深受许多游戏公司喜爱,使用其开发出各种游戏,所以在技术上是完全可行的。
3.2 需求分析
3.2.1 功能需求
此次游戏开发是将FPS元素融合进塔防游戏当中,同时需要保证游戏完整性、稳定性。所以本次开发设计了以下功能:关卡选择、商店、暂停、防御塔的放置升级与摧毁、防御塔的攻击、敌人的产生与自动寻路、技能、防御塔的第一人称控制攻击、能量与生命。
(1)关卡选择:游戏总共3个关卡,通过前一关方可进入下一关;
(2)商店:在商店中购买防御塔;
(3)暂停:在游戏中可随时暂停游戏;
(4)防御塔的放置升级与摧毁:在商店中购买防御塔后可将其放置在塔基上,在塔基上的防御塔可以升级、摧毁;
(5)防御塔的攻击:防御塔会自动攻击其攻击范围内的敌人,并可以选择防御塔的攻击模式;
(6)敌人的产生与自动寻路:每个关卡都会有一个出生点,敌人会在出生点产生,而后通过自动寻路走向终点;
(7)技能:游戏共设置3种技能,分别可实现不同效果;
(8)防御塔的第一人称控制攻击:攻击防御塔可以进行第一人称控制,可使用第一人称的方式控制防御塔攻击;
(9)能量与生命:游戏初始设定一定的能量与生命,能量用于防御塔的购买与技能的使用,生命关乎游戏的胜利与失败,当生命值为0时游戏即失败。
3.2.2 运行需求
为了使得游戏运行更加流畅,并且减少资源消耗,所以本次开发使用了对象池、异步加载、单例模式、观察者模式对游戏进行设计。
(1)对象池:对游戏中需要频繁创建与销毁的物品使用字典进行管理,初次创建物品时将其加入字典中,需要销毁时将其隐藏而不是直接销毁,再次需要时从寻找字典中已有的并取消其隐藏[12];
(2)异步加载:关卡场景加载所需时间较长,因此在进入关卡场景时使用异步加载加载场景,加载过程中进入一个加载场景中,在加载场景中显示当前关卡加载进度[13];
(3)单例模式:为了保证某些工具类与功能类只有一个实例,使用单例模式控制其实例;
(4)观察者模式:在防御塔的建造、技能的使用等功能中使用观察者模式,在观察者与被观察者之间创建一个抽象的耦合,便于代码的修改、扩展。
4 游戏设计
4.1 游戏介绍
本次设计是基于Unity3d引擎开发的一款融合了FPS元素的塔防类型游戏,可以在PC上运行。拥有完整的UI界面、完整的塔防基本功能、融合了FPS元素,操作简单,规则明了。
通过防御塔攻击敌人,使敌人不能进入终点,若有一定数量的敌人进入终点则游戏失败,反之当敌人全部被击败后游戏胜利[14]。
4.2 设计原则与要求
1.命名统一且规范,顾名思义、通俗易懂;
2.运用面向对象的思想完成设计;
3.游戏流畅运行,UI完整;
4.3 游戏界面
游戏拥有完整的UI界面如:开始界面、主界面,各种UI界面分别对应各种功能,实现游戏的各种逻辑。本次游戏UI界面关系图如图4.1所示。
图4.1 UI界面关系图
4.4 功能模块
本次设计中共有7个功能模块:设置模块、敌人模块、关卡选择模块、技能模块、防御塔模块、商店模块能量生命模块,这些模块之间是密切联系的,本次设计的模块结构图如图4.2所示。
5 各功能软件设计
本次游戏设计主要是以传统的塔防玩法为基础,在其中加入FPS元素,主要的功能包括传统塔防的基本功能,再加入防御塔的第一人称攻击方式、不同的防御塔攻击模式与全局技能。主要功能如下:
(1)关卡选择:游戏总共3个关卡,通过前一关方可进入下一关;
(2)商店:在商店中购买防御塔;
(3)暂停:在游戏中可随时暂停游戏;
(4)防御塔的放置升级与摧毁:在商店中购买防御塔后可将其放置在塔基上,在塔基上的防御塔可以升级、摧毁;
(5)防御塔的攻击:防御塔会自动攻击其攻击范围内的敌人,并可以选择防御塔的攻击模式;
(6)敌人的产生与自动寻路:每个关卡都会有一个出生点,敌人会在出生点产生,而后通过自动寻路走向终点;
(7)技能:游戏共设置4种技能,分别可实现不同效果;
(8)防御塔的第一人称控制攻击:攻击防御塔可以进行第一人称控制,可使用第一人称的方式控制防御塔攻击;
(9)能量与生命:游戏初始设定一定的能量与生命,能量用于防御塔的购买与技能的使用,生命关乎游戏的胜利与失败,当生命值为0时游戏即失败。
5.1 关卡选择
进入游戏是默认关卡为第一关,游戏总共3关,通过上一个关卡方能进入下一个关卡。点击开始按钮进入关卡选择界面,点击设置按钮进入设置界面,点击退出按钮退出游戏。开始界面如图5.1所示。
关卡选择界面如图5.2所示。
关卡选择代码如下:
(1)异步加载:
IEnumerator LoadingScene()
{
operation = SceneManager.LoadSceneAsync(“no” + scenceNum);
operation.allowSceneActivation = false;//防止加载到0.9时自动跳转
yield return operation;//当异步加载完成后
}
(2)异步加载进度:
if (loadingBar.value != targetValue)
{
loadingBar.value = Mathf.Lerp(loadingBar.value,
targetValue, Time.deltaTime * loadingSpeed);
//相差0.1f等同与targetvalue
if (Mathf.Abs(loadingBar.value - targetValue) <= 0.1f)
{
loadingBar.value = targetValue;
}
}
int value = Mathf.FloorToInt(loadingBar.value * 100);
(3)关卡跳转:
if (100 == value)//当value达到100时,允许自动跳转
{
operation.allowSceneActivation = true;
.。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。
全部论文下载地址链接:点击下载》》》