卢杰基于Unity3D的坦克大战游戏的设计与实现

上传人:仙*** 文档编号:104583055 上传时间:2022-06-10 格式:DOC 页数:21 大小:201KB
收藏 版权申诉 举报 下载
卢杰基于Unity3D的坦克大战游戏的设计与实现_第1页
第1页 / 共21页
卢杰基于Unity3D的坦克大战游戏的设计与实现_第2页
第2页 / 共21页
卢杰基于Unity3D的坦克大战游戏的设计与实现_第3页
第3页 / 共21页
资源描述:

《卢杰基于Unity3D的坦克大战游戏的设计与实现》由会员分享,可在线阅读,更多相关《卢杰基于Unity3D的坦克大战游戏的设计与实现(21页珍藏版)》请在装配图网上搜索。

1、毕业实训报告课题名称:基于Unity3d的坦克大战游戏的设计与实现专 业:软件技术班 级:RZ软技154学 号:201560190410学生姓名:卢杰指导教师: 赵冬2017年5月15日关于卢杰同学的实训鉴定 同学于 年 月 日 至 年 月 日在我公司 部门进行了毕业实训。在实训中,该同学在单位签章:指导教师签字:年 月 日中原工学院毕 业 实 训 任 务 书2017年2月13日学生姓名卢杰学号201560190410专 业软件技术班级RZ软技154课题名称基于Unity3D的坦克大战游戏的设计与实现课题来源实训公司指导教师张鑫宇,李星辰第二个应该写我专业Unity3D职称讲师课题说明:该系统

2、利用Unity3D跨平台功能的突出、兼容性强的特点,结合C#开发一款坦克大战的游戏系统,画面好看,游戏方式简单,玩家易上手。承担的任务:寻找素材搭建场景,并编写相应功能的代码这个太简单了工作进度安排:第4周 :3月6号-3月10号确定题目第5周:3月13号-3月17号寻找素材 第6周:3月20号-3月24号对相应功能进行编码 第7周:3月27号-3月31号对相应功能进行编码 第8周:4月3号-4月7号查找BUG并优化项目任务要写到第13周指导教师签字: 年 月 日实训单位意见签章:年 月 日学院意见签章:年 月 日中原工学院毕 业 实 训 评 审 表学号201560190410姓名卢杰专业软件

3、技术班级RZ软技154题目基于Unity3D的坦克大战游戏的设计与实现指导教师评语成绩百分制: 指导教师签名: 年 月 日摘 要本文利用Unity3D跨平台功能的突出、兼容性强的特点,结合C#开发一款坦克大战的游戏系统,该系统运行流畅,具有较好的可玩性和跨平台性。课题题目为基于Unity3D的坦克大战游戏的射击与开发,旨在成功的设计出一款可以在PC端运行的坦克游戏,在毕业设计完成时,坦克模型应该能再PC端运行。游戏中,我们可以利用鼠标、键盘来对我们的坦克进行前进后退,而且可以对坦克进行旋转以及发射炮弹,通过这次设计,自己也体验了技术实现的过程。关键词: Unity3D; 坦克大战游戏; 游戏引

4、擎15 / 21目 录摘要V第1章项目概述11.1 项目背景11.2 技术路线11.2.1 游戏设计与制作阶段11.2.2 开发环境11.3 项目设计目标2第2章系统设计32.1 系统的整体设计32.2 系统的界面设计32.2.1 游戏主菜单32.2.2 游戏帮助界面42.2.3 游戏结束界面42.2.4 游戏主界面52.2.5 主角模型52.2.6 敌人模型62.2.7 游戏地图模型6第3章游戏菜单界面实现83.1 按钮的实现83.2 游戏主菜单界面的实现83.2.1 说明按钮83.2.2 退出按钮83.2.3 游戏开始按钮83.3 游戏帮助界面的实现93.3.1 关闭按钮93.3.2 游戏

5、帮助文字93.4 游戏结束界面的实现93.4.1 重新开始按钮93.4.2 退出游戏按钮103.4.3 分数显示103.5 游戏主界面的实现103.5.1 重置按钮103.5.2 退出按钮113.5.2 游戏得分11第4章游戏主界面实现124.1 场景的搭建124.2 主角的功能实现12移动12攻击12受到伤害134.3 摄像机的功能实现14移动14围绕主角旋转14视野的拉近或拉远154.4 敌人的功能实现154.4.1 生成154.4.2 移动164.4.3 攻击174.4.4 受伤174.5 炮弹的碰撞检测184.5.1 炮弹的身份184.5.1 碰撞检测18第5章系统测试205.1 在U

