_基于unity3D的FPS游戏.docx





《_基于unity3D的FPS游戏.docx》由会员分享,可在线阅读,更多相关《_基于unity3D的FPS游戏.docx(43页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、p本科毕业设计(论文)基于Unity3D的FPS游戏Basic Unity 3D FPS game院 (系)计算机系专 业软件工程班 级软件工程(3)班学 号16210120305学生姓名吴建豪指导教师杨超提交日期2020年4月25日毕业设计(论文)原创性声明本人郑重声明:所呈交的毕业设计(论文),是本人在指导老师的指导下,独立进行的设计(研究)工作及取得的成果,论文中引用他人的文献、数据、图件、资料均已明确标注出,论文中的结论和结果为本人独立完成,不包含他人已经发表或撰写的作品及成果。对本文的研究做出贡献的个人和集体,均已在论文中作了明确的说明。本人完全意识到本声明的法律结果由本人承担。毕业
2、论文作者(签字): 签字日期: 年 月 日成绩评定 成绩项论文成绩(百分制)折合比例实得成绩(折合分)指导教师成绩30%评阅教师成绩20%答辩成绩50%总评成绩注:毕业设计(论文)成绩按百分制评定。答辩成绩不及格的(评分低于60分的),则该毕业设计(论文)总评成绩为答辩成绩。内容摘要FPS游戏,又称为第一人称射击游戏。相信很多用户对于这一个类型的游戏都很熟悉。这一款游戏的核心在于射击,项目将围绕这一个核心进行设计和开发游戏自身的基础设计这一模块,在音效和动画特效着重设计。在听觉和视觉这一块让玩家有更好的体验,本文主要讲述在使用Unity3D引擎和C#编程语言的过程中,如何开发和设计一款受欢迎的
3、第一人称射击游戏,第一人称视角的移动、枪支的射击原理和特效构思,背包系统和UI的设计,编辑敌人的AI寻路和攻击。关键词: Unity3D 射线检测 C# AIAbstract FPS Games, also known as first-person shooter. Im sure many users are familiar with this type of game. The core of this game is shooting, around this core point to design is the core of this project. The game its
4、elf is based on the design of this module, with emphasis on sound and animation effects. This article focuses on how to develop and design a popular first-person shooter in the context of using the Unity3D engine and the c # programming language, first Person Perspective Movement, gun shooting princ
5、iples and special effects concepts, backpack systems and UI design, editing enemy AI pathfinding and attacks.Key words: Unity 3D Radiographic examination C# AI广东东软学院本科生毕业设计(论文) 目 录第一章 概述81.1游戏类型81.2游戏开发环境和运行环境81.3内容概述81.4核心概念81.5游戏故事81.6游戏角色81.7游戏世界91.8游戏规则91.9文档目的9第二章 游戏结构102.1 每个模块中的方法和主要成员变量102.1
6、.1 GameManager模块102.1.2 UI模块102.1.3 BirthEnemy模块102.1.4 Player模块102.1.5 Enemy模块11第三章 游戏过程13第四章 主要系统144.1动画系统144.1.1角色动画144.1.2敌人动画154.2声音系统17第五章 游戏的主要设计195.1角色的设计和第一人称视角的运用195.1.1角色的创建195.1.2角色的控制195.1.3第一人称相机的控制205.2 敌人的设计215.2.1敌人的导航网格寻路和行为判断215.2.2敌人的生成、死亡和销毁机制225.3 场景效果设计235.3.1场景渐影渐射235.4 方法的封装
7、245.5枪的设计265.5.1枪支的设计265.5.2射线检测原理275.6 商城系统275.6.1商城系统的规范设计275.6.2 商城的操作流程29第六章 游戏界面326.1 开始界面326.2 游戏界面326.3 胜利界面336.4 失败界面33第七章 Unity操作357.1 设置刚体和碰撞检测器357.2 挂载脚本357.3 配置音频文件357.4 配置动画系统35第八章 总结368.1 总结目的368.2 制作游戏出现的问题总结368.3 心得体会368.3.1 对 Unity2D 学习的体会368.3.2 设计实现的体会378.3.3程序设计中的体会37参 考 文 献38致谢3
8、9第一章 概述1.1游戏类型第一任人称射击游戏1.2游戏开发环境和运行环境开发环境:Windows 10 系统Unity 2018Visual Studio2012运行环境:PC, Mac & Linux Standalone1.3内容概述游戏类型是:第一人称射击游戏,玩家可控制主角上下左右移动,跳跃 蹲下 装弹,击败目标敌人就可以获得游戏的胜利完成通关。1.4核心概念游戏的设计灵感源于小时候经常玩的FPS游戏,例如CS和CF,80和90这两代人很多都玩过这两款经典的游戏。FPS多指词组“First Person Shooting”的缩写“First Person Shooting Game”
9、,简单的来说就是一款第一人称设计游戏。这一款游戏的核心初衷在于回忆童年时代和小伙伴一起玩过的FPS游戏,在玩法上面偏向传统。游戏胜利的机制:消灭所有的敌人。相似于CS的大逃灾和CF的生化模式,区别在于这个是单人模式,可以使用的道具和枪的款式会相对较少。核心的玩法在于射击。这一款游戏的设计中,对于角色的设定就是消灭所有的丧尸,维护这一块区域的和平。当今时代游戏也是一种文化输出的重要载体,一名游戏开发者有必要通过游戏内容的设计,向玩家传达正确的、积极的价值观。有部分用户对于第一人称射击游戏的印象就是血腥、暴力的。在游戏的文案策划和机制的调整的情况下,是可以向用户传达正向的思想和文化的。游戏场景选用
10、的是一个破旧、荒凉的小村庄,游戏过程中可以跑图,利用不同的地形在进行拉扯,消灭丧尸。1.5游戏故事邪恶的丧尸大肆破坏这个世界的稳定,主人公孤身一人,但是还是走上了与丧尸对抗的道路,尽管有可能会葬身于丧尸的嘴下。1.6游戏角色主角:由玩家控制,行为有:行走,跳跃,跑,射击,装子弹;丧尸:由电脑控制,行为有:行走,攻击玩家游戏任务:消灭所有敌人。1.7游戏世界世界由于某种未知的病毒发生变异,会把人感染成丧尸,在很短的时间内席卷世界。世界的秩序,和平都被打破了,到处都是处于战乱中。主角在这个动荡的年代出生,面对灾难,饥饿,乃至死亡的威胁。于是走上了抗争的道路,这个世界也有千千万万个类似主角的人物走上
11、了和主角的一样的道路。这是大千世界的一处映射,一个破落的小村庄,地上稀稀疏疏的残破农具证明着这里曾经有一群人通过勤奋开拓着未来,但是突如其来的灾难打破了这一切的祥和,战争,死亡,饥饿的降临,让一个一个幸福美满的家庭都支离破碎,有逃难的,有被毁灭的。主角在这个村庄路过,不是凑巧,而是得知这里是一群丧尸的聚集点,哪怕是人类受到病毒的感染也保留下一点生时作为人类都有的群居性。面对着丧尸的死亡威胁,主角能信任的就只有手中的枪支,他要将所有的丧尸都消灭掉。或许听着有些不自量力,但这个就是主角的信念,同时他也是得到“神赐”的男人。1.8游戏规则玩家可通过键盘的方向键控制角色的移动;鼠标右键可以射击,e可以
12、换子弹,空格可以跳跃;当生命值小于等于零时,游戏失败;敌人全部消灭后才能获得游戏胜利。1.9文档目的在整个游戏的开发过程中,存写文档的是比较科学的做法,在游戏开发的起始阶段对于游戏的功能设计有一个方向,一些核心的机制确保是保留下来的,也不会在开发到一半的时候出现思路上的絮乱,防止“走歪路”。通过反复翻看文档,加深对于游戏的文化背景,内涵的理解,能够对于游戏的核心玩法有一个深厚的理解。这样可以让角色的设计和规则设定上显得游刃有余。避免发生规则逻辑矛盾和剧情混乱的情况,利于游戏开发者设计出一款游戏的游戏。第二章 游戏结构2.1 每个模块中的方法和主要成员变量2.1.1 GameManager模块首
13、先需要把GameManager脚本加上设计模式中的单例模式,使全局可以做到数据统一。bool isOpenUI; /是否打开商城int Gold; /金币数量bool isShop; /是否有商城int enemynum; /敌人数量void AddGold(int num) /加金币void SubtractGold(int num) /扣金币2.1.2 UI模块GameObject Shop; /商城GameObject player; /角色GameObject OverUI; /结束界面fps_FPInput FPInput; /角色按键fps_FPCamera FPCameras;
14、/角色相机fps_GunScript GunScript; /枪脚本fps_PlayerHealth PlayerHealth; /主角血量Material colors; /枪的材质Text goldtxt; /金币文本Text enemynumtxt; /敌人数量显示AddButtle() /添加子弹AddHP() /添加血量AddGun() /升级枪械New() /重新开始Quit() /退出游戏2.1.3 BirthEnemy模块GameObject enemys; /敌人类型Transform BirthPoint; /敌人生成点float Times; /生成时间倒计时2.1.4
15、Player模块enum PlayerState /主角状态/主角控制变量(走路,跑步,跳,蹲,移动速度)float sprintSpeed;float sprintJumpSpeed; float normalSpeed, float normalJumpSpeed,float crouchSpeed, float crouchJumpSpeed,float crouchDeltaHeight;float gravityfloat;float ;cameraMoveSpeed,float speed,float jumpSpeed;float standardCamHeight;float
16、crouchingCamHeight;/玩家行动操作、状态判断,音效 void Update(); void UpdateMove();void AudisoManager();/武器音效(开火音效,攻击音效,换弹音效,空子弹音效)AudioClip fireAudio;AudioClip reloadAudio;AudioClip damageAudio;AudioClip dryFireAudio;/武器动画模块(换弹动画,走路动画,跑步动画,跳跃动画,发呆动画,换弹动画)Animation anim;/武器数值(武器攻击力,武器开火间隔时间,武器换弹时间) float fireRate,
17、float damage,float reloadTime/武器粒子特效(开火粒子,击中敌人粒子)GameObject explosion,2.1.5 Enemy模块1敌人导航网格NavMeshAgent meshAgent2敌人健康fps_EnemyHealth health3初始化敌人参数,如图2-1图2-1初始化敌人参数4敌人行为判断,如图2-2图2-2敌人行为判断第三章 游戏过程游戏过程主要由2个部分组成,游戏输入:用户的按钮操作,如点击R键换子弹,N键商店,选择键盘上的方向键控制角色移动,鼠标右键射击。游戏输出;当前生命值、子弹数、金钱、游戏胜利提示框、游戏失败提示框。游戏的流程逻辑
18、,如图3-1。图3-1 游戏逻辑流程图第四章 主要系统4.1动画系统4.1.1角色动画在Unity中,通过使用不同的方式来处理动画;在其他编辑器中创建它们并且导入,创建在在Unity的Animation视图中。这些方法中的每一种都有其优缺点,相对于其他方法来说,某种方法可能会给一些特定的任务带来更多的好处。在该游戏中,游戏对象添加Animation组件,动画文件拖入组件。图4-1,玩家静止状态动画如图4-2。图4-1 角色的animation组件图4-2玩家动画4.1.2敌人动画敌人的动画通过Animation组件实现,如图4-3,还有敌人普通状态的动画,如图4-4一共有三种敌人,主要是颜色的
19、不同。敌人被攻击的时候,会产生粒子特效。如图4-5图4-3敌人的animation组件图4-4敌人动画图4-5敌人被攻击产生的粒子特效4.2声音系统 声音系统主要由几个部分组成,第一个部分是背景音乐,如图4-6;第二个是玩家音乐,玩家音乐由脚步、跳跃、装子弹、开火组成,如图4-7;第三个部分是敌人的音乐,攻击的音乐,如图4-8.图4-6背景音乐图4-7跳跃音乐图4-8敌人攻击音乐第五章 游戏的主要设计5.1角色的设计和第一人称视角的运用5.1.1角色的创建创建一个“GameObject”的空物体,命名为“player”。主角的所有行为是通过角色控制器来实现,所以给“player”添加一个Cha
20、racter Controller组件。如图5-1设置好参数,写一个存储变量的脚本“fps_Parameter”,赋予一个特性,当前组件作用的对象必须含有Character Controller组件。定义参数,鼠标的输入“inputSmoothLook”,按键“inputMoveVector”,这两个都是二维向量。是否蹲伏状态“inputCrouch”,是否跳跃状态“inputJump”,是否冲刺状态“inputSprint”,是否开火状态“inputFire”,是否装子弹状态“inputReload”,这些变量都是通过用户的输入状态来进行赋值,不需要显示出来,通过特性HideInInspec
21、tor来将这些参数隐藏起来。为了便于整理,创建一个新的脚本“fps_FPInput”来对这些参数进行赋值。图5-1角色控制器5.1.2角色的控制角色需要一个控制脚本,命名为“fps_playerController”,定义一个变量“PlayerState”代表玩家的当前状态,玩家共有五种状态。第一种是初始状态“None”,为空;第二种状态是“Idle”,为站立状态;第三种状态是“Walk”,为行走;第四种状态是“Crouch”,为蹲伏。第五种状态是“Run”为奔跑。给角色创建一个控制脚本,命名为“fps_playerController”,先定义一个变“PlayerState”来代表玩家的当前
22、状态,有五种状态。第一种是初始状态“None”,为空;第二种状态是“Idle”,为站立状态;第三种状态是“Walk”,为行走;第四种状态是“Crouch”,为蹲伏。第五种状态是“Run”为奔跑。如图5-2。定义一个辅助参数“moveDirection”,判断当前处于“grounded”,移动的方向是通过键位计算,键位只取两个轴向,也就是x轴和轴,实际移动对应的世界坐标系的x轴和z轴。需要转化为玩家坐标系的方向。如图5-2通过“moveDirection”transform.TransformDirection(moveDirection)转变为自身坐标系。可以得到角色的方向。调用UpdateM
23、ove就可以控制角色的移动,“Fps_player Control”脚本定义了移动的参数,根据蹲伏,奔跑,行走的状态转换会有不同的速度。如图5-3图5-2玩家各种状态的参数图5-3控制角色移动代码5.1.3第一人称相机的控制Hierarchy窗口下创建一个Camera,把Camera的标签设置为“MainCamera”,Camera放在Player里面,作为他的植入体。编写相机的脚本,角色的视角变化是通过相机的旋转来完成的。视角上下的旋转对应的是鼠标y轴的偏移量,旋转对应的则是x轴的偏移量,直接让相机的X轴旋转就可以了。视角左右的偏移量是通过游戏物体y轴的旋转来表达。鼠标控制游戏物体进行视角的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 unity3D FPS 游戏

限制150内