《MMORPG游戏论文 - 检测 .doc》由会员分享,可在线阅读,更多相关《MMORPG游戏论文 - 检测 .doc(34页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1. 绪论 选题的目的和意义2017年我国游戏市场销售收入2031.1亿元,近年来,中国经济以8%的速度稳步增长,过去2017年,中国游戏市场的实际销售收入为2036亿1000万元,同比增长23%。这是第一次突破了600亿的规模。游戏产业已成为经济市场中增长最快的热点,也是公众关注的焦点。游戏是文化创意产业的一部分。创意经济是知识经济的核心。它也是一种重要的经济表现形式。没有创新就没有新经济(1)。游戏设计是文化艺术创意与商品生产相结合的产物。游戏产业的发展对中国经济发展具有重要意义。游戏的发展经历了2D游戏和3D游戏两个阶段。游戏设计,尤其是3D游戏开发,结合了物理模拟、计算机图形学和网络通
2、信,以及近年来移动平台技术的快速发展。游戏的发展趋势是向轻量化、微观创新和时间碎片化的快速发展,如“愤怒的小鸟”、“国王的荣耀”和“绝对的”。地面上的玩家人数超过一亿人 国内外的发展状况 90年代初国外的3D游戏开始起步,第一个3D的第一人称射击游戏是回到美国KAMAK的德国总部。最早的3D游戏引擎是由它开发的末日引擎。国内3D游戏始于2003,第一次自主研发,目前对3D游戏的研究很多,但由于国内3D技术起步较晚,与国外相比,从设计理念到技术层面,技术方面还不算小。他开发生产,国内可以自主研发的3D游戏引擎,只有少数几个。网络公司、大多数游戏公司和游戏开发商仍在使用由国外大型游戏公司开发的游戏
3、引擎,如Uny3D、S幻想和FROST。虽然近年来涌现出了许多优秀的游戏团队和游戏公司,但也出现了几款高质量的3D游戏,如“古剑滩”系列、剑与仙系列等,但在国际游戏中还存在着不可逾越的鸿沟。“模拟人生”、“魔兽世界”、“战场”系列等等。这也使得国内玩家的财富源源不断地流向国外。1.3 论文组织结构从原来的想法到实践的分析,结合专业的3D游戏开发数据,设计并制作了一个MMORPG游戏。本文介绍了游戏的制作步骤,包括一系列代码和内部结构链接。全文共分为六个部分,主要内容如下:第一部分:绪论,主要介绍毕业设计的背景、国内外相关研究的现状以及设计的总体介绍。第二部分:介绍了3D游戏的普遍结构以及Uni
4、ty3D的大致介绍;第三部分:游戏的创意,游戏系统的功能设计;第四部分:详细介绍了游戏各部分的制作,明确游戏的内在联系,采取自下而上的步骤。第五部分:运行游戏测试、包装和包装;第六部分:结论、博弈缺陷及未来改进。34 2. 3D游戏的技术知识2.1 3D图形库API(Application Programming Interface)函数是程序员经常调用的3D图形库。图形卡与应用程序之间的接口定义为Uny3D图形库。为了与之通信,硬件驱动程序在图形卡中启动强大的3D图形处理功能,并产生3D游戏。非常快的是3D图形库的高度可移植性。在设计中严格遵循计算机图形学原理。它符合普通人对3D和光线的认知
5、。点、线、面的三维特征需要程序员使用这些API函数,适当的光照、合理的坐标系和石膏。使用固定参考帧,可以形成更逼真的3D场景2 。API函数被定义为独立于任何编程语言的一组规范。具体语言的实现描述是由国际标准化组织制定的。许多三维演示系统使用3D图形库作为生成和控制3D图形的编程接口。2.2 Unity3D2.2.1 Unity3D简介UNYT3D是由Unity技术开发的综合性专业游戏引擎。它的功能使开发者能够专注于游戏的设计,而忽略了底层技术的实现,从而实现了快速发展的目标。统一类似于导演,搅拌机游戏引擎,Vioobe或扭矩游戏生成器。软件编辑器在Windows和Mac IOS下运行3 。主
6、要特点有:图形电源:DirectX和OpenGL图形渲染库,带有内部封装,带有一些常用的渲染组件和着色器脚本。物理模拟:UNYDIS3D不仅集成了NVIDIA PrACX物理引擎,还集成了游戏中使用的物理组件,如碰撞体、连接等。跨平台:可以向Windows、Mac、iOS、Android、Xbox、Wii或PS3平台发布游戏,还可以使用Unity Web播放器或Flash插件发布Web游戏以支持MAC和浏览。资源商城:开发者可以在资源商城购买其他人的资源(代码、模型等)以高效地重用。资源服务器:一个统一的资源服务器是一个附加版本控制的产品,但它更适合于不同的位置的人在游戏团队一起工作(程序,计
7、划,艺术)。性能分析器:在引擎中使用分析器分析器,开发人员可以在CPU和GPU的不同阶段对效率进行分析,它们由编辑器或设备连接。2.2.2 Unity3D基本概念完整的UNITY3D程序与许多场景(场景)相结合,每个场景包含多个游戏对象(游戏对象),每个游戏对象可以具有多个组件(组件),其中从MonoBehavior继承的脚本组件被初始化、更新等;我们在现场看到了。内容由照相机(照相机)呈现和控制。场景(场景):场景是UnyD3D程序的基本单元,任何UnyT3D程序由几个场景组成,程序通过脚本在场景之间跳跃。场景是以场景图的形式组织起来的。场景图实际上是一个树结构,每个节点都是一个游戏对象。对
8、象和对象之间存在父子关系,即当父对象移动、旋转和缩放时,子级对象也会一起改变5 ,如图2-1所示。图2-1 旋转一个父节点同时它的子节点也跟着旋转游戏对象:在场景中,场景图是以场景图的形式组织的。场景图实际上是一种树形结构,树层次中的节点是在添加特定组件(如渲染网格、摄像机、光源等)之后具有实际功能的对象,并且可以将游戏对象打包成预处理格式文本。重复使用方便6 。组件(组件):组件可以是网格(网格)、光源(照相机)、照相机(照相机)、粒子系统(粒子)、物理碰撞体(Collider)、布(布)、连接器(关节)、声音(音频)、动画(动画)和最重要的脚本(脚本)。UnyD3D的设计是基于面向对象的理
9、论,UnyT3D支持三种脚本语言C、JavaScript和BOO。如果对象是从单行为脚本对象继承的,则生命周期将移交给UnyTy3D进行管理,如图2-2所示。图2-2 MonoBehavior的生命周期3. 游戏设计3.1 游戏创意游戏也遵循以上三个特点,下面是简单的游戏策划:游戏名称:醉仙游戏类型:MMORPG类游戏游戏平台:Android游戏模式:闯关模式游戏玩法:玩家有初始装备,可以在开始进行基础攻击。玩家首先进入的是新手村,进行操作的熟练,以及熟悉游戏环境。然后以任务驱动式的方式进行游戏。正式的游戏在战斗场景进行,按照任务目标完成要击杀的怪物的数量,然后打败最后boss,完成任务,并获
10、得相应的奖励,以用来装备的升级和购买。游戏操作:界面左下角有操作人物移动的摇杆,控制可控制人物任意方向移动。右下角有技能释放键,分为一个主技能,三个副技能。3.2 游戏框架结构设计如前文所述,一个游戏包含多个场景,游戏模块为游戏提供了一些必要的功能。这些功能是完全独立的和所有的场景。他们不知道卡片到底有多少等级,卡片的内容是什么。他们的主要任务是与游戏的控制单元交换信息以支持游戏。核心模块是图形渲染和物理仿真。3.3 游戏层次结构设计如前所述,UnyD3D中的每个场景根据树层次结构来组织,并且每个游戏对象可以具有多个组件。因此,整个游戏系统的实施必须符合本规范。在本规范中,为了满足软件设计中高
11、内聚和低耦合的原则,采用MVC模型设计了一个层次结构的游戏。其优点是游戏的结构简单明了,三层相互隔离,不相互影响。扩展方便。如图3-1所示。图3-1 游戏层次结构图游戏系统分为三层:视图层:游戏对象主要添加到场景层次中。这些对象通常是渲染对象或相机。控制层:添加到主相机或空对象的管理脚本组件。这些脚本主要控制相应的功能模块,并与接口管理类和网络在线管理类等其他功能模块进行通信。模型层:添加到渲染对象的逻辑脚本组件,这些组件应用于游戏对象。行逻辑处理。4. 游戏实现4.1 场景渲染实现考虑到游戏的需要,整个场景主要包括天空渲染盒、水面、地形、三维模型、投影、粒子系统等几种渲染对象。,如图4-1所
12、示。图4-1 游戏场景中的渲染对象下面主要介绍一些重要渲染模块的具体实现。4.2 地形在UnyD3D中,地形是通过高度图实现的。高度图实际上是一个矩形灰度。在灰色图案中,颜色以0255表示。0代表黑色,255代表白色。像素越亮,地形越高,255个像素代表最高顶点,而相对的是像素灰度值和顶点。高度可以用公式(1)来表示。其中L是像素的灰度值、分别为Unity3D中定义的地形高度和地形最低点,求得网格顶点的高度y. (1)该程序在绘制地形时读取图片,并生成具有不同高度的矩形网格。这大大减少了游戏模型的尺寸 9 。UnyD3D中的地形模块不仅可以导入高度图,而且可以使用画笔绘制地形纹理、树、草和岩石
13、,这可以大大减少开发者的工作量9 。在一个新的项目之后,创建几个文件夹来存储游戏所需的所有材料,如小部件、材料、场景、脚本等,其中使用GIZOS来存储标签,材料被用来存储材料,场景用于存储场景,脚本用于存储脚本。保存第一个场景并将其放置在场景中,命名为演示,在场景中是空的。在GameObject,3D对象是地形地形。如图4-2所示。图4-2 创建地形在旁边的组建面板就可看到如下工具,如图4-3所示。图4-3 组建面板通过设置面板的地形,我们可以用诸如表面提升、表面模糊和地图刷等工具来编辑地图。经过一系列修改后,原始地图的空白将有一个基本的地图风格游戏。如图4-4所示。图4-4 地图4.3 光照
14、和场景元素当地图被创建时,地图被发现是黑暗的。当点击运行时,地图区域被显示为黑色,因为场景中没有光源,并且通过添加地形将并行光源添加到场景中。,如图4-5所示。图4-5 平行光源你也可以通过调整光源的强度来调整面板的强度。从图4-5可以看出,在添加光源之后,地图显然是明亮的。然后添加场景中的元素,如树、建筑物、装饰等,并通过资产中的导入包选项导入所需的材料。所有的材料将被放置在预设的预置文件夹中,使得它可以很容易地重复使用,节省了硬件资源,减少了大量的劳动重复。如图4-6所示。在元素等放置完毕后,地图就做好了。图4-6 预置元素4.4 导入模型现在开始导入各类模型。Project面板下任意位置
15、右击,选中Import Packet下的custome Packet,如下图4-7所示。并按着模型的存放位置,选择导入即可。图4-7 导入模型这里的模型导入不光有任务以及场景的3D模型,还有2D的贴图,图片等模型,以完成游戏登录界面的搭建。4.5 摄像机因为游戏的场景比较大,我们需要摄像机把角色移动到场景的每一部分。接下来,您需要向相机添加脚本,当您处于角色时可以移动相机。在为摄像机创建脚本之前,我们需要创建一个空的游戏体作为观察对象的目标点,在导入字符模型时很容易替换。我们要创建它只有很少的代码。如图4-8所示。图4-8脚本4.6 游戏UI界面接下来,需要创建一个游戏管理器,它有几个作用,包
16、括UI显示,用户名,赛区选择,以及游戏开始。创建Sprite作为背景,3个Button为三个按键,分别表示用户名,赛区选择,游戏开始。如图4-9所示。页面上的三个按键,按键的背景为sprite,文字为UIText。两者放在同一个空物体下做统一管理,为这个空物体添加UIButton组件,使其具有点击功能。图4-9 游戏管理器点击用户名会自动弹出Tips如图4-10所示,为用户的登录及注册。图4-10 用户名此tips为滑动进入,从一个坐标位置在规定时间内移动到指定坐标位置,此为Unity自带的Tween功能实现,如图4-11所示。图4-11 Tween输入框秩序在需要输入文字的部分添加UITex
17、t组件,并为添加UIInput组件即可实现输入功能。如图4-12所示。图4-12 输入框组件上方的关闭按钮与开始按钮,点击后均为弹出另外一个Tips,均使用相同的方法,只是将运动的坐标反向设置,即可。这里的注册按钮为玩家为没有注册信息的玩家注册信息,在本地有小型数据库,用于保存玩家的注册信息,在“设置密码”与“确认密码”两个信息进行比较,若不一致,方便提醒用户。如图4-13所示。图4-13 密码不一致赛区选择是为了防止服务器压力过大导致崩溃而采取的分流措施,本质上是与后端服务器进行交互,而租赁服务器会有很高的代价,本论文不做过多的设计只说明设计思路。选择不同的赛区时,点击不同的按钮会将相应的信
18、息发送到服务器,服务器做出分配10。如图4-14所示。图4-14 赛区选择多个赛区在窗口不能一次显示完全,这里用的Scroll View,可以实现滑动效果。这里上方显示的“已选”赛区文字用脚本控制,获取按钮上文字,并显示在“已选”位置,脚本如图4-15所示。图4-15 赛区选择脚本开始游戏时可以选定人物角色,并为人物定义名字,这与上述玩家创建自己的账号方法相似。4.7 新手村界面图4-16 异步加载脚本图4-17 异步加载效果图图4-18新手村场景新手村实现的功能主要是玩家购买装备,装备的升级以及任务的领取,体力及历练值的恢复,这里的两个值恢复为根据时间自动恢复。每分钟恢复一个体力值和历练值,
19、这样可以防止玩家过于沉迷游戏,有充足的休息时间。每次进行游戏会消耗一定的体力值。体力值回复的脚本文件及效果图如图4-19和4-20所示。图4-19 体力恢复脚本图4-20 体力恢复Tips这里的金币及钻石是在完成任务以后自动获取的,更名功能与前面设置人物名称的功能相同不作过多解释。新手村的核心功能是背包系统的搭建,UI界面秩序将模型素材按着想要的方式摆放即可,对于N多游戏装备不能完全保存在本地,这样会加重本地内存的负担,导致移动端产生卡顿等现象,影响游戏的体验感。避免这种情况的方式就是将模型保存在服务器,本地只要预加载一定数量即可。装备又有不同的属性,装备的模型也不一样,但是要实现一一对应,将
20、装备的属性信息上再加一条ID属性,模型也对应的加上ID,只要匹配两者的ID一直,其他属性信息就一定是对应的。装备的属性信息存在配置表中为Text文件,用脚本代码控制读取转化为引擎可用的信息。配置表信息如图4-21所示,文件转化脚本见附录1。图4-21装备配置表技能系统的实现与背包系统的实现大体相似,从配置表中读取技能信息,在与模型一一对应。配置表信息如图4-22所示,技能界面效果图如4-23所示,代码与背包相似不作过多阐述。图4-22技能配置表图4-23技能效果图这里技能涉及到升级,技能具有基础等级,点击升级按钮时,技能的等级会升高,这里采用MVC模式。脚本见附录2。任务系统中读取配置表以及配
21、置表的中的信息已按钮一一对应的方式与背包中的方法时相似的。任务系统的核心功能是在玩家领取任务以后,游戏主角回自动跑向NPC完成对话,即任务的交接。这里使用的是自动寻路功能11 。这里只要为主角添加寻路组件,如图4-24所示。图4-24 寻路组件此组件可以设置人物寻路的速度,转弯时的角速度,以及寻路停止时与目标点的距离。寻路的前提是将要寻路的地面烘焙成静态的,相当于为寻路划定寻路路线。烘焙的图4-25烘焙组件方式及效果图如图4-25和4-26所示。图4-26 烘焙效果图游戏的基本功能就是玩家可以操纵游戏主角不同方向的移动,这里需要第三方插件EasyTouch12,插件的导入方式与模型的导入方式相
22、同,导入后在Hierarchy面板会有如4-27所示的组件。图4-27EasyTouch插件添加插件以后为主角添加一个脚本,EasyTouch默认的名称为New joystick,在为主角添加的脚本中让脚本找到这个名字,就可将第三方插件与游戏主角联系起来,脚本文件如下:using System.Collections;using System.Collections.Generic;using UnityEngine;public class Move : MonoBehaviour Animator anim; public float MoveSpeed; void OnEnable()
23、anim = this.GetComponent(); EasyJoystick.On_JoystickMove += OnJoystickMove; EasyJoystick.On_JoystickMoveEnd += OnJoystickMoveEnd; void OnJoystickMove(MovingJoystick move) float PositionX = -move.joystickAxis.x; /获取摇杆偏移摇杆中心的x坐标 float PositionY = -move.joystickAxis.y; /获取摇杆偏移摇杆中心的y坐标 if (move.joystick
24、Name = New joystick1) if (PositionX != 0 | PositionY != 0) transform.LookAt(new Vector3(transform.position.x + PositionX, transform.position.y, transform.position.z + PositionY); transform.Translate(Vector3.forward*Time.deltaTime * MoveSpeed); anim.SetBool(walk, true); void OnJoystickMoveEnd(MovingJ
25、oystick move) anim.SetBool(walk, false); void OnDestroy() EasyJoystick.On_JoystickMove -= OnJoystickMove; EasyJoystick.On_JoystickMoveEnd -= OnJoystickMoveEnd; 这里在移动时与移动后,要执行的是动画的播放和停止。需要为主角添加Animator组件13,在Inspector面板下的Add Component中选中即可,如图4-28所示。图4-28 添加组件同时也要在添加Animator是创建状态基,方便切换任务的状态,这里添加状态基在战斗场
26、景做详细介绍。4.8 战斗场景领取完任务后地图界面上选取要进的地图位置,开始进入战斗场景,这里又涉及到场景的跳转,使用的仍然是异步加载功能进行页面的过度。战斗场景中,主角将要进行的是击杀怪物,首先击杀小怪物,当小怪物全部击杀完成的时候,Boss会自动出现,并主动向主角移动,当接近主角一定范围内的时候,将进行主动攻击。战斗场景的效果图如图4-29所示。图4-29 战斗场景效果图战斗场景中的技能释放按钮与前面Tips中的按钮实现效果相同,将导入的模型摆放在相应的位置后,为按钮添加点击事件,及点击按钮时执行某种事件。添加点击事件脚本见附录3。 当点击按钮时开始播放攻击动画以及动画的特效14。这是战斗
27、场景的主要内容。因为不同的攻击动画以及行走的动画 之间要不停的不定时的切换,因此这里主要运用的是动画状态基。战斗场景中的动画状态基如图4-30所示。图4-30 动画状态基这里不同格子是不同动画,左侧的Parameters控制不同的线路是否为开启状态,如属于开启,动画就会从当前的状态沿线路进入另一个状态,如全部处于关闭状态,就回播放默认动画,这样就可以很方便的实现在行走与攻击状态下的动画之间的切换15。进入战斗场景后,小怪物会自动向主角移动,当到达一定距离时就会发起攻击。引擎会实时监测怪物与主角距离,这里使用监本文件就行距离的检测脚本如下: void Start() navm = GetComp
28、onent(); anim = GetComponent(); void Update() dis = Vector3.Distance(this.transform.position, player.position); if (dis=3) anim.SetBool(Walk, true); navm.SetDestination(player.position); anim.SetBool(attack, false); else anim.SetBool(Walk, false); player.LookAt(this.transform); anim.SetBool(attack,
29、true); if (isDie) anim.SetBool(die, true); 怪物向主角移动采用的是自动寻路,当两者之间距离大于3的时,怪物播放行走的动画,小于3时,开始播放攻击的动画。4.9 生命条敌人在受到攻击的时候,找们并不知道它受到了多少伤害,为了表示它的剩余生命值,我们需要为它创建一个生命条。本文用简单的黄色和红色的地图制作了一个平面模型。我们将使用来改变平面模型UV,使得黄色代表剩余生命值,而红色代表丢失的生命。如图4-31所示。图4-31 生命条创建脚本如下:public class planBlood : MonoBehaviour public GameObject
30、Mounster; public Slider bloodSlider; void Start() bloodSlider.value = bloodSlider.maxValue; void OnTriggerEnter(Collider other) /主技能掉血 if (other.gameObject.tag=Blood) print(主技能生效); bloodSlider.value -= 0.01f; /一技能掉血 if (other.gameObject.tag=Ice) print(一技能生效); bloodSlider.value -= 0.02f; /二技能掉血 if (o
31、ther.gameObject.tag=boss) print(二技能生效); bloodSlider.value -= 0.03f; /三技能掉血 if (other.gameObject.tag = Crow) print(三技能生效); bloodSlider.value -= 0.04f; /怪物死亡 if (bloodSlider.value=0) planGoPlayer.isDie = true; Destroy(Mounster, 5); MonGoPlayer.isGo = true; 这个脚本中不同的技能产生的伤害程度不一样,当怪物受到攻击时,血条会减少,方便玩家看到怪物的
32、受伤程度。每次攻击时,当任务的武器碰到怪物时才会产生伤害,这里使用的事碰撞检测,为怪物和武器添加碰撞组件17如图4-32所示。图4-32 碰撞检测组件 勾选Is Trigger是组件才是碰撞检测组件18。这样就可以检测到怪物是否受到攻击。5. 游戏测试5.1 在Unity3D中运行测试点击软件中的运行按钮,如图5-1所示。 图5-1 测试按钮游戏在软件中测试运行,如图5-2,5-3,5-4所示。图5-2 软件中测试图 5-3软件中测试5-4 软件中测试游戏能够正常运行,没有报错,测试成功。5.2 Android平台测试点击Build Settings,出现如图5-5窗口。图5-5 平台选择点击
33、Android,找到页面中的Switch Platform,之后把当前开发平台转换成Android开发平台,之后找到Player Settings,点击,进行设置,如图5-6所示。图5-6 设置名称设置了名称和打包后的图标后,还需要进行其它设置。在Resolution and Presentation中Default Orientation选项设置游戏在Android客户端中按横屏还是竖屏显示,因为这种设计是水平屏幕游戏,为了消除垂直屏幕可能出现的问题,选择了屏幕画面。在其他设置中,您需要选择Android的系统版本并详细设置它。置如图5-7。图5-7 其它设置设置完成后,点击Build,经过
34、短时间的处理后,一个安卓Apk就打包完成。将其安装在Android测试机上,本测试机型号为:魅族Note3。安装后如图5-8所示。图5-8 安装在测试机打开游戏,出现游戏开始界面如图5-9。图5-9 游戏开始新手村如图5-10所示。图5-10 选择关卡进入游戏,画面如图5-11所示。图5-11 游戏画面5.3 测试结果在UnyD3D的单声道模拟器上运行,游戏运行平稳流畅。界面简单易懂,操作简单,形象逼真。当在Android平台上进行测试和运行时,游戏出现更严重的纸箱和延迟现象,虽然游戏可以正常运行,但体验很差。总 结基于Android平台的MMORPG游戏的完成也标志着毕业论文的结束。在整个设
35、计和生产过程中,我取得了不少成果,发现了一些问题。最后,我将对未来的工作有更多的展望。在设计开始之前,我对简单游戏开发有了一个大致的了解,但是由于缺乏系统的学习脚本编写,它经常在手写游戏期间被写在脚本上。例如,前部设计中的脚本是开发中的一个大问题。通过查阅资料和视频,成功地解决了一些问题,但仍存在薄弱环节。学生和老师给了我很大的帮助,在游戏的发展。我已经推荐了一些有用的信息和教程,以使游戏成功。虽然游戏成功,但存在以下问题:1。界面不美观;2。Android平台测试中存在严重的纸盒和延迟现象,说明游戏没有优化。3。层次相对简单,模型与材料的匹配不合理。4。功能比较简单,可玩性不高。UnyD3D是一款非常强大的游戏开发软件,它有一个较强的跨平台能力。在本设计的最后测试阶段,可以看出,由于不同的包装类型,可以在PC平台和Android平台上运行相同的游戏。这样,节省了不同平台之间复杂的游戏工作,节省了开发成本。可以预见,UnyD3D在未来几年将成为游戏开发行业的热门工具。也就是说,学习如何使用这个工具可以更好地在游戏开发行业发展。在今后的工作中,我会继续学习,在毕业设计过程中遇到的一些问题和游戏本身存在的一些问题,将是我今后努力工作的方向。同时,我们还将学习UnyT3D作为工具。