6、nity3D中运行测试205.2 在PC中运行测试205.3测试结果23第6章结束语24第1章 项目概述1.1项目背景随着社会的科技水平和经济水平的迅速发展,游戏行业以迅雷不及掩耳之势快速的发展着。现在的游戏行业和电影行业可以说已经站在同一高度,特别是3D技术的进步使得游戏在人们的日常生活中占据着重要的地位。在3D技术如此盛行的今天,游戏引擎收到的关注也持续高涨,目前主要的引擎有BigWorld引擎、Unreal Engine3虚幻引擎、Gamebryo引擎、Unity3D引擎。相对于前三种引擎来说,Unity3D是最近几年才流行起来,但它由于完美的跨平台系统使他迅速的在引擎市场占据了重要的地

7、位。本文将介绍一款以Unity3D为开发平台,结合C#的坦克大战游戏系统,该系统在保证运行效果的同时,具有设备要求低,跨平台性能好,运行流畅稳定的特点。1.2技术路线游戏设计与制作阶段在游戏设计的阶段就要想好这款游戏的大概内容,主题鲜明,并且具有良好的游戏乐趣,游戏内容丰富,符合我们日常生活中的逻辑规律。开发环境Unity3DUnity是一款跨平台的游戏开发工具,从一开始就被设计成易于使用的产品。作为一个完全集成的专业级应用,Unity还是功能强大的游戏引擎。Unity3D是一个让你轻松创作的多平台的游戏开发工具,是一个全面整合的专业游戏引擎。C#语言C#是一种安全的、稳定的、简单的、优雅的,

8、由C和C+衍生出来的面向对象的编程语言。它在继承C和C+强大功能的同时去掉了一些他们的复杂特性例如没有宏以及不允许多重继承。C#综合了VB简单的可视化操作和C+的高运行效率,以其强大的操作能力、-优雅的语法风格、创新的语言特性和便捷的面向组件编程的支持成为.NET开发的首选语言。1.3项目设计目标本游戏应该具备如下界面和功能:(1) 界面设计的美观。(2) 主角进行移动和碰撞检测。(3) 敌人自动寻路以及自动攻击(4) 敌人的死亡与主角的死亡。第2章 系统设计2.1系统的整体设计游戏系统设计主要包含主菜单界面、主场景和游戏结束场景这三大模块组成。其中在主菜单界面和游戏结束场景界面实现了按钮的点

9、击事件;主场景是该游戏的主体,主角和敌人的逻辑都在该场景中实现。游戏的流程图如图2.1所示:图2.1 游戏流程图要去掉图的背景。2.2 系统的界面设计2.2.1 游戏主菜单游戏主菜单如图2.2所示界面设计思路要用文字描述出来,不能只给个图啊!:图2.2 游戏主菜单2.2.2 游戏帮助界面游戏帮助界面如图2.3所示:图2.3 游戏帮助界面2.2.3 游戏结束界面游戏结束界面如图2.4所示:图2.4 游戏结束界面2.2.4 游戏主界面图2.5 游戏主界面2.2.5 主角模型主角模型如图2.6所示:图2.6 主角模型2.2.6 敌人模型敌人模型如图2.7所示:图2.7 敌人模型2.2.7游戏地图模型

10、游戏地图模型如图2.8所示:图2.8 游戏地图模型第3章 游戏菜单界面实现本章包括按钮的制作和游戏介绍、帮助界面。这些事关联在一起的,通过点击对应的按钮来达到对应场景的切换。它们的制作主要利用UGUIUnity3D的内置组件来实现的。3.1按钮的实现1按钮是由Image组件需添加Button脚本,该脚本为Unity3D内置脚本和Text组件结合实现的。2按钮的点击功能,在每个Button脚本下都有一个OnClick点击事件方法可以绑定点击后需要实现的方法。然后将每个按钮的方法绑定上去即可实现按钮功能。3.2 游戏主菜单界面的实现3.2.1 说明按钮1功能说明按钮的功能是将游戏说明界面显示出来,

11、也就是切换到游戏说明界面场景。2代码如下publicvoid OnIntroButtonClick SceneManager.LoadScene;3.2.2 退出按钮1功能退出按钮的功能是将游戏退出。2代码如下publicvoid OnExitButtonClick Application.Quit; 3.2.3 游戏开始按钮1功能游戏开始的功能是进入游戏主场景,也就是切换到游戏主场景。2代码如下publicvoid OnStartButtonClick SceneManager.LoadScene;3.3 游戏帮助界面的实现3.3.1 关闭按钮1功能关闭按钮的功能是关闭游戏帮助界面,回到游戏

