基于Unity3D的多人在线射击游戏设计与实现毕业论文Word下载.docx
- 文档编号:7434308
- 上传时间:2023-05-08
- 格式:DOCX
- 页数:29
- 大小:1.29MB
基于Unity3D的多人在线射击游戏设计与实现毕业论文Word下载.docx
《基于Unity3D的多人在线射击游戏设计与实现毕业论文Word下载.docx》由会员分享,可在线阅读,更多相关《基于Unity3D的多人在线射击游戏设计与实现毕业论文Word下载.docx(29页珍藏版)》请在冰点文库上搜索。
shootinggame;
Multiplayer;
Functionrealization
第一章绪论
一.1选题的目的和意义
随着生活水平与科技的发展,游戏已经成为现代人缓解压力的一大利器,使用好这一利器,有利于锻炼自己的反应能力,拓宽自己的朋友圈。
所以当人们对游戏要求提高,开发游戏的要求也随之变高。
市面上开发游戏的引擎五花八门,根据GameTracker数据排行榜显示,Unity3d与Cocos2D系列引擎,成为全球最主流的两大第三方引擎的供应商,其中最吸引眼球的Unity引擎,它凭借三大优势,孕育了成百上千款高品质游戏,根据有效数据显示,Unity用户超过330万人,每月活跃用户高大70万,市场比例接近百分之四十五,它的优势分为三部分,第一,Unity引擎功能丰富,插件资源庞大,大大的减少了开发者所需的对游戏的开发时间;
第二,它的可视化界面对开发新手老手都十分友好,即便是不会编程的人也能快速适应并上手;
第三,高度的可跨越平台性,减少了为了适应平台所投入的人力物力资源,作为开发者来说,不管是哪个引擎,都必须为爱好者提供交流的平台,尽量给开发者自己的空间,可以提供丰富的开源组件,也能提供开发者自行设计编辑器的组件。
一.2研究现状
中国人口基数大,游戏的市场需求大,玩游戏的人口基数大,但大多数人都围绕着热门游戏玩,所以热门游戏就占据了游戏市场中较大的份额,而热门游戏中,例如绝地求生(TPS类)和英雄联盟(MOBA类)就属于国内热门游戏,已经变成了大家交流的一个媒介。
游戏除了让人们缓解生活带来的压力外,还能以此为话题进行沟通交流,而游戏市场也是围绕着这两大类去更新玩法,给人带来新鲜的东西,吸引别人进行游戏,本文就TPS类游戏展开设计开发,第三人称射击游戏,也就是我们说的TPS游戏类型,玩家可以看到自己的角色进行行走射击等操作,即为TPS游戏,该类游戏收获了国内外许多玩家的喜爱。
相对于第一人称游戏的紧张感和操作感,TPS游戏往往更加有策略性和操作性,玩家通过第三视角全方位的进行掌握局势,通过击杀大量敌人产生刺激感、成就感,从而获得游戏体验。
一.3研究内容
从最初的小想法到写需求分析、游戏文档,到分析游戏并进行最终开发测试,阅读了许多Unity专业知识书籍以及许多基于Unity3D技术的开发者论坛博客,设计并实现了多人在线射击游戏。
首先,为了实现多人联机,我用的是UnityNetworking网络技术。
基于UDP的高性能传输层是他最大的特点,可以支持所有游戏类型,底层通过LLPI进行全面控制,在面临如何改善游戏的网络同步问题上,我查阅了非常多的资料,解决了游戏运行时的服务器端与客户端的实效性问题,该游戏在保证运行效果的同时,可以实现客户端与服务器的同步,具有设备要求低,跨平台性能好,运行流畅稳定的特点,其次,为了提高游戏体验,使用TextMeshpro字体组件,有效地丰富玩家的视觉效果,还通过NavMeshAgent组件,用来实现角色进行寻路导航的功能开发,在开发过程中根据游戏功能进行逻辑推理,实现功能后测试中调整游戏数值参数,使游戏更加完善。
一.4章节安排
本论文分为七章,结构安排如下:
第一章:
绪论,将会从本课题研究的目的及意义出发,讲述研究现状与研究课题。
第二章:
介绍开发环境和Unity引擎、还有其他涉及到本次开发的插件和软件。
第三章:
介绍本次游戏开发在前期的需求设计和构想,包括于设定的游戏背景和游戏玩法规则,考虑该游戏需要拥有的功能和如何实现。
第四章:
介绍游戏的开发阶段,从功能出发,讲述如何编写脚本实现,包括使用Unity中一套称为Mutiplayer的网络体系结构,以NetworkManager为核心的管理工具,从创建人物、敌人角色,编辑控制脚本,角色的血条控制、子弹的形成、计数器的逻辑,联网的代码逻辑,服务器端和客户端之间的同步问题等。
第五章:
场景、UI、音效、灯光等的设计与实现,从寻找合适的模型到,进行搭建场景,对界面UI的设计、合适的游戏音效和背景音乐、添加灯光渲染气氛。
第六章:
游戏完成后,对游戏进行多次的测试,包括界面测试、功能测试,打包封装。
第七章:
结论和感想,作为论文最后一章,对本次毕业设计开发中的总结,包括学到的知识,开发中的感想。
第二章开发工具介绍
二.1Unity引擎
二.1.1Unity引擎来源
Unity拥有着交互舒适的操作界面,让开发者能够快速上手[4],Scene场景窗口是开发者最熟悉的部分,你可以在这里进行大胆创作,例如摄影机、光源、模型、材质、粒子系统、天空盒等,你可以在这里对你的游戏预制体进行编辑,包括不限于选择物体、旋转物体、移动物体、缩放物体;
Game游戏窗口,这个窗口主要用来呈现出完整的动画效果,不能进行编辑,用来渲染Scene中的动画;
如果你想知道你正在编辑的对象的具体数据,你对应在Inspector编辑窗口查找,包括不限于名字、标签坐标、角度、大小、身上的组件、脚本等各种属性信息;
Hierarchy清单窗口,陈列所有Scene中的预制体;
Project项目窗口,你的所有模型素材、组件、脚本等都在这。
二.1.2Unity引擎的特点
Unity具备着高效、高度优化、高度集成等优点。
二.1.3Unity引擎的优势
第一,Unity引擎功能齐全,插件资源庞大,大大缩短了开发时间,Unity引擎在开发上,为开发人员提供了可视化工具和3D补偿引擎;
在脚本上,有着多样的语言环境,还有着非常庞大的IDE社区,在用户体验上,提供了严谨的系统用于处理项目,给合作开发的团队提供了版本管理,只要用过这个引擎的人都会知道Assetstore,这个是他们公司自己所经营的,包含着超过三千种工具、组件。
为后续的开发工作提供了非常大的便利,特别注意的是,里面的免费产品的质量也及其高。
拥有高度集成的特点,带有粒子、物理、简单模型系统,调用方便,全程可视化调整。
第二,所谓所见即所得,即便是不会编程的人也能快速适应并上手,例如说开发时你并不需要对物理了解得多深,引擎的物理系统已经接近完善了;
当你想有碰撞检测时,你不需要自行编辑代码,你只需要通过组件和鼠标,就可以实现自己想要的效果;
当你希望你的人物可以进行导航寻路,敌人可以自动巡逻,都可以用unity里面强大的组件进行设计吗,虽然不足与3dmax相比专业,但是unity进行初步场景设计也是绰绰有余的,包括场景的烘焙,渲染,制作粒子效果,无论是哪个单拿出来都属于比较有技术性的模块功能,但在该引擎中,你只需要下载几个组件,进行操作设置就能实现大部分你想要的功能,这样也是在减少开发游戏的资金、资源,降低开发游戏的难度,缩短开发游戏的时长。
而官方也提供了非常详细的文档说明,并且在18年版本之后新增了中文语言,方便我们进行开发游戏。
第三,高度的可跨越平台性,减少了为了适应平台所投入的人力物力资源。
该引擎在常见的Win、Linux和Mac系统上都可以进行开发,开发的游戏可以发布到对应的平台。
甚至你也可以通过他发布网页游戏,支持常用系统的网页浏览。
它的网页播放器也被Mac所支持。
二.1.4Unity引擎重点常用函数介绍
表2-1函数表
函数名
内容
Update
当MonoBehaviour启用时,其Update在每一帧被调用。
LateUpdate
当Behaviour启用时,其LateUpdate在每一帧被调用
FixedUpdate
当MonoBehaviour启用时,其FixedUpdate在每一帧被调用,常用与物理引擎的调用,以及需要固定时间更新的函数
Awake
一个初始化函数,当一个脚本势力被载入时,Awake被调用,一般用于创建变量。
State
一个初始化函数,仅在Update函数第一次被调用前调用,一般用于富裕变量值。
Reset
重置与默认值。
OnTriggerEnter
Collider进入trigger时调用OnTriggerEnter,一般用于判定物体碰撞到角色。
OnTriggerExit
Collider停止触发trigger时调用OnTriggerExit。
OnTriggerStay
当碰撞体接触触发器时,OnTriggerStay将在每一帧都调用。
二.2插件介绍
1、TextMeshpro:
是该引擎Unity收购的插件,足以看出他的强大,强大的UI功能受不少开发者喜爱,这款组件解决了国内开发者在Unity里无法进行文字渲染,不会出现乱码情况,你可以经过网格渲染,也可以经过UI渲染,其中最著名的一个技术——SDF,在我们传统的渲染技术中,都是通过像素代表字符形状,而这个新技术是是把输入的字符串放到一个集合中,形成字符状态,它的优点是字符不管如何缩放都可以精准的渲染出清晰的字符。
2、NavMeshAgent:
作为寻路系统的核心组件,有了这个容器,可以生成导航网格,这个NavMesh可以设置我们预制体的活动范围。
二.3开发过程中使用的软件介绍
1、Unity3D:
功能插件资源都非常成熟,能有效的缩减开发时间,该引擎界面交互友好,及时不懂编程的人也可以轻松做出一款小游戏,常见的平台都可支持。
2、3dsMax:
如果说到3dmax三维动画渲染和制作的软件,我想3dmax有它自己的一席之地,开发中可以通过他建造各种场景模型和人物模型,可以对材质进行处理。
3、VisualStudio:
拥有非常成熟的开发工具,在主流的编码软件算得上是非常成熟了,拥有着开发者所需要的工具,例如代码管控、UML、IDE等等,VS对各种平台有着高度的适应性。
4、Photoshop:
PS是一款可以处理图像的工具,可以利用他对图片做需要的编辑操作,PS支持多个常用平台。
二.4输出游戏平台
通过调查,Windows平台性能游戏在性能的限制和平台使用量占有优势,所以决定将会输出为Windows。
第三章游戏需求设计
三.1游戏基本介绍
主角Henry是宇宙中一万亿颗星球中的一员,作为一名维护自己星球和平的保卫队员,他的日常就是在自己的领域上巡逻,有天他接到总部的通知,称Tw-1空间站失去了连接,在最后一次连接时,总部收到了该空间站的求救信号,信息表明,空间站被外星种族MAX突袭,并侵占了所有资源,Henry的任务就是到达Tw-1空间站,消灭所有敌人,并收集所有被抢占的资源,当然你可以邀请你的战友Jack与你协同作战!
在游戏菜单中选择开始游戏,一名玩家作为局域网中的主机,以参数的形式建立主机名,其他玩家寻找该局域网并进行连接,连接完成后进行数据的传递与同步,联机完成则玩家会出生在停机坪,等待小伙伴们连接成功,就可以和小伙伴控制自己的角色进行上下左右移动,空格键为射击键,穿过一座桥,就到达空间站,空间站里有不少敌人,玩家需要操作自己的人物消灭所有的敌人,同时玩家还需要收集空间站中因掠夺散落一地的资源,操控人物触碰即可拾取,当所有敌人被消灭,资源都回收,游戏就获得胜利。
三.2游戏功能
三.2.1局域网的建立、连接
主服务器端建立后,通过UDP协议广播地址,内容包括服务器的id、服务器组、主机的名字还有ip地址,而客户端通过接受到广播后,会在列表中添加相关信息,同时同步自身信息到主服务器端,从而建立连接。
三.2.2游戏界面
游戏需要一个游戏菜单来引导玩家进行开始和退出游戏,在游戏过程中,有血条的显示,让玩家清晰的知道自己的血量和敌人的血量,也能知道已经收集多少被强占的资源。
图3-1游戏菜单
图3-2血条设想
三.2.3游戏控制
玩家控制键盘,控制上下左右,空格射击,触碰资源即拾取。
三.2.4游戏设计
(1)玩家需要控制角色进行射击敌人,躲避敌人攻击,通过上下左右移动,空格射出子弹,
(2)敌人自动巡逻并检测到角色进入特定范围内会主动进行攻击
(3)玩家和敌人显示血条,当死亡时销毁并播放死亡音效
(4)当检测碰撞到资源时,玩家资源数+1
(5)玩家清理完敌人,收集完全部空间站中的资源即游戏胜利
图3-3游戏逻辑图
第四章游戏功能实现
四.1UnityNetwork
NetworkManager[1](如图1),就如他的名字,是一个网络管理器,用于管理从预制体进行实例化网络对象,开发者可从派生一个类去继承又HLAPI实现的NetworkManager,这个组件可以进行游戏的状态管理、游戏的派生管理、游戏的场景管理、游戏中网络的各项自定义等等。
四.1.1UnityManager
添加网络管理器,NetworkManager是unity的组件(如图1),就如他的名字是一个网络管理器,开发者可从派生一个类去继承又HLAPI实现的NetworkManager,并且可以通过自己的需求去编写任何他可以提供的虚拟函数,这个组件可以进行游戏的状态管理、游戏的派生管理、游戏的场景管理、游戏中网络的各项自定义等等。
图4-1网络管理器
四.1.2UnityManagerHUD
首先创建如图2的网络管理器,需要在Inspector面板上配置和编辑网络相关状态,有一个网络管理器可视化组件,后缀是HUD,为开发者打开了一个高效率的操作界面,十分友好,在游戏中控制显示当前的网络状态,方便开发时进行测试,图里host为本机的服务器段,client为客户端,当我们要处理一些事件时,只需要在服务器上处理,不需要重复处理。
图4-2网络可视化组件
四.2创建Player角色
四.2.1角色模型及控制脚本
1、角色模型如图,进行注册联网对象,找到SpawnInfo属性集从组件面板中,挂上我们的玩家预制体在playerprefab上
图4-3角色模型
3、编写角色控制移动脚本、空格发射子弹,我们的前提是UnityEngine.Networking,再改为NetworkBehaviour,识别到本地玩家后进行区分,不然会控制到不同的客户端的玩家对象。
1.void
Update
()
{
2.
if
(isLocalPlayer
==
false)
3.
return;
4.
}
5.
float
h
=
Input.GetAxis("
Horizontal"
);
6.
v
Vertical"
7.
transform.Rotate(Vector3.up
*
120
Time.deltaTime);
8.
transform.Translate(Vector3.forward
3
9.
(Input.GetKeyDown(KeyCode.Space))
10.
11.
CmdFire();
12.
13.}
四.2.2角色绑定网络并进行Transfrom同步
由于是多人联机,角色不管在服务器端生成还是客户端生成,都需要进行角色的位置同步,而NetworkSendRate是表示网络数据的同步,如果频率太高会使游戏的帧数过高导致网络延迟,但是频率低又会影响玩家游玩体验,具体代码如下:
1.
[Command]
void
CmdFire()//这个方法需要在server里面调用
GameObject
bullet
Instantiate(bulletPrefab,
bulletSpawn.position,
bulletSpawn.rotation)
as
GameObject;
bullet.GetComponent<
Rigidbody>
().velocity
bullet.transform.forward
*
10;
Destroy(bullet,
2);
NetworkServer.Spawn(bullet);
9.
四.2.3角色随机出生点和重生点
有两个随机的出生点和重生点,NetworkStartPosition组件可以用来控制玩家的出生点,原理是访问NetworkStartPosition可以让列表通过Network.StartPositions,帮助在NetworkManager实现OnServerAddPlayer,如图
图4-4随机出生点
重生时,第一步应检测是否为本地角色,第二步进行血量检测,当血量<=0时,则死亡,代码如下:
1.public
TakeDamage(int
damage)
(isServer
//
检测血量这部分只在服务器端
currentHealth
-=
damage;
(currentHealth
<
0)
(destroyOnDeath)
Destroy(this.gameObject);
maxHealth;
Debug.Log("
Dead"
RpcRespawn();
检测到角色死亡后,检测重生的随机点,在这里添加ClientRpc,是为了是调用双端同步以执行任务,方法是序列化客户端的数据并将其发送给客户端以执行,首先服务器将检测到挂在对象Components上的NetworkIdentity然后将RPC命令发送大各个所监视的客户端上,代码如下:
1.[ClientRpc]
2.void
RpcRespawn()//客户端调用
Vector3
spawnPosition
Vector3.zero;
(spawnPoints
!
nul
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 Unity3D 在线 射击 游戏 设计 实现 毕业论文