搜档网
当前位置:搜档网 › Unity3D塔防游戏论文

Unity3D塔防游戏论文

Unity3D塔防游戏论文
Unity3D塔防游戏论文

基于Android平台的塔防游戏设计

Design The Tower Defense Game Based On Android Platform

学生姓名:XX

学生学号:107102XX

专业名称:计算机科学与技术

指导教师:XX(副教授)

计算机与信息工程学院

2014年6月16日

独创性声明

本人声明所呈交的毕业设计(论文)是本人在指导教师指导下进行的研究工作和取得的研究成果,除了文中特别加以引用标注之处外,论文中不包含其他人已经发表或撰写过的研究成果,没有伪造数据的行为。

毕业设计(论文)作者签名:签字日期:2014年6月16日

毕业设计(论文)版权使用授权书

本毕业设计(论文)作者完全了解学校有关保留、使用论文的规定。同意学校保留并向有关管理部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。本人授权天津城建大学可以将本论文的全部或部分内容编入有关数据进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本论文。

(保密的毕业设计(论文)在解密后适用本授权说明)

毕业设计(论文)作者签名:指导教师签名:

签字日期:2014年6月16日签字日期:2014年6月16日

摘要

Android是一种基于Linux的自由及开放源代码的操作系统,Unity3D是最近几年非常热门的一种跨平台能力强的开发引擎,被广大游戏开发者所喜爱。在目前的Android手机应用开发界,Unity几乎成为Android标准工具。

本文将展示一个用Unity软件来设计和开发Android塔防游戏的全过程。按照游戏的开发思路,从相关知识介绍、游戏设计、游戏实现到软件测试一步步展开工作,完成毕业设计的最终作品。本文将讲述的重点放在游戏实现这一环节,从第一个场景建立开始,到模型的导入,讲述脚本的编写等具体细节,直到项目完成;游戏的测试将在Unity3D 软件中,PC上和Android设备上分别进行测试,并分析测试结果。

关键词:Android;Unity;塔防游戏

ABSTRACT

Android is a Linux-based free and open source operating system, Unity3D is very popular in recent years, a cross-platform capability development engine, being loved by the game developers. In the current Android mobile application development circles, Unity has almost become standard Android tools.

This article shows a Unity of the software to the whole process of designing and developing Android Tower Defense game. Along the lines of game development, from relevant knowledge by testing, game design, game achieved step by step work, and completed the graduation design of the final product. The focus of this paper will describe in-game to achieve this step, starting from the first scene to establish, to import the model about details such as script writing, until the project is completed in Unity3D software, the game tests, were done on the PC and on your Android device to test and analyze the test results.

Key words:Application Development;Android;Unity;Tower Defense

目录

第1章绪论 (1)

1.1 选题的目的和意义 (1)

1.2 国内外的发展状况 (1)

1.3 论文组织结构 (2)

第2章3D游戏的技术知识 (3)

2.1 3D图形库 (3)

2.2 物理引擎 (3)

2.2.1 物理引擎简介 (3)

2.2.2 物理引擎基本架构 (4)

2.3 Unity3D (5)

2.3 Unity3D简介 (5)

2.3 Unity3D基本概念 (5)

第3章游戏设计 (7)

3.1 游戏创意 (7)

3.2 游戏框架结构设计 (7)

3.3 游戏层次结构设计 (7)

第4章游戏实现 (9)

4.1 场景渲染实现 (9)

4.2 地形 (9)

4.3 光照和场景元素 (11)

4.4 怪物通道 (12)

4.5 摄像机 (13)

4.6 游戏UI界面 (15)

4.7 路点建设 (18)

4.8 敌人 (20)

4.9 敌人生成器 (21)

4.10 防守单位 (22)

4.11 生命条 (23)

4.12 自定义按钮 (25)

第5章游戏测试 (27)

5.1 在Unity3D中运行测试 (27)

5.2 封装打包测试 (27)

5.3 封装打包测试 (30)

5.4 封装打包测试 (33)

总结 (34)

致谢 (35)

参考文献 (36)

第1章绪论

1.1 选题的目的和意义