12、主菜单,也就是切换到游戏主菜单。2代码publicvoid OnCloseButtonClick SceneManager.LoadScene;3.3.2 游戏帮助文字界面上的文字描述,主要是利用UGUI中的Label来实现。在Text属性里输入需要显示的内容,即可显示出来。如图3.1所示:图3.1 游戏帮助Text3.4 游戏结束界面的实现3.4.1 重新开始按钮1功能重新开始按钮的功能是回到游戏主界面,也就是切换到游戏主界面2代码publicvoid OnResetButtonClick SceneManager.LoadScene;3.4.2 退出游戏按钮1功能退出游戏按钮的功能是将游戏

13、退出2代码publicvoid OnExitButtonClick Application.Quit;3.4.3 分数显示1功能分数显示是在游戏结束后将数据保存下来,切换到游戏结束场景后将数据读取并显示出来,然后将分数归0。2代码using UnityEngine.UI;publicText score_Text;void Start score_Text.text = 最终得分为: + PlayerPrefs.GetString + 分;PlayerPrefs.SetString;3.5 游戏主界面的实现3.5.1 重置按钮1功能重置功能按钮是将游戏回到刚开始游戏的样子,也就是重新加载本场景

14、2代码publicvoid OnResetButtonClick SceneManager.LoadScene; 3.5.2 退出按钮1功能退出按钮的功能是回到游戏结束的界面,也就是将场景切换到游戏结束的场景。2代码publicvoid OnQuitButtonClick SceneManager.LoadScene;3.5.2 游戏得分1功能当击杀一个敌人后变增加分数,并且保存分数,将分数显示出来2代码publicvoid ScoreAdd score.text = 分数: + scoreNum + 分;PlayerPrefs.SetString分数, scoreNum.ToString;第

15、4章 游戏主界面实现4.1 场景的搭建将Unity资源包后缀名为.unitypackage导入到项目当中,导入的方式为直接拖拽资源包至Project面板下,然后选择全部导入。导入后选择场景模型,拖拽至Hierarchy面板,将模型的Transform组件Reset,场景的搭建就完成了。4.2 主角的功能实现首先在导入的资源包中找到主角模型,将其拖拽至Hierarchy面板。4.2.1移动1 实现思路在主角身上添加Rigidbody刚体组件,使用刚体组件通过horizontal轴和vertical轴来运动,W、S控制主角的前进和后退,A、D控制主角的左右旋转。刚体组件如图4.1所示。图4.1 刚

16、体组件2代码privatevoid PlayerMove horizontal = Input.GetAxis; vertical = Input.GetAxis; m_Rigidbody.velocity = transform.forward * vertical * moveSpeed; m_Rigidbody.angularVelocity = transform.up * horizontal * angularSpeed; 4.2.2攻击1实现思路当按下鼠标左键的时候,在主角坦克的炮口这个位置,实例化一个炮弹,并且给子弹一个向前发射的速度。2代码privatevoid Player

17、Attack if Input.GetMouseButtonDown ifEventSystem.current.IsPointerOverGameObject return; GameObject newShell = Instantiate asGameObject; newShell.GetComponent.identity = playerIdentity; newShell.GetComponent.velocity = newShell.transform.forward * newShell.GetComponent.moveSpeed; newShell.GetCompone

18、nt.shellAttack = attack; m_AudioSource.Play; 受到伤害1实现思路当敌人的炮弹碰撞到主角时,将敌人的攻击力通过炮弹的传过来,使主角减少血量,当主角血量为0时,在主角的位置实例化一个坦克爆炸的特效,并且销毁主角这个对象。碰撞检测需要给主角加碰撞体组件。碰撞体组件如图4.2所示。图4.2 刚体组件2代码publicvoid PlayerBruise if playerHp return; playerHp -= atk; hp_Image.fillAmount -= atk / PLAYERHP;if playerHp Instantiate; Destr

