搜档网
当前位置:搜档网 › unity3d塔防游戏的设计与实现 大学论文

unity3d塔防游戏的设计与实现 大学论文

unity3d塔防游戏的设计与实现  大学论文
unity3d塔防游戏的设计与实现  大学论文

江海职业技术学院

毕业设计

毕业设计题目:unity3D塔防游戏的设计与实现

学生学号: 141010155 学生姓名:踪训军

所在系(部):信息工程系

专业及班级:计算机1401 指导教师:谭程宏

完成日期: 2017-02-10

摘要游戏,目前已经是最大众化的娱乐之一。Unity是这几年非常热门的一种开发引擎之一。它具有非常强力的跨平台能力,其中还包含了图形、音频、物理系统、网络等多方面的引擎支持,是一个2D、3D游戏引擎套件和游戏开发工具,并且有一个非常强大的编辑器来整合这一切,因此被广大游戏开发者所喜爱。

本次毕业设计,围绕手机游戏开发的实现,利用Unity3D游戏开发工具,基于C#语言编写,开发制作一款手机游戏塔防游戏《突破重围》,并对项目需求及游戏的设计和具体实现进行分析。

关键词塔防,手机游戏,Unity3D,Android

目录

第1章绪论 (5)

1.1论文结构安排 (5)

1.2市场需求分析 (6)

1.3项目的简介 (6)

第2章unity3D介绍 (6)

2.1 Unity3D总体概述 (6)

2.2 Unity3D软件特色 (7)

第3章游戏概要设计 (8)

3.1整体游戏需求 (8)

3.2游戏截图 (9)

3.3 设计概要 (10)

3.4游戏类图 (11)

3.5游戏流程图 (12)

3.6游戏主要功能设计 (14)

3.6.1开场插画 (14)

3.6.2选关界面的效果 (14)

3.6.3模型动画的切换 (14)

3.6.4敌人的AI实现 (15)

3.6.5释放技能特效的实现 (17)

3.6.6主角的行走路线 (17)

3.6.7游戏中的碰撞检测 (18)

第4章游戏具体实现 (18)

4.1程序实现 (19)

4.1.1 Emnimy (19)

4.1.2 Player (20)

4.1.3 GameControl (21)

4.1.4 Level (22)

4.1.5 MainMenu (23)

4.1.6 Moneydate (24)

4.1.7 SkillData (25)

4.1.8 SkillManger (26)

第5章结论 (29)

参考文献 (30)

致谢 (30)

第1章绪论

1.1论文结构安排1。1节可以放在绪论的最后

本论文共有五章。结构安排如下:

第一章:对游戏开发架构的背景,及项目和对市场的需求分析进行了简要介绍。

第二章:unity3D介绍

第三章:《突破重围》游戏的概要设计和游戏主要功能设计的简介。

第四章:《突破重围》游戏类的详细实现,对游戏架构中各个部分涉及到的相关知识进行介绍,然后给出设计的思路,最后给出具体实现。

第五章:总结本次游戏的实现过程。

这个和你上面的目录对吗?

1.2市场需求分析与意义

90年代初国外的3D游戏开始起步,第一部3D第一人称射击游戏是美国的卡马克的《重返德军总部》,最早3D游戏引擎由其开发的Doom引擎。国内3D游戏始于2003年,首款自主研发,目前,国内有了很多的研究在3D游戏上,但是由于国内3D技术起步较晚,技术方面想比外国还是有不小差距,从设计理念到开发制作,国内能有自主研发的3D游戏引擎的,只有屈指可数的互联网公司,大部分游戏公司和游戏开发者还在用国外大型游戏公司所开发的游戏引擎,如Unity3D,虚幻,寒霜。虽然国内今年出现许多优秀的游戏团队和游戏公司,开发了数款质量较高的3D游戏,例如《古剑奇谭》系列,《仙剑奇侠传》系列等,但是比起《模拟人生》,《魔兽世界》,《战地》系列等国际游戏大作仍有不可逾越的差距,这也使得国内玩家的财富大量流向国外。随着移动设备的硬件日益强大,如手机的硬件相比于10年前电脑的配置还要强大,这样使用者在使用的时候,就会有大量应用的需求,目前来说,有两种主流的手机操作系统:Android和IOS,这两种操作系统之所以成为主

流,就是因为庞大的系统应用在背后支持,所以,应用的开发在手机系统的竞争中尤为重要。然而应用的跨平台移植会带来大量的问题,例如开发语言不同,移植代价太高等,但是,国外开发的一款游戏引擎完美地解决了跨平台开发难的问题,那就是Unity3D引擎,虚拟机技术被运用到Unity3D中,独立于平台执行的游戏编译结果。对于3D引擎的研究,在国内还处于起步阶段,所以我们认真研究国外的优秀游戏引擎,对将来自主开发3D游戏引擎有巨大的帮助。。随着移动智能设备的快速普及,先后有BAT等互联网巨头的加入与PC端游厂商的转型或设立移动游戏研发部门,进军移动游戏市场,争先恐后来分这块大蛋糕,可说现阶段国内移动游戏市场竞争十分激烈,正处于一片红海,然而2017年对移动游戏市场来说也正是进入黄金时代的开始。