这几年,中国经济以8%左右的速度持续平稳的增长,而在刚刚过去的2012年中国游戏市场实际销售收入602.8亿元,同比增长率为35.1%,首次突破600亿规模。游戏产业己经成为经济市场中增长速度最快的热点,是众所关注的焦点。游戏是文化创意产业里的一部分,创意经济是知识经济的核心内容,更是其经济的重要表现形式,没有创意就没有新经济。游戏设计是文化艺术创意和商品生产的结合,游戏产业的发展在中国的经济发展中具有十分重要的意义:

1.可以促进经济发展,拉动就业,带动其它文化产业发展;

2.有利于保护民族的文化传统和价值观,抵制文化入侵;

3.提供健康快乐的大众娱乐方式,提升消费者的休闲体验感受。

与此同时,随着手机等移动设备向着微型PC方向发展,用户对手机应用的要求也越来越高,追求高画质,高可玩性及高流畅性。向3D游戏发展是手机游戏发展的必然趋势。

2D游戏和3D游戏两个阶段是游戏的发展中经历过的。游戏设计,特别是3D游戏开发,综合运用了物理仿真、计算机图形学和网络通讯,并且在这几年得到猛发展的移动平台技术,游戏的发展趋势朝着轻量级、微创新、时间碎片化快速发展,如《愤怒的小鸟》、《顽皮鳄鱼爱洗澡》、《神庙逃亡》的玩家数量都超过了一亿。

选择用Unity3D来完成本毕业设计,不仅是顺应了当前游戏开发的发展趋势,更是对个人技术及能力的一种锻炼。

1.2 国内外的发展状况

90年代初国外的3D游戏开始起步,第一部3D第一人称射击游戏是美国的卡马克的《重返德军总部》,最早3D游戏引擎由其开发的Doom引擎。国内3D游戏始于2003年,首款自主研发,目前,国内有了很多的研究在3D游戏上,但是由于国内3D技术起步较晚,技术方面想比外国还是有不小差距,从设计理念到开发制作,国内能有自主研发的3D游戏引擎的,只有屈指可数的互联网公司,大部分游戏公司和游戏开发者还在用国外大型游戏公司所开发的游戏引擎,如Unity3D,虚幻,寒霜。虽然国内今年出现许多优秀的游戏团队和游戏公司,开发了数款质量较高的3D游戏,例如《古剑奇谭》系列,《仙剑奇侠传》系列等,但是比起《模拟人生》,《魔兽世界》,《战地》系列等国际游戏大作仍有不可逾越的差距,这也使得国内玩家的财富大量流向国外。

随着移动设备的硬件日益强大,如手机的硬件相比于10年前电脑的配置还要强大,这样使用者在使用的时候,就会有大量应用的需求,目前来说,有两种主流的手机操作系统:Android和IOS,这两种操作系统之所以成为主流,就是因为庞大的系统应用在背

后支持,所以,应用的开发在手机系统的竞争中尤为重要。然而应用的跨平台移植会带来大量的问题,例如开发语言不同,移植代价太高等,但是,国外开发的一款游戏引擎完美地解决了跨平台开发难的问题,那就是Unity3D引擎,虚拟机技术被运用到Unity3D 中,独立于平台执行的游戏编译结果。对于3D引擎的研究,在国内还处于起步阶段,所以我们认真研究国外的优秀游戏引擎,对将来自主开发3D游戏引擎有巨大的帮助。1.3 论文组织结构

论文从最初构思到分析实践,结合了专业3D游戏开发资料,进行了一个塔防游戏的设计制作,其中,具体介绍游戏的制作步骤,包括一系列代码的编写和内部结构的链接,论文分为六个部分,安排如下:

第一部分:绪论,主要讲述了制作该毕业设计的背景,以及国内外对相关课题的研究现状以及本设计的大概介绍;

第二部分:介绍了3D游戏的普遍结构以及Unity3D的大致介绍;

第三部分:塔防游戏的创意,游戏系统功能设计;

第四部分:详细介绍游戏的各个部分的制作,清晰明确游戏内部关系,采用由下到上的顺序层层拆析步骤;

第五部分:运行游戏进行测试,打包封装;

第六部分:结论以及游戏的缺陷和今后的改进。

第2章3D游戏的技术知识

2.1 3D图形库

API(Application Programming Interface)函数是编程人员经常调用的一种3D图形库,显卡与应用程序直接的接口定义为Unity3D图形库。从而与之沟通,硬件的驱动程序启动显卡内强大的3D图形处理功能,制作出具有3D的游戏。

