《基于Unity3D引擎RPG游戏设计与开发 .doc》由会员分享,可在线阅读,更多相关《基于Unity3D引擎RPG游戏设计与开发 .doc(53页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、目 录摘 要IAbstractII引 言11.相关技术31.1 Unity基础界面31.2 C#脚本编写31.3 Unity脚本31.4 Unity物理引擎31.5 UGUI31.6 Unity动画系统41.7 本章小结42. 系统分析52.1游戏内容需求分析52.2游戏流程需求分析52.3游戏场景需求分析52.4怪物系统需求分析52.5UI界面需求分析62.6人物动画需求分析62.7本章小结63. 系统设计73.1游戏环境设计73.1.1场景设计73.1.2角色设计73.1.3音乐设计73.2战斗系统设计83.2.1巡逻系统83.2.2战斗检测103.2.3怪物的攻击与搜索103.2.4伤害
2、判定113.3角色控制设计113.4 UI设计123.4.1UI的整体设计123.4.2对话框UI和任务栏133.5预制体加载143.6摄像机控制143.7本章小结164. 系统实现174.1脚本实现174.2场景实现184.3NPC对话实现194.4人物动作实现194.5UI实现214.6战斗碰撞监测实现214.7本章小结225. 系统测试235.1功能测试235.2人物动作测试235.3战斗系统测试245.4UI测试245.5性能测试255.6本章小结26结 论27致 谢28参考文献29附录 源程序清单31沈阳城市学院毕业设计(论文)摘 要随着计算机图像处理和虚拟现实技术的发展,游戏效果和
3、画面质量不断提高,游戏已成为一种新的娱乐趋势。与此同时,随着Android/IOS应用越来越遍及,游戏也逐渐向移动端的方向发展。Unity 3D游戏引擎在3D游戏设计、游戏体验升级和优质画面强化等方面具有很好的优势,良好的平台可移植性可以满足在计算机和移动终端中进行游戏切换和移植的需求。新一波科技创新浪潮的到来,使人们的生活更加舒适、便捷、快捷。虚拟现实技术作为前沿科技领域的研究热点之一,得到了国家政策的大力支持。5G通信网络技术的诞生,视觉信息数据的传输渠道进一步扩大,和数据的准确性和可视化程度一直在创新和发展中,也提供了一个广阔的发展空间和建筑虚拟现实技术的一个新时代。近年来,虚拟现实技术
4、在教育、游戏、房地长等行业广泛应用中。掌握软件开发工具Unity3D是实现虚拟现实技术必不可少的核心技能。本项目以Unity3D为游戏搜索引擎,设计了一款角色扮演游戏,将文化教育融入RPG游戏中,达到教育与娱乐的平衡。在游戏中玩家操控角色来完成和游戏情节有关的一系列既定活动,从而起到寓教于乐的作用。关键词:Unity3D; RPG; 3D游戏 AbstractWith the development of computer image processing and virtual reality technology, game effect and picture quality have
5、been constantly improved, and game has become a new entertainment trend. At the same time, with the popularity of Android/IOS applications, games are increasingly expanding to mobile terminals.The Unity 3D engine has good advantages in 3D game design, quality screen enhancement and game experience u
6、pgrade, and good platform portability can meet the needs of game switching and porting in computers and mobile terminals. the arrival of a new wave of scientific and technological innovation has made peoples life more comfortable, convenient and fast. as one of the research hotspots in the field of
7、frontier science and technology, virtual reality technology has been strongly supported by national policies. with the birth of 5G communication network technology, the transmission channels of visual information data are further expanded, and the accuracy and visualization degree of data have been
8、in the process of innovation and development, which also provides a broad space for development and a new era of building virtual reality technology.In recent years, virtual reality has been widely used in education, news media, games, e-commerce, real estate and other industries. mastering software
9、 development tool Unity3D is an essential core skill to realize virtual reality technology.In this project, Unity3D is used as the game search engine to design a role-playing game, which integrates culture and education into the RPG game to achieve the balance between education and entertainment. th
10、e player controls the characters in the game and completes the established activities related to the plot of the game, thus playing the role of teaching and entertaining.Keywords: Unity3D; RPG; 3DGameII引 言Unity3D游戏引擎是一个兼容多平台的综合游戏开发工具,通过使用它用户可以较为轻松地创建交互式内容。比如说3D视频游戏、实时动画以及建筑可视化1。作为一个专业游戏引擎,它是完全集成的。它具
11、有跨平台的优势,并且具备一个效果非常棒的统一的粒子照明编辑器。由于Unity在框架和架构上具有的种种优势,通过Unity游戏引擎制作的游戏可以在很大程度上避免崩溃和闪回的情况,同时它也备有很强大的性能分析工具,通过这种性能分析工具可以很容易地找到内存和CPU瓶颈。Unity支持Android和iOS的真实机器运行分析2。本文从介绍该项目游戏的作用游戏技术和游戏的大致流程展开,从系统分析部分、系统实现部分等各个角度展开,对整个项目进行系列的相关说明和探讨。游戏采用Unity3D作为游戏搜索引擎作为角色扮演游戏,在其中虚拟了一个游戏的世界,游戏的玩家通过使用键盘以及鼠标来操纵游戏中的主人物来完成游
12、戏中一系列相关活动。本RPG的主要内容是冒险世界的一个小村庄一个勇者开始他第一步冒险的故事。故事整体内容相对简洁,看似简单的过程包含了UI界面、战斗系统等各种功能模块,是许多代码共同调试互相配合调用的结果。文章中大片文字描写这个项目使用到的一些技术和制作流程,配合相关的图片和代码,使描述更为详尽。其中包括游戏UI设计,游戏人物和UI的设计应当具有美感并且与整体环境相互协调,游戏人物的动作要自然且连贯的互相切换显示出来;游戏其他角色的UI设计,怪物自己的巡逻系统、侦测系统、战斗系统;以及其他的关于摄像机控制、脚本二次编辑、场景的调节和各个组件参数的设置等等制作方式的说明。本文首先描述了项目游戏中
13、使用到的相关技术,对它们进行了简单的说明。然后描述了进行游戏制作时的系统分析,这里主要是需求分析,包括游戏的环境需求、游戏流程需求、游戏场景需求和怪物系统等分析,为接下来的制作做铺垫。在需求分析部分写完后就是对系统功能各个部分设计的描述,合适的系统设计在游戏制作中有着非常重要的作用。其次是系统实现,对每个功能具体是如何实现的进行相关描述,在系统设计和系统实现中分别加入了相关代码使描述更为详细具体。在以上都写好后,本文第五章是系统测试,这部分是游戏全部制作完毕后对游戏中各个性能的测试,包括游戏功能的测试、战斗系统方面的测试、UI的测试等等。第五部分是游戏的结论,对游戏的整体制作的总结,包括实现的
14、功能,不足和需要改善的地方以及使用到的技术等等。最后是参考文献、代码清单以及致谢2。1.相关技术1.1 Unity基础界面Unity中含有很多面板,首先是Project面板放置游戏的所有资源,如音频文件、视频文件等,这些文件也可以从Project中打包出去。项目中的Hierarchy面板显示了当前场景中的各个游戏对象之间的父子级关系,这些游戏对象包括游戏场景中的GameObject。Scence是场景面板,其中有很多方便游戏制作的常用快捷键,场景中物体可以在里面直接移动。1.2 C#脚本编写C#是一种面向对象的编程语言,它包含的变量、数据基本运算、语句、方法、数组、数据类型、类和对象还有结构这
15、些知识点和曾经在大学课堂上学习过的其他语言如C语言、C+有相似的地方,它由这两种语言衍生而来。Unity的游戏通过C#脚本挂载在组件上进行控制,在Unity编程中脚本也需要严谨的算法和细致的语句编写2。1.3 Unity脚本要实现Unity游戏中的大部分功能,编写脚本是其中必不可少的一部分。脚本的语言链接着Unity基本面板中的各项组件以及它们的属性,通过将脚本挂载在游戏中的游戏对象上,用代码来控制这些游戏对象之间的各种反应比如光线的调节、碰撞体的检测以及碰撞后的反应等等。1.4 Unity物理引擎物理引擎包含刚体、碰撞器和触发器。游戏对象添加组建刚体后就会受物理引擎控制,当受到外力时会产生类
16、似真实世界包含物理特性的运动。刚体有很多属性,包含物体的质量、阻力、重力等等,通过控制刚体组件的这些属性控制物体的运动。物体添加碰撞器后就具有了碰撞的效果,产生类似真实世界的碰撞反应。如果两个物体想要产生碰撞效果,它们都要添加碰撞器组件,并且至少其中一个具备刚体组件。除了使用碰撞器和刚体控制游戏对象的碰撞还可以使用触发器,它在碰撞体组建的Is Trigger上,对它勾选就会触发物理检测函数。1.5 UGUIUGUI是Unity的图形用户界面,在Unity4.6以上版本中新加入的界面显示系统,与之前的版本NGUI相比自适应系统更加的完善也可以进行更加方便的深度处理,也能够做出更加绚丽的UI特效2
17、。绘制UI元素需要用到Canvas画布。Canvas拥有很多属性,比如Render Mode控制渲染的方式;Pixel Perfect设置完美像素,如果选中它就会对屏幕显示效果进行锐化处理;Sort Order是处理渲染顺序的属性,当存在很多Canvas时,该属性值越大越会渲染到更上层;Render Camera是对摄像机进行渲染。通过对Canvas不同属性的设置达到UI中想要实现的各种画面效果。除此之外还有Text作为文本标签和图像的插入等1.6 Unity动画系统Unity的动画系统Mecanim是一个效果十分丰富但是完成的时候相对复杂的难度较高的动画系统,这个动画系统在用户使用的时候提供
18、了五大功能。这些功能使角色动画可视化的展现出来,使操作更为便捷2。1.7 本章小结本章讲述了游戏中用到的各种相关技术,这些技术贯穿于整个项目中,各个知识点相互联系相互配合构成了游戏的整体。其中C#的学习和从前课上学过的知识想通,所以使用时也相对容易一些。2. 系统分析2.1游戏内容需求分析游戏的剧本以一个冒险世界展开,讲述了在一个静谧的小村庄中,勇士进行他冒险的人生第一步的故事。主角在需要寻求帮助的NPC那里领取任务,对扰乱居民的小怪兽进行打击,帮助别人解决了困扰。游戏的剧情较为简单,主旨是表达每场漫长的旅行开始,中途会遇上数不清的挫折和困难,就如同游戏世界中的一个个小小的怪兽和关卡。中途总是
19、不易的,但一次次的克服一次次的胜利就会收获更加坚强的自己。2.2游戏流程需求分析游戏开始会弹出对话框提示有任务生成,主角在NPC处领取任务。主角本身拥有多项动画,包括加速、奔跑、拔刀、左闪右闪等等,在玩家鼠标和键盘的控制下可以平滑的切换各种状态。领取任务后角色在地图上寻找怪物并将其打败,可以使用不同的技能,不同技能造成伤害不同。来自怪物的伤害会通过UI控制的血量条的变化提示2。每打败一个小怪物任务面板会产生变化,当打败所有小怪物任务面板会提示提交任务或者继续在场景中漫游,提交任务给NPC会有相应剧情。2.3游戏场景需求分析场景达到视觉上的美观,场景风格卡通,靠近游戏剧情的氛围,包含多种物件如各
20、种树木、岩石等等,选取合适的Shader对素材进行合理的搭配,配合光照,在游戏中添加碰撞体确保人物在移动过程中不会有穿模的情况发生。场景中含有声音特效如风声使场景更逼真2。2.4怪物系统需求分析初始怪物会分布在地图上不同地点,每个怪物有拥有不同的等级、血量等属性,这些属性在UI上显示,怪物头顶的UI在主角靠近时会变大,在远离主角的时候UI会变小,防止遮挡人物视线。怪物在遇到主角之前会在指定的路线巡逻,不断徘徊2。当怪物遇到主角后怪物的UI会变成红色,并且一直面向主角然后朝向主角奔跑,接触到主角后会停止奔跑进行攻击,攻击的伤害值由等级影响。在主角打算脱离战斗时怪物会进行追击。当主角离开怪物侦测范
21、围,怪物会步行回到巡逻路线中继续巡逻。当怪物被主角打败会死亡,游戏模型在地图上消失。2.5UI界面需求分析UI界面包括和NPC的对话框、任务面板、技能小图标、主角的血量条、怪物头上等级和血量显示以及菜单栏。UI界面在美观的同时保证简洁不太遮挡游戏场景从而影响游戏体验2。与NPC的对话框设置调整好NPC立绘与对话框的出现时间间隔,注意文字的缩进且不超过对话框。每有一个怪物被打倒任务面板就随之改变直到任务完成。2.6人物动画需求分析人物和怪物都有自带的一系列动作,根据不同的状态采用不同的动作。在人物模型中,初始是行走状态,通过数遍控制视角和行走时的转向,行走状态中按下F键变为拔刀奔跑状态,W、A、
22、S、D分别为奔跑时的方向,Q键是技能键人物使用技能的动作,鼠标左键单击是攻击动画,拔刀时Q、E键分别是左闪和右闪。所有动作在Animator中与脚本共同控制2。为了使动作之间的切换不突兀,设置x轴和y轴使动作间变换更为平滑。2.7本章小结本章主要是项目的需求分析。合适的分析使之后的设计工作更为明确,有了方向,同时在一定程度上对避免一些早期错误有帮助,从而提高代码编写的效率,增加游戏整体的质量。3. 系统设计3.1游戏环境设计3.1.1场景设计游戏中的场景搭建主要是3D场景,在Unity官网找到的场景素材包拖入到Unity工程中的Project中,游戏中有树木素材、场景素材等都放在了这个素材包中
23、2。游戏场景分为较为卡通,整体观感比较清新自然,会给人更轻松惬意的游戏感受。游戏中的人物模型游戏角色、NPC、小怪兽的3D模型同样是网上寻找的素材包资源。寻找到的人物模型尽量贴合游戏场景,使得整体画面上更为协调美观,如图3.1。图3.1 环境预览3.1.2角色设计角色分为NPC、主人物和怪物,每个游戏角色都有属于它的丰富的动作,如主角包含行走、冲刺、奔跑、拔刀行走、攻击等等动作,不同的动作通过动画系统衔接到一起,通过,Animation和相关代码进行控制,绘制动作树,在反复的调试中使人物的动作尽可能的流畅,不出现太过突兀,直接跳转的情况2。3.1.3音乐设计音乐在游戏中占有重要的地位,影响到玩
24、家的游戏体验。有特色的游戏环境音乐和相关特效能够生动的体现出整体的环境氛围和氛围,使玩家能够身临其境。3.2战斗系统设计这里的战斗系统是一个很多子系统的集合,其中包括小怪兽攻击、巡逻、搜索、战斗检测(怪物脱离战斗和寻找角色进行战斗)以及怪物和主角的伤害判定和血量减少。首先在脚本MonsterControl中设置好怪物的默认值,里面包括预设的血量、伤害、移动速度、攻击间隔、怪物头顶上方显示它的血量和等级,怪物的行为、预设的攻击间隔、路径点以及一些用来判断的bool值2。在脚本中,当玩家按下控制相应动作的按键时,脚本里的条件语句会进行判断,每一个按键都对应相应的条件语句控制bool值的参数,从而调
25、控组件中的动作。怪物的动作树如图3.2所示。使用了Unity中动画系统中的动画状态机(Animation),每一只小怪物都挂在了Animator组件,这个组件的作用是将怪物的动作动画更好的进行图形化管理。Animation可以理解为每一个动画。将准备好的带有动作的怪物素材拖拽到游戏中,添加Animator Controller,在其中添加执行条件,动作树中的方框和箭头在代码中分别对应与怪物动作有关的一些变量和数值。可以通过动作树的调节和代码的编写共同对小怪物的活动进行细致的控制。图3.2 怪物的动作树3.2.1巡逻系统游戏中怪物的战斗检测使用到了Unity中的相交球,相交球和射线在Unity中
26、都可以对周围物体进行检测,相交球在这个游戏中用作怪物检测主人物的活动。它的参数分别是相交球的中心点还有检测范围和与特定层发生碰撞的反应。可以通过设置来决定相交球的初始位置、以球心设置半径范围和层级Layer2。怪物默认有巡逻时的颜色显示,在场景中用空物体设置好了怪物行走的路径点,游戏中一共有5只小怪物,每只怪物在Hierarchy里面有存储它们指定路径的空物体。这些连起来的空物体形成了怪物自己的行动路线。行走路线的设置如图3.3。图3.3 小怪物巡逻代表路径点的空物体越多,怪物在指定的路线上行走的效果就越平滑越自然2。怪物就在这些指定路线上自动不断移动。在怪物巡逻的过程中,当挂载在怪物上的相交
27、球检测到了主角的靠近,就会自动脱离怪物的巡逻状态。/巡逻时,怪物名字颜色ui_Clon.transform.GetChild(1).transform.GetChild(0).GetComponent().color = safetyNameColor;/缩小触发战斗碰撞rangeValue = dangerRange;/动画状态机monsterAima.SetBool(IsAttck_Run, false);/移动到指定路径点monsterObject.transform.position = Vector3.MoveTowards(monsterObject.transform.posit
28、ion, new Vector3(aiPatrolPathpath.transform.position.x, monsterObject.transform.position.y, aiPatrolPathpath.transform.position.z), Time.deltaTime * monsterMoveSpeed * .4f);/转向下一个路径点monsterObject.transform.LookAt(new Vector3(aiPatrolPathpath.transform.position.x, monsterObject.transform.position.y,
29、aiPatrolPathpath.transform.position.z); /归零路径点,循环巡逻 if (path = aiPatrolPath.Count) path = 0; 3.2.2战斗检测战斗检测的脚本在MonsterControl.cs中,在怪物的巡逻过程中相交球检测到了主角的存在,进入战斗状态2。怪物头上的UI样式会变成指定的颜色,怪物会在脚本控制下始终看向玩家。这个时候计算玩家与怪物之间的距离,如果距离大于1,怪物在动画状态机的控制下进行奔跑,朝着主人物方向跑去,当怪物接近任务,距离小于1,怪物会停止奔跑动画,开启站立并攻击的状态。在这里设置了计时器,用计时器来控制怪物的
30、攻击时间间隔,当计时器大于指定时间间隔便进行一次攻击。当玩家和怪物的距离大于2,怪物开始追击。这里使用了协程来决定攻击的时间间隔2。3.2.3怪物的攻击与搜索游戏中很多功能的实现都是需要碰撞器来完成,包括人物站立在地表上、避免人物穿模、角色之间的攻击、人物在场景中行走不会撞到物体等等。碰撞器使游戏中的刚体具有碰撞效果,产生物理因素。使用时要在人物上添加刚体组件。碰撞器分为静态碰撞器和刚体碰撞器,怪物的攻击适用于刚体碰撞器,受物理引擎影响2。该游戏中怪物攻击通过添加的相交球搜索周围的碰撞体,一旦搜索到了玩家,怪物就会面向玩家并朝着玩家移动,当相交球检测到了玩家时,代码中对应的布尔值变为true,
31、并执行这个布尔值所控制的相应动作,在怪物的手上加一个碰撞盒,怪物在播放动画的同时碰撞盒随着怪物的手移动动,通过碰撞盒的检测判定是否打到玩家。/通过相交球检测玩家是否处在怪物警戒范围 plyer = Physics.OverlapSphere(monsterObject.transform.position, rangeValue, layer = 1 layervalue ); /如果检测到玩家,中断巡逻 if (plyer.Length != 0) IsCombat = false; /如果玩家离开战斗范围,重新回到巡逻 else IsCombat = true; 3.2.4 伤害判定游戏属
32、性是否合理对游戏的平衡性很重要,同时属性的设定也会影响到游戏的难度。在这个游戏中的游戏属性有血量、移速、伤害等等2。玩家与怪物一开始拥有初始的int类型的血量,在脚本里面有一个参数,当玩家碰触到怪物或者怪物碰触到玩家会减血。通过玩家控制进行相应技能的释放,通过对碰撞体的检测来判断怪物受到的伤害,当怪物的收到的总伤害大于怪物本身的血值,血脂数值为0怪物死亡然后消失。怪物的等级不同伤害不同,根据脚本里的加减乘除的运算计算不同的等级对人物造成的伤害是多少,具体的运算是怪物等级5。基础伤害在脚本里面初始设置好2。3.3角色控制设计找到主人公的相关素材,拖入游戏中形成预制体。素材配有人物的一些列动作。通
33、过Animation和相关代码共同操控人物的各种行为。游戏中主人物的动作树如图3.4所示。图3.4 主角的动作树在脚本中通过条件判断语句根据玩家在游戏中输入的按键,产生不同的状态为了使人物不同的动作之间转换的更加平滑,通过差值运算处理,使X与Y平滑的归零。通过bool值调控人物动作的转变2。部分代码如下if (Input.GetKey(KeyCode.W) | Input.GetKey(KeyCode.S) /此时状态为行走状态 if (playerAnimatorContor.GetBool(IsDraw) = true) stateValue = 3; else if (playerAni
34、matorContor.GetBool(IsDraw) != true) stateValue = 1; /移动时,让移动逻辑为真(即让Walk动画播放) playerAnimatorContor.SetBool(IsWalk, true); /移动时讲Vertical和Horizontal分别绑定给xValue和yValue(即绑定给行为树的X和Y)yValue = Input.GetAxis(Vertical);xValue = Input.GetAxis(Horizontal);/退出移动控制else/此时状态为待机状态stateValue = 0;/停止移动,让移动逻辑为否 (即还原为
35、待机动画)playerAnimatorContor.SetBool(IsWalk, false);/通过差值运算平滑的让X和Y归零yValue = Mathf.Lerp(Input.GetAxis(Vertical), 0, 0f);xValue = Mathf.Lerp(Input.GetAxis(Horizontal), 0, 0f);3.4 UI设计3.4.1UI的整体设计合适美观的UI界面给予玩家第一印象,甚至在某种程度上决定了玩家的留存。操作不方便并且设计不够美观的UI界面会很影响游戏体验,那样尽管游戏逻辑和可玩性很好,仍会有很多玩家丧失对游戏的兴趣2。项目中的游戏使用的是UGUI,
36、它是Unity的图形用户界面,在Unity4.6以上版本中新加入的界面显示系统,与之前的版本NGUI相比自适应系统更加的完善也可以进行更加方便的深度处理,也能做出更绚丽的UI特效。游戏中的UI包含整体界面的UI如图3.4,里面包含主角血量条的显示,血量条会根据脚本中控制的血量数值在攻击的影响下递减,减少的血量在UI中有显示,以及任务面板、菜单栏和技能面板,点击菜单栏中的不同选项在代码控制下实现重新开始游戏退出游戏等效果,技能面板包含了角色的一些动作和相关技能。如图3.5。除此之外UI包括初始与NPC对话的对话框和怪物头顶的UI。任务面板会随着怪物的减小数值发生变化,怪物头顶的UI大小会随着主角
37、的靠近进行变化。图3.5 UI具体界面项目中的UI设计在简洁和美观之间寻找平衡点,整体UI左上角是玩家的剩余血量,下方是人物的技能,右上角是设置和任务栏。UI风格和色彩选择和游戏场景中的画面保持了一致,使得视觉上更为协调。简洁的界面使玩家更方便的体验游戏的操作。UI界面在制作过程中的显示如图3.6。图3.6 Scence面板中的UI3.4.2对话框UI和任务栏人物初始会有NPC的对话提示,根据点击按键不同的次数提示不同的对话语句。在完成任务后也会有相关的提示显示任务结束然后提示提交,部分代码如下。if (_buttonValue = 5)sq.Append(transform.GetCompo
38、nent().DOText(, .1f);sq.Append(transform.GetComponent().DOText(好像是谁在叫我, 3);if (_buttonValue = 6)sq.Append(transform.GetComponent().DOText(, .1f);sq.Append(inset.DOFade(1, 1);sq.Append(transform.GetComponent().DOText( “看你的打扮似乎是一位冒险家啊,我掉的银斧头被邻居家的猫抢走了,你可以帮我找回来吗” , 3);3.5预制体加载在代码编辑中常常会将一些重复用到的功能制作成函数反复调
39、用,游戏中的预制体和函数的这个功能很像。游戏中将一些能够多次使用的对象制作成.prefab的预制体,而后在使用时加载在场景中完成实例化2。游戏中的角色在场景中出现使用了预制体加载。首先将人物资源拖拽到项目中形成它的预制体,预制体显示为蓝色。如图3.7所示。图3.7 预制体示例点击预制体会进行对预制体的编辑,这样通过脚本调用到的预制体模型进行克隆,克隆后的物体都会根据默认设置好的属性出现,不用重复编辑脚本。3.6摄像机控制摄像机是每次开启新工程默认自带的组件,它用来向玩家获取和显示世界到Game面板中,相当于玩家看向游戏世界的“眼睛”,不光可以用作视角,还可以制作小地图等功能。在场景中可以放置的
40、摄像机数目不等,在这个游戏中我放置了一个摄像机。摄像机含有不同的组件,有和其他所有组件同样的Transform变换,还有它独有的Camera组件、音频监视器Audio Listener。Camera是用来捕获和显示世界,Audio Listener用来接收场景中的声音,并在游戏中通过计算机的扬声器进行播放。同时摄像机的Culling Mask剔除遮挡功能可以通过勾选游戏场景中设定好的层,控制游戏进行时玩家哪些游戏对象是看得到的哪些看不到,从而提高游戏界面的整洁度。为了在游戏中产生第三人称视角,在游戏中将摄像机放在Hierarchy中角色下取名为PlayerCamera,摄像机跟随角色移动,就可
41、以实时捕捉到主人物和周围物体的画面。在Scene中进行调节摄像机的位置,使摄像机固定在主角的后方位置。而后在参数面板对摄像机的各项参数进行调节,同时之后的脚本中可以控制相应参数。调节相应的初试参数如图3.8所示。图3.8 摄像机的设置参数摄像机设置的相关代码如下。void Start()Cursor.visible = false;void LateUpdate()MouseControl();void MouseControl()float mouser_Y = Input.GetAxis(Mouse Y);transform.RotateAround(Player.transform.po
42、sition, transform.right, Mathf.Lerp(mouser_Y, mouser_Y * 5f, 0);if (Input.GetKey(KeyCode.LeftAlt)Cursor.visible = true;Cursor.lockState = CursorLockMode.Confined;else if (Input.GetKeyUp(KeyCode.LeftAlt) Cursor.visible = false;3.7本章小结本章是整篇论文的重要部分,主要内容是游戏制作中的各个主要模块,以及其中用到的Unity相关技术的使用和这些技术的简单说明,这些系统设计
43、为之后的一系列操作做了铺垫。同时附着上一些相关的主要代码,使文章表达更加直观。4. 系统实现4.1脚本实现为了在游戏制作过程中更加便捷的观察各种参数的变化并加以改动,游戏中使用到了脚本拓展,可以将原本的编程语言在Hierarchy面板中用中文表示出来,很方便理解。首先在脚本文件夹中创建专门用来负责脚本二次编辑的文件夹Editor。这里是用到了下载好的用作代码重写的插件,通过调用插件中的Api进行代码重写的实现,具体调用并重写的代码一部分如下:AlignTextCue(设置怪物);/monsterPatrol_Edior.targetCamera = (Camera)EditorGUILayou
44、t.ObjectField(玩家摄像机, monsterPatrol_Edior.targetCamera, typeof(Camera), true);monsterPatrol_Edior.monsterObject = (GameObject)EditorGUILayout.ObjectField(怪物指定, monsterPatrol_Edior.monsterObject, typeof(GameObject), true);monsterPatrol_Edior.monsterName = (string)EditorGUILayout.TextField(怪物预设名字, mons
45、terPatrol_Edior.monsterName);monsterPatrol_Edior.monsterLevel = (int)EditorGUILayout.IntField(怪物预设等级, monsterPatrol_Edior.monsterLevel);monsterPatrol_Edior.monsterHP = (float)EditorGUILayout.FloatField(怪物预设血量, monsterPatrol_Edior.monsterHP);/dataControl._camera = (Camera)EditorGUILayout.ObjectField(摄像机指定, dataControl._camera, typeof(Camera), true);dataControl._DeffaultPlyerHp = (float)EditorGUILayout.FloatField(玩家预设血量, dataControl._DeffaultPlyerHp);dataControl._DeffaultPlyerAttck = (int)EditorGUILayout.IntField(玩家预设攻击, dataControl._DeffaultPlyer
限制150内