版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于Unity3D的多人在线射击游戏设计与实现MultiplayerOnlineshootingGamedevelopmentwithUnity3D内容摘要随着生活水平与科技的发展,游戏已经成为现代人缓解压力的一大利器,使用好这一利器,有利于锻炼自己的反应能力拓宽自己的朋友圈等等,而市面上游戏引擎五花八门,其中最吸引眼球的是Unity引擎,它凭借三大优势,孕育了成百上千款高品质游戏,而这三大优势为:第一,Unity引擎功能丰富,插件资源庞大,大大地减少了开发者的对游戏的开发时间;第二,它的可视化界面对开发新手老手都十分友好,容易上手;第三,支持跨平台的开发。本文将构思并实现一个基于Unity引擎技术的多人在线射击游戏,并将其实现。之所以会选择这个课题,是因为我认为射击游戏在过去,现在,未来都是属于不会没落的游戏类型,在世面上,各种射击游戏让人眼花缭乱,反恐精英、穿越火线、绝地逃生、守望先锋等游戏都深受人们喜欢,而联机游戏,既可以让玩家感受游戏内容,还可以与小伙伴一起享受开黑的乐趣,在开发过程中,我使用了Unity中一套称为Mutiplayer的网络体系结构,以局域网的形式进行联机,是一种基于UDP协议的高性能传输层,包含以NetworkManager为核心的管理工具,我可以在脚本中进行网络开发,在开发过程中,这个网络架构非常有效地降低了程序在时间上的复杂度,提高了游戏运行时的实效性,解决了开发联机游戏过程中常会发生的同步问题。关键词:Unity3D;射击类游戏;多人联机;功能实现
AbstractWiththedevelopmentoflivingstandardsandtechnology,gameshavebecomeagreatweaponformodernpeopletorelievestress.Theuseofthisweaponisgoodforexercisingtheirresponsivenessandwideningtheircircleoffriends.Thegameenginesonthemarketarediverse.Oneofthemosteye-catchingUnityengines,ithasnurturedhundredsofthousandsofhigh-qualitygamesbyvirtueofthreeadvantages,andthesethreeadvantagesare:First,theUnityengineisrichinfunctionsandtheplug-inresourcesarehuge,greatlyreducingthenumberofdevelopersThedevelopmenttimeofthegame;second,itsvisualinterfaceisveryfriendlytonovicesandveterans,easytogetstarted;third,one-timedevelopmentsupportsmulti-platformdevelopment.
ThisarticlewillconceiveandimplementamultiplayeronlineshootinggamebasedonUnityenginetechnologyandimplementit.IuseanetworkarchitecturecalledMutiplayerinUnity,whichcontainsNetworkManagerasthecoremanagementtool.Developerscanperformnetworkdevelopmentinscripts,forexample:NetworkIdentitycanbeusedfornon-playergameobjects,aseriesofcomponentsForexample,NetworkTransformandNetworkAnimatorcanbeusedforassistance.ClientRpc,SynCarandotherpackagesareverycomprehensive.Secondly,intermsofhowtomakethegamerun,thisnetworkarchitectureeffectivelyreducesthecomplexityoftheprogramintime,improvestheeffectivenessofthegamewhenitruns,andgreatlysolvesthisproblem.Keywords:Unity3D;shootinggame;Multiplayer;Functionrealization
目录第一章 绪论 绪论选题的目的和意义随着生活水平与科技的发展,游戏已经成为现代人缓解压力的一大利器,使用好这一利器,有利于锻炼自己的反应能力,拓宽自己的朋友圈。所以当人们对游戏要求提高,开发游戏的要求也随之变高。市面上开发游戏的引擎五花八门,根据GameTracker数据排行榜显示,Unity3d与Cocos2D系列引擎,成为全球最主流的两大第三方引擎的供应商,其中最吸引眼球的Unity引擎,它凭借三大优势,孕育了成百上千款高品质游戏,根据有效数据显示,Unity用户超过330万人,每月活跃用户高大70万,市场比例接近百分之四十五,它的优势分为三部分,第一,Unity引擎功能丰富,插件资源庞大,大大的减少了开发者所需的对游戏的开发时间;第二,它的可视化界面对开发新手老手都十分友好,即便是不会编程的人也能快速适应并上手;第三,高度的可跨越平台性,减少了为了适应平台所投入的人力物力资源,作为开发者来说,不管是哪个引擎,都必须为爱好者提供交流的平台,尽量给开发者自己的空间,可以提供丰富的开源组件,也能提供开发者自行设计编辑器的组件。研究现状中国人口基数大,游戏的市场需求大,玩游戏的人口基数大,但大多数人都围绕着热门游戏玩,所以热门游戏就占据了游戏市场中较大的份额,而热门游戏中,例如绝地求生(TPS类)和英雄联盟(MOBA类)就属于国内热门游戏,已经变成了大家交流的一个媒介。游戏除了让人们缓解生活带来的压力外,还能以此为话题进行沟通交流,而游戏市场也是围绕着这两大类去更新玩法,给人带来新鲜的东西,吸引别人进行游戏,本文就TPS类游戏展开设计开发,第三人称射击游戏,也就是我们说的TPS游戏类型,玩家可以看到自己的角色进行行走射击等操作,即为TPS游戏,该类游戏收获了国内外许多玩家的喜爱。相对于第一人称游戏的紧张感和操作感,TPS游戏往往更加有策略性和操作性,玩家通过第三视角全方位的进行掌握局势,通过击杀大量敌人产生刺激感、成就感,从而获得游戏体验。研究内容从最初的小想法到写需求分析、游戏文档,到分析游戏并进行最终开发测试,阅读了许多Unity专业知识书籍以及许多基于Unity3D技术的开发者论坛博客,设计并实现了多人在线射击游戏。首先,为了实现多人联机,我用的是UnityNetworking网络技术。基于UDP的高性能传输层是他最大的特点,可以支持所有游戏类型,底层通过LLPI进行全面控制,在面临如何改善游戏的网络同步问题上,我查阅了非常多的资料,解决了游戏运行时的服务器端与客户端的实效性问题,该游戏在保证运行效果的同时,可以实现客户端与服务器的同步,具有设备要求低,跨平台性能好,运行流畅稳定的特点,其次,为了提高游戏体验,使用TextMeshpro字体组件,有效地丰富玩家的视觉效果,还通过NavMeshAgent组件,用来实现角色进行寻路导航的功能开发,在开发过程中根据游戏功能进行逻辑推理,实现功能后测试中调整游戏数值参数,使游戏更加完善。章节安排本论文分为七章,结构安排如下:第一章:绪论,将会从本课题研究的目的及意义出发,讲述研究现状与研究课题。第二章:介绍开发环境和Unity引擎、还有其他涉及到本次开发的插件和软件。第三章:介绍本次游戏开发在前期的需求设计和构想,包括于设定的游戏背景和游戏玩法规则,考虑该游戏需要拥有的功能和如何实现。第四章:介绍游戏的开发阶段,从功能出发,讲述如何编写脚本实现,包括使用Unity中一套称为Mutiplayer的网络体系结构,以NetworkManager为核心的管理工具,从创建人物、敌人角色,编辑控制脚本,角色的血条控制、子弹的形成、计数器的逻辑,联网的代码逻辑,服务器端和客户端之间的同步问题等。第五章:场景、UI、音效、灯光等的设计与实现,从寻找合适的模型到,进行搭建场景,对界面UI的设计、合适的游戏音效和背景音乐、添加灯光渲染气氛。第六章:游戏完成后,对游戏进行多次的测试,包括界面测试、功能测试,打包封装。第七章:结论和感想,作为论文最后一章,对本次毕业设计开发中的总结,包括学到的知识,开发中的感想。开发工具介绍Unity引擎Unity引擎来源Unity拥有着交互舒适的操作界面,让开发者能够快速上手[4],Scene场景窗口是开发者最熟悉的部分,你可以在这里进行大胆创作,例如摄影机、光源、模型、材质、粒子系统、天空盒等,你可以在这里对你的游戏预制体进行编辑,包括不限于选择物体、旋转物体、移动物体、缩放物体;Game游戏窗口,这个窗口主要用来呈现出完整的动画效果,不能进行编辑,用来渲染Scene中的动画;如果你想知道你正在编辑的对象的具体数据,你对应在Inspector编辑窗口查找,包括不限于名字、标签坐标、角度、大小、身上的组件、脚本等各种属性信息;Hierarchy清单窗口,陈列所有Scene中的预制体;Project项目窗口,你的所有模型素材、组件、脚本等都在这。Unity引擎的特点Unity具备着高效、高度优化、高度集成等优点。Unity引擎的优势第一,Unity引擎功能齐全,插件资源庞大,大大缩短了开发时间,Unity引擎在开发上,为开发人员提供了可视化工具和3D补偿引擎;在脚本上,有着多样的语言环境,还有着非常庞大的IDE社区,在用户体验上,提供了严谨的系统用于处理项目,给合作开发的团队提供了版本管理,只要用过这个引擎的人都会知道Assetstore,这个是他们公司自己所经营的,包含着超过三千种工具、组件。为后续的开发工作提供了非常大的便利,特别注意的是,里面的免费产品的质量也及其高。拥有高度集成的特点,带有粒子、物理、简单模型系统,调用方便,全程可视化调整。第二,所谓所见即所得,即便是不会编程的人也能快速适应并上手,例如说开发时你并不需要对物理了解得多深,引擎的物理系统已经接近完善了;当你想有碰撞检测时,你不需要自行编辑代码,你只需要通过组件和鼠标,就可以实现自己想要的效果;当你希望你的人物可以进行导航寻路,敌人可以自动巡逻,都可以用unity里面强大的组件进行设计吗,虽然不足与3dmax相比专业,但是unity进行初步场景设计也是绰绰有余的,包括场景的烘焙,渲染,制作粒子效果,无论是哪个单拿出来都属于比较有技术性的模块功能,但在该引擎中,你只需要下载几个组件,进行操作设置就能实现大部分你想要的功能,这样也是在减少开发游戏的资金、资源,降低开发游戏的难度,缩短开发游戏的时长。而官方也提供了非常详细的文档说明,并且在18年版本之后新增了中文语言,方便我们进行开发游戏。第三,高度的可跨越平台性,减少了为了适应平台所投入的人力物力资源。该引擎在常见的Win、Linux和Mac系统上都可以进行开发,开发的游戏可以发布到对应的平台。甚至你也可以通过他发布网页游戏,支持常用系统的网页浏览。它的\t"/item/Unity3D/_blank"网页播放器也被Mac所支持。Unity引擎重点常用函数介绍表2-1函数表函数名内容Update当MonoBehaviour启用时,其Update在每一帧被调用。LateUpdate当Behaviour启用时,其LateUpdate在每一帧被调用FixedUpdate当MonoBehaviour启用时,其FixedUpdate在每一帧被调用,常用与物理引擎的调用,以及需要固定时间更新的函数Awake一个初始化函数,当一个脚本势力被载入时,Awake被调用,一般用于创建变量。State一个初始化函数,仅在Update函数第一次被调用前调用,一般用于富裕变量值。Reset重置与默认值。OnTriggerEnterCollider进入trigger时调用OnTriggerEnter,一般用于判定物体碰撞到角色。OnTriggerExitCollider停止触发trigger时调用OnTriggerExit。OnTriggerStay当碰撞体接触触发器时,OnTriggerStay将在每一帧都调用。插件介绍TextMeshpro:是该引擎Unity收购的插件,足以看出他的强大,强大的UI功能受不少开发者喜爱,这款组件解决了国内开发者在Unity里无法进行文字渲染,不会出现乱码情况,你可以经过网格渲染,也可以经过UI渲染,其中最著名的一个技术——SDF,在我们传统的渲染技术中,都是通过像素代表字符形状,而这个新技术是是把输入的字符串放到一个集合中,形成字符状态,它的优点是字符不管如何缩放都可以精准的渲染出清晰的字符。NavMeshAgent:作为寻路系统的核心组件,有了这个容器,可以生成导航网格,这个NavMesh可以设置我们预制体的活动范围。开发过程中使用的软件介绍1、Unity3D:功能插件资源都非常成熟,能有效的缩减开发时间,该引擎界面交互友好,及时不懂编程的人也可以轻松做出一款小游戏,常见的平台都可支持。2、3dsMax:如果说到3dmax三维动画渲染和制作的软件,我想3dmax有它自己的一席之地,开发中可以通过他建造各种场景模型和人物模型,可以对材质进行处理。3、VisualStudio:拥有非常成熟的开发工具,在主流的编码软件算得上是非常成熟了,拥有着开发者所需要的工具,例如代码管控、UML、IDE等等,VS对各种平台有着高度的适应性。4、Photoshop:PS是一款可以处理图像的工具,可以利用他对图片做需要的编辑操作,PS支持多个常用平台。输出游戏平台通过调查,Windows平台性能游戏在性能的限制和平台使用量占有优势,所以决定将会输出为Windows。游戏需求设计游戏基本介绍主角Henry是宇宙中一万亿颗星球中的一员,作为一名维护自己星球和平的保卫队员,他的日常就是在自己的领域上巡逻,有天他接到总部的通知,称Tw-1空间站失去了连接,在最后一次连接时,总部收到了该空间站的求救信号,信息表明,空间站被外星种族MAX突袭,并侵占了所有资源,Henry的任务就是到达Tw-1空间站,消灭所有敌人,并收集所有被抢占的资源,当然你可以邀请你的战友Jack与你协同作战!在游戏菜单中选择开始游戏,一名玩家作为局域网中的主机,以参数的形式建立主机名,其他玩家寻找该局域网并进行连接,连接完成后进行数据的传递与同步,联机完成则玩家会出生在停机坪,等待小伙伴们连接成功,就可以和小伙伴控制自己的角色进行上下左右移动,空格键为射击键,穿过一座桥,就到达空间站,空间站里有不少敌人,玩家需要操作自己的人物消灭所有的敌人,同时玩家还需要收集空间站中因掠夺散落一地的资源,操控人物触碰即可拾取,当所有敌人被消灭,资源都回收,游戏就获得胜利。游戏功能局域网的建立、连接主服务器端建立后,通过UDP协议广播地址,内容包括服务器的id、服务器组、主机的名字还有ip地址,而客户端通过接受到广播后,会在列表中添加相关信息,同时同步自身信息到主服务器端,从而建立连接。游戏界面游戏需要一个游戏菜单来引导玩家进行开始和退出游戏,在游戏过程中,有血条的显示,让玩家清晰的知道自己的血量和敌人的血量,也能知道已经收集多少被强占的资源。图3-1游戏菜单图3-2血条设想游戏控制玩家控制键盘,控制上下左右,空格射击,触碰资源即拾取。游戏设计玩家需要控制角色进行射击敌人,躲避敌人攻击,通过上下左右移动,空格射出子弹,敌人自动巡逻并检测到角色进入特定范围内会主动进行攻击玩家和敌人显示血条,当死亡时销毁并播放死亡音效当检测碰撞到资源时,玩家资源数+1玩家清理完敌人,收集完全部空间站中的资源即游戏胜利图3-3游戏逻辑图游戏功能实现UnityNetworkNetworkManager[1](如图1),就如他的名字,是一个网络管理器,用于管理从预制体进行实例化网络对象,开发者可从派生一个类去继承又HLAPI实现的NetworkManager,这个组件可以进行游戏的状态管理、游戏的派生管理、游戏的场景管理、游戏中网络的各项自定义等等。UnityManager添加网络管理器,NetworkManager是unity的组件(如图1),就如他的名字是一个网络管理器,开发者可从派生一个类去继承又HLAPI实现的NetworkManager,并且可以通过自己的需求去编写任何他可以提供的虚拟函数,这个组件可以进行游戏的状态管理、游戏的派生管理、游戏的场景管理、游戏中网络的各项自定义等等。图4-1网络管理器UnityManagerHUD首先创建如图2的网络管理器,需要在Inspector面板上配置和编辑网络相关状态,有一个网络管理器可视化组件,后缀是HUD,为开发者打开了一个高效率的操作界面,十分友好,在游戏中控制显示当前的网络状态,方便开发时进行测试,图里host为本机的服务器段,client为客户端,当我们要处理一些事件时,只需要在服务器上处理,不需要重复处理。图4-2网络可视化组件创建Player角色角色模型及控制脚本1、角色模型如图,进行注册联网对象,找到SpawnInfo属性集从组件面板中,挂上我们的玩家预制体在playerprefab上图4-3角色模型编写角色控制移动脚本、空格发射子弹,我们的前提是UnityEngine.Networking,再改为NetworkBehaviour,识别到本地玩家后进行区分,不然会控制到不同的客户端的玩家对象。void
Update
()
{
if
(isLocalPlayer
==
false)
{
return;
}
float
h
=
Input.GetAxis("Horizontal");
float
v
=
Input.GetAxis("Vertical");
transform.Rotate(Vector3.up
*
h
*
120
*
Time.deltaTime);
transform.Translate(Vector3.forward
*
v
*
3
*
Time.deltaTime);
if
(Input.GetKeyDown(KeyCode.Space))
{
CmdFire();
}
}
角色绑定网络并进行Transfrom同步由于是多人联机,角色不管在服务器端生成还是客户端生成,都需要进行角色的位置同步,而NetworkSendRate是表示网络数据的同步,如果频率太高会使游戏的帧数过高导致网络延迟,但是频率低又会影响玩家游玩体验,具体代码如下:1.
[Command]
2.
void
CmdFire()//这个方法需要在server里面调用
3.
{
4.
GameObject
bullet
=
Instantiate(bulletPrefab,
bulletSpawn.position,
b ulletSpawn.rotation)
as
GameObject;
5.
bullet.GetComponent<Rigidbody>().velocity
=
bullet.transform.forward
*
10;
6.
Destroy(bullet,
2);
7.
NetworkServer.Spawn(bullet);
8.
}
9.
}
角色随机出生点和重生点有两个随机的出生点和重生点,NetworkStartPosition组件可以用来控制玩家的出生点,原理是访问NetworkStartPosition可以让列表通过Network.StartPositions,帮助在NetworkManager实现OnServerAddPlayer,如图图4-4随机出生点重生时,第一步应检测是否为本地角色,第二步进行血量检测,当血量<=0时,则死亡,代码如下:public
void
TakeDamage(int
damage)
{
if
(isServer
==
false)
return;//
检测血量这部分只在服务器端
currentHealth
-=
damage;
if
(currentHealth
<=
0)
{
if
(destroyOnDeath)
{
Destroy(this.gameObject);
return;
}
currentHealth
=
maxHealth;
Debug.Log("Dead");
RpcRespawn();
}
}
检测到角色死亡后,检测重生的随机点,在这里添加ClientRpc,是为了是调用双端同步以执行任务,方法是序列化客户端的数据并将其发送给客户端以执行,首先服务器将检测到挂在对象Components上的NetworkIdentity然后将RPC命令发送大各个所监视的客户端上,代码如下:[ClientRpc]
void
RpcRespawn()//客户端调用
{
if
(isLocalPlayer
==
false)
return;
Vector3
spawnPosition
=
Vector3.zero;
if
(spawnPoints
!=
null
&&
spawnPoints.Length
>
0)
{
spawnPosition
=
spawnPoints[Random.Range(0,
spawnPoints.Length)].transform.position;
}
transform.position
=
spawnPosition;
}
角色血条控制并进行检测同步当前角色血量为100,首先要做一个碰撞检测,当子弹碰撞到角色后,子弹需要自我销毁,再处理角色的血量,调用takedamage这个方法,把血量-10,这里有一种逻辑,当销毁某些东西时,应该调用NetworkIdentity.OnDestroy,最好的方法是在服务器端销毁它,然后与每个客户端同步,这样就可以减少如果客户端销毁时,服务器端的物体会突然消失的问题,调用服务器检测到后,预制件销毁,服务器端也同步销毁。public
class
Bullet
:
MonoBehaviour
{
void
OnCollisionEnter(Collision
col)
{
GameObject
hit
=
col.gameObject;
Health
health
=
hit.GetComponent<Health>();
if
(health
!=
null)
{
health.TakeDamage(10);
}
Destroy(this.gameObject);
}
}
血条始终保持面向相机,代码如下:void
Update
()
{
transform.LookAt(Camera.main.transform);
}
射击功能子弹的生成首先实例化子弹,子弹的位置,子弹的攻击力为10,当子弹射出并碰撞后,销毁子弹public
GameObject
bulletPrefab;//子弹
public
Transform
bulletSpawn;//子弹位置
3.
void
OnCollisionEnter(Collision
col)
{
4.
GameObject
hit
=
col.gameObject;
5.
Health
health
=
hit.GetComponent<Health>();
6.
if
(health
!=
null)
{
7.
health.TakeDamage(10);
}
8.
Destroy(this.gameObject);
9.
}10.
}
子弹绑定网络并进行同步做完前面的工作后,测试发现,子弹射中后可以出发掉血,但是当由于涉及后回触发TakeDamage方法,如果其中一方接触到对方并且销毁时,由于网络延迟,另一方在打中对方前就进行了销毁处理,导致双方数据的不同步,这是因为先前子弹只是在客户端生成,并没有进行同步,所以我们需要把子弹绑定网格再同步到各个客户端,首先,子弹要在网络生成,需要把子弹注册到网络管理器中,在此之前,要在子弹上挂上NetworkIdentify,增加Command特性,原理是代码在服务器端运转,但需要在客户段调用,把子弹同步到各个客户端,这时候可以用Spawn方法,可以把指定生成在各个客户端,当具有网络徽标的预制件挂在服务器Spawn上时,该预制件将调用OnstarServer,而后进行调配netid,当完成这个注册这个流程后,会更改对应的网络物体列表,接着查找所有客户端带有网络标识的物体,如果状态为TRUE,则将MsgType.ObjectSpawn或是MsgType.ObjectSpawnScene传递到预制体上,在注册列表中的预制体里面寻找对应的物体,找到后更新注册到NetworkScene的列表中,需要更新相关信息,这时客户端上的子弹没有速度,我们得先进行数据的同步,先在子弹上挂上组件获取他的位置和状态,同步刚体组件。因为子弹的速度不是时刻变化,所以只需要同步一次即可,从客户端调用参数的前提条件是可以对网络进行序列化,以便可以对参数进行反序列化。在开发时,由于我的粗心,发生了无法调用的错误,在我查阅资料后发现,我的客户端上忘记了挂上NetworkIdentity组件,像spawn、destroy这些都需要有一个NetworkIScene为前提。SynCar特性是解决这个方法的核心,通过这个方法,如此一来可以使服务器的值同步到客户端上,让双端数据保持一致,防止因为一端改变而影响另外一端,出现错误。1.
[Command]
2.
void
CmdFire()//这个方法需要在server里面调用
3.
{
4.
GameObject
bullet
=
Instantiate(bulletPrefab,
bulletSpawn.position,
bulletSpawn.rotation)
as
GameObject;
5.
bullet.GetComponent<Rigidbody>().velocity
=
bullet.transform.forward
*
10;
6.
Destroy(bullet,
2);
7.
NetworkServer.Spawn(bullet);
8.
}
9.
}
创建敌人预制体敌人模型设置有两种敌人,一种血量为100,一种血量为200,为了增加难度,不同敌人的伤害也不同。图4-5敌人模型敌人绑定网格并进行同步作为网络对象的一个非常基本的组成部分,双端必须确定它甚少有没有networkID,这是用来指示对象的网络状态,例如它是属于双端中的哪一端,相对于具体是客户端的哪个,拥有什么权限等图4-6网络状态敌人随机生成实例化随机生成点,并设置随机数量,代码如下:public
GameObject
enemyPrefab;
public
int
numberOfEnemies;
public
override
void
OnStartServer()
{
for
(int
i
=
0;
i
<
numberOfEnemies;
i++)
{
Vector3
position
=
new
Vector3(Random.Range(-6f,
6f),
0,
Random.Range(-6f,
6f));
Quaternion
rotation
=
Quaternion.Euler(0,
Random.Range(0,
360),
0);
GameObject
enemy
=
Instantiate(enemyPrefab,
position,
rotation)
as
GameObject;
NetworkServer.Spawn(enemy);
}
}
美术实现场景外部场景游戏中的场景,拥有神秘的飞船和陨石,围绕着主题科幻搭建,灯光也改为较为昏暗,让玩家游玩时有种神秘的感觉,设置玩家的出生点和重生点都在飞船坪上随机生成,从这里开始进行游戏图5-1场景1内部场景在内部装饰上,从地砖到墙,再到每一样东西,都是一个个搭建出来的,房间内饰有控制室、各类科技用品图5-2-场景2菜单UI开始菜单,有PLAY、exit等按钮,当点击PLAY即进入场景2,为游戏主界面。当通过鼠标按下该按钮,就可以载入所要进行的游戏图5-3-TEXTMESHPRO首先导入TEXTMESHPRO组件,设计好菜单字体与颜色如图,其次,为了给玩家,按钮按下后的回馈,进行调节按钮图5-4-调节面板制作结束菜单,有继续游戏和退出按钮。图5-5-菜单血条UI编辑血条UI永远面向摄像机的代码using
UnityEngine;
using
System.Collections;
public
class
LookAtCamera
:
MonoBehaviour
{
void
Update
()
{
transform.LookAt(Camera.main.transform);
}
}
图5-6-血条游戏音效本游戏的风格关键词是“外太空”、“科幻”“神秘”所以在选择游戏音效时遵循这样的风格,在游戏前期和后期,菜单部分,选择了比较舒缓的背景音乐,而在游戏进行中,选择为比较紧张刺激的背景音乐,营造出一种十分紧张的刺激氛围,增加玩家游戏的沉浸感和代入感[3]。为了提高玩家的用户体验,游戏时,射击时伴有声音、角色和敌人死亡后的音效声都进行设置。游戏灯光灯光是经常被开发者或玩家忽视的一样游戏感受,但是灯光在游戏中属于非常重要的部分,好的游戏的灯光要求非常高,灯光可以被用来营造出特定氛围的环境,也可以引出需要被关注的物体,灯光不仅仅只是用来照亮场景,而是需要好好利用起来,唤起一种玩家游玩时的现实感,有目的的照亮该场景的建筑与物体甚至是角色,提高玩家游玩时的沉浸感,让玩家能更深刻的被吸引到故事和游戏情景当中。图是初始游戏场景时的灯光,图是增加了三个灯光组件后的场景,对比非常明显,由于本游戏是设定在太空当中,神秘、科幻、梦幻是该游戏的关键词。图5-7灯光对比游戏测试游戏测试游戏测试的重要新就相当于人身体中的一个器官,这个器官可以保证着人体(游戏)的健康(游戏质量),并且在现在的开发行业里,游戏测试是不可或缺的一个岗位,目的是为了发现游戏中存在或者可能存在的缺陷,需要进行模拟操作一遍,通过测试发现问题后,有利于开发者进行改善。总之,游戏测试是为了发现问题后进行提高游戏质量,按以往我们说的传统的软件测试包括黑盒测试或白盒测试,并且游戏比其他软件更特殊,他的测试含有可玩性、游戏世界的平衡性、游戏文化风格等都是游戏测试中的一部分,这是相对于其他软件所不一样的。从游戏的开始需求调研时,就可以进行测试了,例如音游游戏,就可以去市面上找到相同类型的游戏进行测评,对未来测试自己的游戏是非常大的帮助的,游戏开发时,通过游戏文档、需求文档等文件进行编写游戏测试文档,所谓萝卜青菜各有所爱,游戏也是如此,我们要通过进行用户调研,开发出喜闻乐见的游戏,而后期成型后,像比如说游戏的压力测试、兼容测试、网络测试、适配性测试等等也是非常重要.表6-1游戏信息表游戏名字:SpaceHulk游戏类型:TPS游戏风格:科幻是否联网:是表6-2游戏UI测试游戏UI部分(是否正常?)开始菜单—PLAY是开始菜单—QUIT是结束菜单—NEWGAME是结束菜单—QUIT是血条显示是表6-3游戏功能测试游戏功能(是否正常?)移动是射击是伤害、血条计算是拾捡东西是相机跟随是表6-3游戏音效测试游戏灯光音效(是否正常?)游戏灯光是菜单背景音乐是菜单内音效声是游戏背景音乐是表6-4游戏音效测试游戏场景模型(是否正常?)天空盒是大环境(宇宙)是建筑是内饰是玩家模型是敌人模型是总结与期望随着我的毕业论文到了写总结的部分,也意味着我四年青春岁月的大学生涯也随之快要接近尾声了,毕设和论文从前期设计到后期开发测试到收尾工作,都让我感触颇深,在完成的过程中出现了许多bug,也使我对自身的能力认识的一个过程,从提出设想,到去学习制作,这个过程让我受益匪浅,只有每天不断的学习充实才让我觉得有安全感。在开始前,我认为的毕业设计,不过就是对我四年来学习的的一个总结,但昨完毕业设计的我认为,这只是学习的一个开始,我需要对自身水平有个清晰的定位,以前的知识需要去学习,未来发展出来的知识也得去学习,学习是一件长期积累的过程,没有捷径,没有终点,只有不断鞭策自己往前走,再往前走,才是生命的真谛。本论文主要介绍了多人联机射击游戏,在设计开始之前,我在白纸上进行了一次大脑风暴,把想做的功能都罗列了出来,随着越写越多,发现自己写的功能都是常见的多人射击游戏,不够新颖,没有创意,而且功能庞大,有点眼高手低,于是我把基本功能都圈了出来,决定先实现出,有些看似简单的功能,在实现起来时却遭遇困难,非常感谢我的同学们和老师,在我开发过程中给了我许多建议,通过在网上查阅资料,观看教学视频,结合自己的理解,不断的攻破一道道难题,从前期的需求设计,开发的准备,素材的查找,开发时自学各种软件插件,开发后的优化等,都不是那么简单的,基本上完成了初始的功能,ui界面有开始菜单,结束菜单,血条的显示,实现了模型的移动射击,血量血条,随机生成敌人,重生点,子弹射击逻辑,还有本文最重要的联机部分,采用的是Mutiplayer的网络架构,在场景的构造过程中,以科幻风格为目的去完成,界面简单友好,运行稳定,从开发前期到后期渐渐总结了一个规律,所有功能在服务器端处理,比如敌人的生成位置、子弹的生成、子弹同步的逻辑,敌人自动巡逻的逻辑、检测范围内玩家自动攻击。一个游戏,他不仅仅只是编写代码,他还需要结合逻辑,需要会处理素材,需要不断的学习新的插件组件,利用好网络资源,能让我的游戏变得完整,在这个过程中,联机作为我毕业设计的亮点,也是难点,就让我花费了很多时间去研究,在发开时,由于没有经验,代码比较冗杂,处理重复多,致使游戏实效性低下,后来以一个原则,则是先在服务器端进行更新数据,再通过客户端进行同步。游戏虽然制作成功,但是存在着以下问题: 1. 场景制作时间过长,导致游戏功能较为单一,可玩性不高。 2. 对于模型的处理方面的知识比较欠缺,也花了些时间学习。3. Unity中有许多强大的组件,没有吃透,这块在未来也需要一直学习。随着技术的不断上升,电脑配置不停的提高,游戏开发环境越来越完善,开发者越来越多,做出的好游戏也是数不胜数,而游戏的游戏效果也是越来越精致,游戏已经成为大众化的一项鱼类项目,反之,由于当代的玩家玩的游戏
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026广东中山市翠亨新区(南朗街道)秋季学期招聘公办幼儿园合同制教职工14人备考题库附参考答案详解【黄金题型】
- 2026福建福州市文儒坊人力资源有限公司招聘1人笔试题库及完整答案详解【网校专用】
- 2026新疆和田都玉客运有限责任公司面向社会招聘工作人员2人模拟试卷含答案详解(夺分金卷)
- 2027山西联考忻州事业单位招聘发布时间模拟试卷(名校卷)附答案详解
- 2026年赣县区乡镇幼儿园园长公开竞聘考前冲刺试卷【达标题】附答案详解
- 2026下半年四川成都市大邑县教育系统招聘编外教师教师146人考前冲刺密卷附答案详解【突破训练】
- 2026山西吕梁市孝义市第二批青年就业见习报名工作79人备考题库及答案详解(全优)
- 2026年海南省生态环境监测中心公开招聘事业编制人员(第1号)考前冲刺密卷及答案详解【典优】
- 2026湖南张家界慈利县科技和工业信息化局招聘公益性岗位工作人员1人模拟试卷带答案详解(培优A卷)
- 2026首都经济贸易大学高水平人才引进5人(第二批)考前冲刺试卷及参考答案详解(夺分金卷)
- 办公室装修装饰报价单
- 各专业文件准备目录-麻醉科药物临床试验机构GCP SOP
- DL-T5498-2015330kV-500kV无人值班变电站设计技术规程
- 2024年事业单位人事聘用合同范本(标准版)
- 厂房弱电智能化系统设计方案
- 防呆防错培训课件
- 年产100万吨石灰石项目可行性分析报告
- 软件项目培训方案
- 高一新生分班考试数学试卷含答案
- 化工能源与节能技术
- 2023年浙江浦江县部分国有企业公开招聘笔试参考题库附带答案详解
评论
0/150
提交评论