非常快速是3D图形库执行具有特点,具有可移植性并且高度的,计算机图形学原理在设计中被严格遵循,符合普通人对3D的和光线等的认知,点、线、面的三维特征需要编程人员用这些API函数定义,用合适的光照,合理的坐标系统和文理贴图再加上一个固定的参照系,就可以形成较为真实的3D场景。其中的API函数定义为独立于任何程序设计语言的一组规范,在特定语言中的实现描述由国际标准化组织来制定。许多三维演示系统都用3D图形库作为三维图形生成和控制的编程接口。

2.2 物理引擎

2.2.1 物理引擎简介

在游戏这项综合应用中中,除了华丽的画面渲染外,作为表现虚拟世界系统内在物理规律的计算是必不可少的。当被模拟的刚体的运动比较简单,可以在一定程度上通过编程或编写脚本来实现,如简单的加速和减速牛顿物理运动。但当模拟比较复杂的物体的碰撞、滚动、滑动或者弹跳的时候,通过编写底层算法会造成工程延误,这显然不符合软件工程的思想。成熟的物理引擎能够允许更复杂的物理模拟,像球形关节、轮子、气缸或者铰链,有些也支持非刚性体的物理属性,比如流体和布料。

物理引擎接受的输入是由外界调用模块传递过来的场景信息以及场景中物体的位置信息。根据调用模块的不同,可能输出三种计算结果:场景与物体以及物体之间是否发生碰撞、碰撞发生的具体位置以及发生碰撞后物体的具体位置,并将计算结果传送给调用模块。如图2-1所示。

图2-1 物理引擎功能示意图

2.2.2 物理引擎基本架构

物理引擎一般分为两个重要部分,即碰撞检测和物理学世界。如图2-2 所示。

图2-2 物理引擎基本架构

碰撞检测模块是物理引擎的核心模块,建立在物理学世界的基础上的。其由初步碰撞检测、精确碰撞检测和精确求交三个基本模块组成,各模块的执行顺序。如图2-3所示。

图2-3 碰撞检测模块流程图

在初始化阶段,碰撞检测模块给虚拟世界每个物体建立包围盒,比较常用的包围盒算法有AABB(Axis-aligned bounding box)、包围球、胶囊体等。逐步求精阶段将整个虚拟世界进行空间划分,主要用到数据结构有八叉树、k-d树和BSP树等。最后再精确求交

模块中使用凸体算法和射线检测算法得到精确的碰撞信息。

2.3 Unity3D

2.3.1 Unity3D简介

Unity3D是由Unity Technologies开发的一款全面整合的专业游戏引擎,其具有的功能使得开发人员可专注于游戏的设计而忽略底层的技术实现,达到快速开发的目的。Unity 类似于Director,Blender game engine, Virtools 或Torque Game Builder等利用交互的图型化开发环境为首要方式的软件其编辑器运行在Windows 和Mac OS X下。其主要的特色有:

图形动力:内部封装了DirectX和OpenGL图形渲染库,并附带一些常用的渲染组件及着色器脚本。

物理仿真:Unity3d不但整合了Nvidia PhysX物理引擎,并在其基础上封装了游戏中常会用到的物理组件,如碰撞体、连接体等。

跨平台性:可发布游戏至Windows、Mac、iOS、Android、Xbox、Wii或PS3平台,也可以利用Unity web player或者Flash插件发布网页游戏,支持Mac和Windows的网页浏览。

资源商城:开发人员可在资源商城中购买其他人开发的资源(代码、模型等),进行高效复用。

资源服务器:Unity资源服务器是一个附加的版本控制的产品,但比起SVN更适合游戏团队中不同职位的人员共同使用(程序、策划、美术)。

性能分析器:引擎中自带一个Profiler分析器,开发人员可在编辑器或者设备连线进行性能分析CPU和GPU不同阶段的效率。

2.3.2 Unity3D基本概念

一个完整的Unity3d程序是由若干个场景(Scene)组合起来的,每个场景中又包含有许多游戏对象(GameObject),每个对象可以具有若干组件(Component),其中的继承自MonoBehavior的脚本组件进行初始化、更新等操作,而我们在场景所看到的内容是由摄像头(Camera)来呈现并控制的。