19、oy; isPlayerDie = true; 4.3 摄像机的功能实现摄像机是Unity3D开发中不可获取的组件,它就像人类的眼睛以及耳朵,如果没有摄像机就什么也看不见,什么也听不见。而在本项目中,摄像机的作用是,跟随主角,并可以自由旋转,亦可以通过鼠标滚轮来拉近或拉远视角,达到3D的效果。4.3.1移动1实现思路在主界面场景运行的时候,将摄像机看向主角,并记录下主角与摄像机的偏移量,然后将自己的位置与主角的位置永远保持在一个偏移量中。2代码void Start transform.LookAt; offect = transform.position - PlayerController.

20、_instance.transform.position;privatevoid CameraMove transform.position = PlayerController._instance.transform.position + offect;围绕主角旋转1实现思路当按下鼠标右键时通过Mouse X轴和Mouse Y轴来获取鼠标的移动量,来改变摄像机的旋转。2代码privatevoid CameraRotate if Input.GetMouseButton transform.RotateAroundPlayerController._instance.transform.pos

21、ition, PlayerController._instance.transform.up, Input.GetAxis * rotateSpeed;Vector3 newPosition = transform.position;Quaternion newRotation = transform.rotation; transform.RotateAroundPlayerController._instance.transform.position, transform.right, -Input.GetAxis * rotateSpeed;if transform.eulerAngle

22、s.x 80 transform.position = newPosition; transform.rotation = newRotation; offect = transform.position - PlayerController._instance.transform.position;视野的拉近或拉远1实现思路通过滑动鼠标滚轮来拉近或拉远视野,也就是用Mouse ScrollWheel轴通过改变摄像机与主角距离的大小来控制摄像机视野的拉近或者拉远。2代码privatevoid CameraScrollWheel distance = offect.magnitude;dista

23、nce -= Input.GetAxis * scrollWheelSpeed; distance = Mathf.Clamp; offect = offect.normalized * distance; 4.4 敌人的功能实现敌人的功能主要是移动,射击,受伤爆炸,生成等。4.4.1 生成1实现思路在地图上选择3-5个出生点,然后使用随机数获取其中一个位置,然后在这个位置上实例化敌人。2代码IEnumerator CreatEnemy while yieldreturnnewWaitForSeconds;GameObject go = InstantiateenemyTank, transf

24、orm.GetChildRandom.Range.position, Quaternion.identity asGameObject; 4.4.2 移动1实现思路敌人的移动是通过Unity内置的寻路系统来控制,Unity寻路系统需要将需要寻路的地面的Navigation Static勾选上,然后点击菜单栏的Window菜单,点击Navigation后点击Bake,即可完成寻路的设置。然后用代码来控制寻路点,使敌人移动。当敌人与主角之间的距离大于一定的距离时,敌人寻路点为主角需要保护的建筑物,当敌人与主角之间的距离小于一定距离时,敌人的寻路点为主角的位置。2代码privatevoid Enem

25、yMove if Vector3.Distance = m_NavMeshAgent.stoppingDistance m_NavMeshAgent.SetDestination;Quaternion target = Quaternion.LookRotation; transform.rotation = Quaternion.Slerp; else m_NavMeshAgent.SetDestination;Quaternion target = Quaternion.LookRotation; transform.rotation = Quaternion.Slerp; 4.4.3 攻

26、击1实现思路当敌人寻路停止时,即找到目标时,开始计时,每几秒在炮口实例化一颗炮弹,并给炮弹一定的速度。2代码privatevoid EnemyAttack runTime += Time.deltaTime;if = time if m_NavMeshAgent.remainingDistance != 0 & m_NavMeshAgent.remainingDistance runTime = 0;GameObject newShell = Instantiate asGameObject; newShell.GetComponent.identity = enemyIdentity; ne

27、wShell.GetComponent.velocity = newShell.transform.forward * newShell.GetComponent.moveSpeed; newShell.GetComponent.shellAttack = attack; m_AudioSource.Play; 4.4.4 受伤1实现思路当主角的炮弹碰撞到敌人时,将主角的攻击力通过炮弹的传过来,使敌人减少血量,当敌人血量为0时,在敌人的位置实例化一个坦克爆炸的特效,并且销毁敌人这个对象。碰撞检测需要给敌人加碰撞体组件。2代码publicvoid EnemyBruise if enemyHp r

28、eturn; enemyHp -= atk; hp_Image.fillAmount -= atk / ENEMYHP;if enemyHp Instantiate; m_Canvas.SetActive; Destroy; GameManager._instance.scoreNum+;GameManager._instance.ScoreAdd; 4.5 炮弹的碰撞检测4.5.1 炮弹的身份给炮弹定义一个叫做身份的枚举,里面有玩家和敌人,当玩家攻击实例化子弹的时候就将实例化生成的子弹的身份设置为玩家,当敌人攻击实例化子弹的时候就将实例化生成的子弹的身份设置为敌人。枚举代码如下:public