这块你全面复制粘贴了?自己精简一下,突出引用Unity3D的意义与优势。

1.3项目的简介

本论文主要构思为2D类塔防游戏,传统的塔防都是电脑按照一条既定的路线进攻,玩家也只是单纯防守的模式,而本论文设计开发的这款游戏则是电脑防守、玩家进攻的模式。同时,玩家有大量新技能可以使用,

下面的,你自己在组织下自己的语言,参照语文的语句标准。

操作方式也参照其他流行游戏,例如《天天过马路》那种简单操作的设计理念,玩家只要点击手机屏幕就可以控制。游戏的平台为安卓。通过Unity3D游戏开发工具以及NGUI插件工具,基本上实现了整个游戏的制作。利用C#语言和Mono Development编译工具,编写各个脚本代码,让游戏的各项操作跟游戏中的碰撞效果、NGUI界面、粒子特效都得以实现。

第2章unity3D介绍

1.2 Unity3D的介绍

1.2.1 Unity3D总体概述

Unity3D是由丹麦Unity公司开发的游戏设计开发工具,拥有强大的跨平台发布能力,支持多种语言编辑,可开发运行在PC、Mac OS、PS3、XBox360、Wii、IOS、Android等平台,也可利用Unity Web player插件发布网页游戏,以及支持开发线上游戏(网络游戏),是一个全面整合的专业游戏引擎。Unity3D提供了容易上手的操作界面,支持PhysX物理引擎、粒子系统等,降低了游戏开发的门槛,缩短了游戏开发的时间以及制作成本。Unity简单直观的设计界面、高度的兼容性,使得游戏设计开发者能高效地完成工作。因此,Unity成了目前国内很多游戏开发者和VR开发者的首选工具之一。分层次写

1.2.2 Unity3D软件特色

写这些特色前要先综合一小段。你写的Unity 3D的特点,不要写本游戏中用到的啥啥的,如果真要写,可以放到后面第三章等。

综合编辑:通过Unity简单的用户界面,用户可以完成任何工作,这些为用户节省了大量的时间。在本论文中的游戏编程过程中,可以整体对每一个界面进行编辑,节约了一个一个打开每个界面的时间,并且程序可以在界面中共享,节约了大量的相同程序重复编辑使用的时间,提高了整体的效率。

资源导入:Unity支持所有主要文件格式,并能和大部分相关应用程序协同工作。本游戏中使用的JPEG格式的图片可以尽数导入Unity3D中进行编辑,对于游戏的整体实现十分有利。

一键部署:Unity可以让作品在多平台呈现。利用File选项中的Build Setting功能,可以选择平台来发布游戏,可供选择的方案十分齐全,完成的作品可以发布到Windows、Android、IOS平台等,对于本次毕业设计的要

求——发布到移动平台上,Unity3D更是可以完全满足需求。

iPhone以及Android发布:Unity让革命性的游戏开发降临革命性的设备。这正是我们这次毕业设计的核心,移动平台的发布可以满足更多群体的需求,这也是为什么采用Unity3D作为本次毕业设计核心软件的原因。

音频和视频:实时三维图形混合音频流、视频流。在本游戏中,我在主界面内添加了声音控件,以达到使本游戏更具吸引力的效果。

脚本:Unity支持3种脚本语言:JavaScript,C#,Boo。本次游戏的设计,编程主要使用到了C#语言,Unity3D对于C#语言的支持使得程序的制作者可以尽可能地完成所需功能的设计以及实现。

Unity资源服务器:Unity资源服务器是一个附加的包括版本控制的产品。

文档:Unity可以提供逐步的指导、文档和实例方案。在编辑过程中遇到问题时,可以对所需知识寻求帮助,这一点对本次毕业设计帮助很大。因为本身对于Unity3D这款软件的认识有限,所以当有指导、文档和实例方案作为参考后,编程的过程更轻松了,通过借鉴Unity3D自带的实例能找到可以触类旁通的编程设计方法。

拖动操作:Unity3D软件中大部分的操作都可用拖动操作来实现,使Unity3D 包、模型、字体、图片等资源的导入步骤变得非常简单,只需要将资源拖入到相应的位置便可以实现导入,简化了操作,节约了时间,提高了开发的效率。

第3章游戏概要设计

3.1整体游戏设计

先要描写你游戏的情节,让不懂的人看了就明白。

《突破重围》游戏是基于安卓平台的一款手机游戏,主要完成游戏功能如下:这句话别扭吗?

1、敌人的AI

敌人一共有4个状态:观望状态、巡逻状态、攻击状态、死亡状态,每个状态间的转化都是用UNITY里的Animation系统的状态机去改变。

2、玩家的技能

玩家一个有8个技能:疾跑、坚韧、隐身、命运、治疗、伪装、先发制人、

赌博,每个技能在每个关卡只能使用一次。

3、玩家的移动

为了简化玩家的操作,所以只要触摸屏幕就可以实现移动。

4、各个UI界面的实现

游戏的UI界面有:开场插画界面、主界面、设置界面、选关界面、加载界面、失败界面。