场景(Scene):场景是Unity3D程序的基本组成单位,任何一个Unity3D程序都是由若干场景组合而成,程序通过脚本在这些场景之间跳转。场景通过场景图的形式组织,场景图实际上是一种树形结构,其中每个节点就是一个游戏对象。对象与对象之间存在父子关系,即当父级对象移动、旋转、缩放时,子级对象也跟着一起变换,如图2-4所示。

图2-4 旋转一个父节点同时它的子节点也跟着旋转

游戏对象(GameObject):在场景中按照场景图形式组织,场景图实际上是一种树形结构,树形层次结构中的节点,加入的特定组件后就成了有实际功能的对象,如可渲染网格、摄像机、光源等,游戏对象可以打包成.prefab格式的文件方便复用。

组件(Component):组件可以是网格(Mesh)、光源(Light)、摄像机(Camera)、粒子系统(Particle)、物理碰撞体(Collider)、布料(Cloth)、连接体(Joint)、声音(Audio)、动画(Animation)以及最重要的脚本(Script)。Unity3D的设计是以面向对象理论为基础,Unity3D支持C#、JavaScript和Boo三种脚本语言,如果对象继承自MonoBehavior脚本对象,生命周期将交给Unity3D来管理,如图2-5所示。

图2-5 MonoBehavior的生命周期

第3章游戏设计

3.1 游戏创意

随着移动硬件设备的日益强大,并且移动平台技术在这几年得到迅猛发展,移动平台上的游戏也出现了惊人的增长,轻量级、微创新、时间碎片化一直是移动游戏的发展趋势。

笔者按照这些思路产生了制作一款新的3D塔防游戏的想法,游戏同样遵从以上三个特点,下面是简单的游戏策划:

游戏名称:《五岳乾坤》

游戏类型:3D塔防益智类游戏

游戏平台:PC、Android

游戏模式:过关模式

游戏玩法:玩家有初始经济10,可以在开始建立两个防御塔,怪物进入路线后,一旦进入防御塔的攻击范围,会被防御塔攻击,直到怪物血量减少到0,每死亡一个怪物,经济会加2,这样,可以继续建造防御塔。每一波结束后,下一波怪物会比上一波怪物的血量更多,这就需要建造更多防御塔。

游戏操作:鼠标前后拖动来查看地图各个地点,点击防御塔建造按钮然后点击空地可以建造防御塔。

3.2 游戏框架结构设计

如前文所述,一个游戏包含多个场景,玩家根据当前的游戏进度和选项进入不同场景。而游戏模块为游戏提供了一些必须用到的功能,这些功能,都是完全独立与所有的场景存在的,它们并不知道到底有多少关卡,关卡的内容是什么,它们的主要工作,就是与游戏的控制单元进行信息的交换,从而支持游戏的进行。

塔防游戏没有复杂的游戏系统,更加侧重于游戏可玩性的设计,并且由于使用Unity3D引擎,省去了许多底层模块的设计,其中核心的模块为:图形渲染、物理仿真。

3.3 游戏层次结构设计

前文提到Unity3D中每个场景按照树形层次结构组织游戏对象,并且每个游戏对象可以拥有若干组件。所以整个游戏系统的实现必须遵守这种规范,在这种规范下为了符合软件设计的高内聚、低耦合的原则,使用MVC模型设计了一套游戏的层次结构,这样的好处是使游戏的结构清晰简单,三层之间互相隔离、互不影响,日后功能的扩展方便。如图3-1所示。

图3-1 游戏层次结构图

游戏系统分为三个层来设计,分别是:

视图层:主要为加入到场景层次结构的游戏对象,这些对象常常是渲染对象或摄像机。

控制层:在主摄像机或者空对象中加入的管理脚本组件,这些脚本主要是针对对应的功能模块的进行控制及与其他功能模块进行通信,如界面管理类、网络联机管理类。

模型层:主要是在渲染对象中加入的逻辑脚本组件,这些脚本对游戏对象进行逻辑处理。

第4章 游戏实现

4.1 场景渲染实现

考虑到游戏的需求,整个场景主要包括几类渲染对象,如天空盒、水面、地形、外部导入的3D 模型、投影、粒子系统等,如图4-1所示。

图4-1 游戏场景中的渲染对象

下面主要介绍一些重要渲染模块的具体实现。

4.2 地形