29、enumShellIdentity PLAYER, ENEMY,4.5.1 碰撞检测1实现思路碰撞的检测使用Unity3D内置的API方法,是OnTriggerEnter,功能是当碰撞的那一瞬间触发一次该方法,而碰撞的必要条件是,碰撞的双方都有碰撞体,双方至少一方有刚体,才会触发碰撞。当子弹碰撞到对象时,销毁自己,然后在炮弹的位置生成炮弹爆炸特效,然后会验证碰撞体身份,如果子弹的身份与碰撞体的身份不一致的话即调用碰撞体的受伤方法。2代码privatevoid OnTriggerEnter if return; if other.tag = Enemy & identity != other.G

30、etComponent.enemyIdentity other.GetComponent.EnemyBruise; elseif other.tag = Player & identity != other.GetComponent.playerIdentity other.GetComponent.PlayerBruise; elseif GameManager._instance.MapBruise; Instantiate; Destroy;第5章 系统测试5.1 在Unity3D中运行测试点击软件中的运行按钮,如图5.1所示。图5.1 运行按钮游戏在软件中测试运行,如图5.2所示。图5

31、.2 Unity3D中运行游戏能够正常运行,没有报错,测试成功。5.2 在PC中运行测试点击File选择Build Settings出现打包菜单,如图5.3所示。图太大,宽度调成12就行,后面的图也一样处理图5.3 打包选项结合游戏之前的几个场景,就可以打包成一个完整的游戏了,先将其打包为PC游戏进行测试。运行结果如图5.4所示。图5.4 开始场景点击开始游戏,进入游戏主场景,如图5.5所示。图5.5 游戏场景游戏完美运行,PC端测试成功。5.3测试结果在Unity3D的Mono模拟器中运行结果,游戏可以正常流畅运行,界面简洁易懂,操作简单,且画面鲜艳。在PC平台测试运行,游戏同样可以正常运行

32、。第6章 结束语从毕业设计到报告,这好几个月,非常顺利的完成了实训,我对系统开发的整个流程有了更深刻的认识,对本专业的基本理论、专业知识和基本技术进行了梳理,并有了更深入的了解,使我在两年中所学到的知识得到了升华,达到了学以致用的效果。本报告从游戏的开始界面、游戏界面、游戏对象、结束几面等几个模块来介绍利用Unity3D引擎并结合C#来开发一款简单的坦克游戏。游戏中包含了几个常用的重点技术,如射线检测、碰撞检测、敌人的AI等。它基本实现了一般的游戏功能,同时它的可扩展性还很高,可以再此基础上另外添加一些比较有创意的设计使该游戏更加的完整。本系统主要是用Unity3D进行系统整体框架的搭建,但U

33、nity3D对于我来说是比较陌生的,再接触前根本没有听说过,不过所幸这款软件在中国发展了几年,在网上有大量的资料可供查阅,从中提取有用信息的同时也让我对这款软件有了进一步的认识和了解。编程的过程对于我本身也是一个学习进步的过程,我自己在编程的水平十分有限,经常在一些简单的地方出错误,因为我只能去网上或者老师来指导我,给了我很大的帮助,最后我可以独立的完成功能的实现。这款游戏有非常多的不足,比如小地图功能,本来该功能是实现了的,可是后来因为此功能而发生了许多BUG,也没有改进,就取消了该功能;还有游戏过于单一只有杀敌人,而没有其他功能,例如闯关之类的,也没有胜利条件。此次毕业设计不仅提升了我的编

34、程能力,还提升了我对于Unity3D的掌握能力,这些能力在以后都是必不可少的东西,因此我觉得这个毕业设计对我的好处是非常的多的。参考文献1 宣雨松. Unity3D 游戏开发 M. 北京:人民邮电出版社,2012.2 李兰友 杨晓光. Visual C#.NET程序设计M. 北京:清华大学出版社,2004.5.3 韩玉民. 计算机专业英语教学研究与实践 J.计算机与信息技术,2008,6:106-107.4 吴亚峰 于复兴. Unity3D游戏开发技术详解与典型案例M.北京:人民邮电出版社,2012.5 亚当斯.游戏设计基础M.北京:机械工业出版社,2009.6 荣钦科技.游戏设计概论M.北京:科海电子出版社,2003.

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!