3 . 2游戏截图

下面这些图片务必要跟在你的某一个段下面,你自己可以看看别人的论文样式!!!

图2-1 游戏开场动画界面

图2-2 游戏主界面画面

图2-3游戏选关画面

图2-4 loading界面

图2-5 游戏画面

3.3 设计概要就是故事描述吗?如果是,请按我的要求和上面合并

在主场景(主画面)中,有4个按钮,分别是开始游戏、继续游戏、游戏说明、退出游戏,通过“开始游戏”按钮进入选关界面,按下按钮选择关卡后进入相应的场景中,通过“继续游戏”可以进入之前的关卡,“游戏说明”界面是介绍游戏的操作方法,在场景中按下“返回键”返回主菜单。

在各个难度场景中,进入场景前,会让玩家先选这一关的技能,每个技能在每个关卡中只能使用一次;技能的使用要花费水晶,玩家的水晶来自于场景收集或者通过关卡后的水晶奖励(过关得到的水晶量跟游戏时间成反比、跟玩家过关血量成正比)。玩家作为一名逃亡者,有着自己本身的血量,各种敌人有着自己的AI,当他们没有发现目标的时候,他们会在各自的领域巡逻。每个敌人都有一个巡逻盲区,玩家可以利用这些盲区来躲避敌人。当玩家进入敌人视野内,敌人会开火攻击玩家,当玩家血量减少到小于或者等于零的时候,玩家死亡,游戏结束;场景中会有一个发光点,只要玩家安全到达这个发光点,即算胜利,游戏过关,解锁下一个关卡。

3.4游戏类图游戏类图是什么东西?

图3-1游戏类图

mainmenu类是游戏的界面管理类,实现游戏中界面的功能。而Loading类是游戏的加载类,使游戏能在玩家进入关卡前先加载。游戏中除了mainmenu类跟loading类2个类是单体类之外,其他类都有依赖关系。其中,Skilldate类和Emnimy类、Player类都依赖于SkillManger类,因为在SkillManger类中,要实现各种技能的作用,而技能涉及到的不仅是玩家,还有敌人,所以这2个类都跟SkillManger有依赖关系。至于Skilldate类,是用于表示每个技能的数据,所以也是依赖于SkillManger类。而SkillManger类与MoneyData类则依赖于GameControl类,游戏管理类是管理游戏的一个类,敌人的所有行为都在敌人类中完成,而玩家的大部分行为也在玩家类中完成,所以游戏管理类要做的就是及时存储游戏中产生的数据,以便以后需要的时候可以使用;还有就是管理玩家技能,在游戏开始时候,记录玩家选择的技能还有初始化玩家选择的技能。

3.5游戏流程图你这个流程图不应该是在你设计的最前面吗?

而且莫名其妙一张图,什么承上启下的东西也没有?这是论文,不是数学

图3-2游戏流程图

3.5游戏主要功能设计?

3.6.1开场插画

现在很多游戏,特别是手机游戏都喜欢用插画来代替游戏一开始的开场动画,所以《突破重围》游戏中也是用插画作为游戏的开场动画。先导进一个一个UNITY的资源包叫做LeanTween,这个可以更好地实现简单动画的效果,例如平移、缩放。接着把准备做插画的若干张资源图放进同一个物体进行管理,然后给这个物体加碰撞盒,每次点击这个碰撞盒,都会移动一定的距离。具体的操作如下:

定义一个存放管理所有图片的空物体 Item;

然后给这个Item通过UIEventListener挂钩上点击函数

在点击函数里面实现的就是用LeanTween.moveLocalX移动这个物体

3.6.2选关界面的效果

界面主要是用NGUI里面的UIToggle组件以及Drag Scolleview,当关卡选中的情况下,通过OnTriggerEnter 改变原图的大小来实现。

3.6.3模型动画的切换

模型动画根据自己的需要先切割成自己想要的动画,然后逐段给动画起个名字,代码控制部分如下:

定义一个共有变量Emnimy_Animation 类型是Animation;

因为需要多次用到动画的切换,所以在这里把动画的切换写成一个方法,以便使用。

public void SetEmnimyAnimation(动画的名字,类型是string)

{

Emnimy_Animation.CrossFade(动画的名字);

}

调用这个方法的时候只要你传进一个string类型的参数,这个参数必须是某段动画的名字,模型就会自动播放相对应的动画。

3.6.4敌人的AI实现

敌人的AI是该游戏的重点之一,AI的实现是用协程去完成的,具体的伪代码如下:

定义一个结构体emnimy 里面包含敌人的所有状态有Think, run, Attack, Die 4种。

定义4种状态的协程函数IEnumerator Attack(),IEnumerator SeeAround(),IEnumerator Move(),IEnumerator Die();

public IEnumerator Attack()

{

改变敌人状态为Attack

while (true)

{

if(如果玩家不在攻击范围内)

{

yield return 0;

}

If(如果玩家没有在敌人视野内)

{

改变敌人状态为思考

yield return StartCoroutine(GameStart());

}

播放攻击动画

设置敌人的朝向朝着玩家

玩家扣血

yield return 0;

相关主题