塔防游戏的场景通常比较简单,就像一个棋盘格,可以在上面摆放防守单位,专门留给敌人一条通道。在这个实例中,我们使用二维数组来点示场放中的格子, 每个格只有两种状态,允许摆放防守单位或不允许。

在Unity3D 中通过高度图来实现地形,高度图实际上是一张矩形的灰度图,在灰度模式中,颜色通过0~255来表示,0代表黑色,255代表白色,像素越亮代表地势越高,255的像素代表此次顶点最高,反之亦然,所以像素灰度值和顶点的高度可以用公式 (1) 表示。其中L 为像素的灰度值,height y 、min y 分别为Unity3D 中定义的地形高度和地形最低点,求得网格顶点的高度y.

min 255y y L y height

+?= (1)

程序在需要渲染地形时通过读取这张图片,并按照灰度生成顶点高度不一的矩形网格。这样大大减少了游戏模型体积。

Unity3D 中的地形模块不但可以导入高度图,还可以用笔刷为绘制地形纹理、树、草和岩石,所见即所得,大大减少了开发人员的工作量。

在新建了一个Project 之后,我习惯于先创建几个文件夹,用来存放做游戏所需要的所有素材,如:Gizmos,Materials,Scene,Script 等,其中Gizmos 用来存放贴图,Materials 用来存放材质,Scene 用来存放场景,Script 用来存放脚本。

保存第一个场景,放在Scene中,命名为demo,此时场景中为空,在GameObject中Create Other一个地形Terrain,如图4-2所示。

图4-2 创建地形

在旁边的组建面板就可看到如下工具,如图4-3所示。

图4-3 组建面板

通过组建面板的Terrain组建,可以用地面升降,地面模糊,地图画笔等等工具对地图进行编辑。进行一系列的修饰后,原本空白的地图上就会有塔防游戏的基本地图样式,如图4-4所示。

图4-4 地图

4.3 光照和场景元素

在创建好地图之后会发现地图灰暗,当点击运行时候,会显示地图区域为黑色,这是因为场景中没有光源,此时我在场景中按添加地形的方式添加一个平行光源,如图4-5

所示。

图4-5 平行光源

同样可通过调整光源组建面板中的Intensity来调整光的强弱,可从图4-5中看出,添

加光源过后明显使得地图光亮了。

接下来添加场景中的元素,例如树,终点,装饰等等,通过Assets中的Import Package

选项来导入我需要的素材所有的素材我将它们放在预置Prefabs文件夹中,这样可以方便

重复使用,既节约了硬件资源又大量降低了我的重复劳动,如图4-6所示。在元素等放

置完毕后,地图就做好了。

图4-6 预置元素

4.4 怪物通道

塔防游戏需要怪物沿着固定的路线前进,路线中不允许放置防御塔,路线之外可以放置,这就需要用脚本对地图进行编辑。

首先,创建脚本GridNode.cs,代码如下图4-7所示。

图4-7 脚本GridNode.cs

这个脚本把地图上的方格会设置两种属性,一种是可以放置防御塔GuardPosition另一种就是不允许放置防御塔CanNotStand。

接下来将地图设置方格,创建GridMap.cs脚本,它会生成一个范围可控的网格,将地图盖住,当BuildMap被执行时,网格将在地图上显示出来,此时,如果网格上有物体挂载了GridNode.cs脚本,并设定为CanNotStand时,物体覆盖的网格将变为红色,同时运行时不可在此区域建造防御塔。

在场景中创建空物体,并挂载GridNode.cs同时设置为CanNotStand,摆放在地图中通道上,这样就可以使通道无法建造防御塔了。如图4-8所示。

图4-8 设置方格属性

4.5 摄像机

因为游戏的场景会比较大,我们需要移动摄像机才能观察到场景的各个部分。接下来需要为摄像机添加脚本,在移动鼠标的时候可以移动摄像机。

在为摄像机创建脚本前我们需要先创建一个空游戏体作为摄像机观察的目标点,并为其创建脚本CameraPoint.cs,它只有很少的代码。如图4-9所示。

图4-9 脚本CameraPoint.cs

接下来创建脚本GameCamera.cs,并将其指定给场景中的摄像机。

图4-10 脚本GameCamera.cs

在这个脚本的Start 函数中, 我们首先获得了前面创建的CameraPoint ,它将作为摄

相关主题