《基于Unity3d的动作角色扮演类游戏的设计与实现.doc》由会员分享,可在线阅读,更多相关《基于Unity3d的动作角色扮演类游戏的设计与实现.doc(47页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、广东东软学院本科毕业设计(论文)摘要随着中国游戏以及互联网科技的发展,游戏越来越受到人们的欢迎,不管是手机游戏,电脑游戏,还是主机游戏,都在中国市场中占有很大的份额,游戏的交互性不同,以及按玩家年龄分类,分层等特点使得它适合各种年龄层的人。在各种游戏中,角色扮演类游戏得到大多数人的青睐,在此之上衍生出的动作角色扮演类游戏由于动作元素的加入成为更多人的选择。动作角色扮演类游戏是一种融合了动作类游戏以及角色扮演类游戏的一种游戏类型,玩家可以在体验游戏剧情的同时体验到游戏丰富的动作系统。本次毕业设计制作的游戏便是一款角色扮演类游戏,但是求其风格偏向做出了调整,与以往追求爽快简单的动作角色扮演类游戏不
2、同的是,本游戏加入了市面上一种新的“魂式”玩法,即更多的操作要求以及更难的难度,更加强调玩家的生存感,而是否能将这两者成功进行结合,产生一个新的方向,则是本论文所需要探讨解决的问题。此外,游戏将使用Unity3D引擎进行制作。关键词:Unity3D;3D技术;动作角色扮演类游戏AbstractWith the development of Chinese games and Internet technology, games are becoming more and more popular among people. Whether it is mobile games, compute
3、r games or console games, they all have their own position in the Chinese market. The game itself is also in the Chinese market. With a large share, the games interactivity, classification, and stratification make it suitable for people of all ages. Among them, role-playing games are favored by most
4、 people in various games, and the action-playing games derived from them are the choice of more people because of the addition of action elements.Action role-playing games are a type of game combining action-type games and role-playing games. Players can experience the games rich action system while
5、 experiencing the plot of the game. The game designed by this graduation is a role-playing game, but its style has been adjusted. Unlike the previous pursuit of refreshing and simple action role-playing games, this game has added a new type on the market. Soul-style gameplay, that is, more operation
6、al requirements and more difficult difficulty, and more emphasis on the players sense of survival, and whether the two can be successfully combined to produce a new direction, this paper needs to explore solved problem. In addition, the game will be produced using the Unity3D engine.Keywords:Unity3D
7、 3D technology Action R目录第一章绪论11.1选题的目的和意义11.2国内外研究现状11.3论文组织结构2第二章开发工具介绍32.1Unity3D游戏引擎32.1.1Unity3D软件介绍32.1.2物理引擎32.1.3Unity常用生命周期的函数32.1.4用户界面UI32.2模型与动画42.3C#开发语言42.4Visual Studio 20174第三章游戏设计53.1游戏场景设计与制作53.1.1游戏场景制作53.2游戏主角设计与功能实现63.2.1人物模型设置63.2.2角色的基本设计与实现83.2.3角色的攻击设计与实现103.2.4角色的防御设计与实现143
8、.3怪物(敌人)设计与实现163.4战斗设计与实现193.4.1战斗伤害实现193.4.2战斗死亡实现213.4.3战斗交互实现223.4.4角色升级实现233.5游戏音效管理24第四章游戏界面与视觉效果264.1角色属性以及图标显示264.2游戏菜单功能实现294.2.1开始场景界面与功能实现294.2.2游戏中界面与功能实现314.3游戏中的视觉效果33第五章游戏剧情制作35第六章游戏测试以及打包39第七章总结41参考文献42致谢43广东东软学院本科毕业设计(论文)第一章 绪论1.1 选题的目的和意义随着现代科技的发展,电子游戏变得越来越多样化,更是形成了一种独特的游戏文化,各式各样的游戏
9、层出不穷。在中国,随着2014年游戏机禁令正式解除,索尼,微软,任天堂的游戏机以及游戏作品也是给中国玩家带来了更多的游戏体验,更是给中国游戏市场注入了新的力量,如今,中国的游戏发展迎来了全盛期,以腾讯,网易为首的游戏公司为玩家们带来了丰富多样的游戏,让中国的游戏业焕发了新生。在最近的游戏发展中,产生了许多非常优秀的游戏,而在众多种类的游戏中,动作角色扮演类游戏更是经久不衰,其下众多的分支更是给这类游戏注入了强大的生命力,玩家喜欢动作角色扮演类游戏的原因大多是因为其优秀的动作手感以及剧情给玩家带来的代入感,不同于传统RPG回合制的战斗,ARPG带来的战斗多样性策略多变性更是引人入胜,因此我觉得开
10、发一款ARPG游戏不仅能锻炼自己作为游戏制作者的能力,更能试着去为玩家带来更多的玩法。Unity3D引擎同时也是国内开发产商最喜欢使用的游戏引擎,其轻便,核心化的开发功能更是为开发者们带来了便利,优秀的动作管理模块也为动作游戏的设计提供了基础,Timeline组件则能为人物剧情动画的设计提供帮助,是一款十分优秀的游戏制作引擎。1.2 国内外研究现状1952年,剑桥大学一名计算机科学家开发出了史上第一款有记录的电脑游戏Noughts&Crosses,这是一款能在计算机运行的井字游戏,游戏的历史从此开始,在接下来的几十年里,计算机的崛起以及计算机语言的出现,游戏开始慢慢的发展起来,直到1972年,
11、雅达利公司的Nolan Bushnell and Al Alcorn开发出了一款名叫Pong的游戏,这款游戏成为第一款在商业上取得成功的视频游戏产品,且在其后,越来越多“山寨”Pong的游戏出现,推动了整个视频游戏行业的发展,雅达利在商业上取得成功的同时,游戏业也开始迅速发展,街机游戏等开始充斥在大街小巷,特别是在1980年吃豆人这款游戏出现后,世界更是掀起了一股游戏热潮 随后,任天堂开始进军游戏界,为玩家带来了无数经典的作品,更是在当时成功垄断了日本的游戏产业,开启了游戏业的全新时代,接下来的几年内,PC端游戏Doom的出现,索尼和世嘉等各大游戏制作公司的加入,使得游戏行业开始往多元化发展,
12、时至今日,国外游戏仍然蓬勃发展,游戏种类众多,玩法也朝着多种玩法相结合的方向发展。1.3 论文组织结构 最开始构思论文后,对相关专业资料进行了查证以及参考,由此确定了此动作角色扮演游戏的设计与开发的可行性,并结合相关游戏开发流程,包括整个开发周期和个人能力的预期,将此论文分为六章,其中每个章节的大致内容如下所示:第一章:绪论,主要描述了此项目的目的以及意义,此项目在国内外的发展研究现状; 第二章:对本项目的开发需要用到的各种开发工具的介绍;第三章:拆分游戏功能模块,具体讲述每一个模块的具体实现方法 第四章:描述游戏内的UI设计的以及实现 第五章:游戏的剧情制作第六章:对游戏进行打包以及测试第七
13、章:本论文的总结第二章 开发工具介绍2.1 Unity3D游戏引擎2.1.1 Unity3D软件介绍Unity3D是一个由Unity Technologies开发的3D引擎,不仅是游戏,借助Unity3D,制作者还可以创建建筑可视化,三维动画等待,其友好的可视化开发环境,能够让新手快速上手,而且Unity3D几乎不经过修改代码就可以实现跨平台的特性,更是在移动游戏快速发展的今天显得尤为重要。Unity3D引擎自身拥有许多优势,相比一些产商需要付费使用的游戏引擎,Unity3D向广大游戏制作者免费开发,只有当游戏盈利超过一定金额才会向制作者收取一定费用,且引擎本身拥有充足的现成资源,其官方商城中
14、更是拥有许多优秀的资源供制作者使用,制作者只需将资源整合,并为自己玩法编写一些脚本,便能制作属于自己的游戏,其便捷性是其他游戏开发引擎所不能比拟的。2.1.2 物理引擎物理引擎就是模拟现实中真实的物理碰撞,重力反应,掉落等刚体行为的引擎,举个例子,愤怒的小鸟就是基于物理引擎制作的,小鸟被射出后掉落,撞击,都是物理引擎的应用,Unity3D使用的物理引擎为Nvidia的PhysX,物理引擎是一个计算机程序模拟牛顿力学模型,利用质量,速度,摩擦力和空气阻力等变量,来预测不同情况下的效果,被大量运用在计算机物理学,电子游戏,以及动画当中。2.1.3 Unity常用生命周期的函数Unity3D中的生命
15、周期函数需要继承Mono Behavior类才可以使用,且其生命周期函数全部都由系统定义好,系统自动调用,调用顺序和自行编写的顺序无关。Unity3D中有一些最常用的一些生命周期函数,这份官方文档详细了讲解了这些函数的用法2。2.1.4 用户界面UI本游戏的系统UI主要利用Unity3D自带UI插件UGUI进行制作,从Unity3D4.6版本之后,UGUI被集成到Unity的编辑器中,相较于旧的UI系统,它有了质的飞跃,其中主要优点在于灵活,快速,以及可视化,可视化的UI制作能够让制作者更加直观地看到成果,也使得制作效率更高,执行效果更好,以及更加简单上手,所有的布局,控件,调整后都能直接体现
16、出结果,使得制作者能更容易地制作出更加好看的UI界面2.2 模型与动画本游戏的模型以及动画的素材来自网络上的素材资源,再经过Unity3D的动画系统进行调整,整合,最终达到游戏中呈现的效果。游戏中亦包含剧情动画,则运用Unity3D的TimeLine插件进行编辑,以及脚本进行控制所制作出来。2.3 C#开发语言Unity3D中脚本文件使用的编程语言是C#语言,面向对象类型安全,来源自C语言系列,C、C+、Java和JavaScript程序员很快就可以上手使用。C#能够很好地在Mac、Linux、Android、Windows还有IOS上运行;它之所以是很多人的最佳选择,是因为 C#是编程语言创
17、新方面的领导者,是原生跨平台移动应用程序的最佳选择,并且还有很多的优点超乎的想象。2.4 Visual Studio 2017Visual Studio 是美国微软公司的开发工具包系列产品,VS是一个基本完整的开发工具集,它包括了整个软件生命周期中所需要的大部分工具,如UML工具、代码管控工具、集成开发环境(IDE)等等。所写的目标代码适用于微软支持的所有平台。 第三章 游戏设计3.1 游戏场景设计与制作 整个游戏的场景包括开始游戏选择场景,剧情场景,游戏场景,三个场景,其中场景均是运用网络素材进行搭建,游戏选择场景搭配人物动画以及选单,显得更加动态化,剧情场景则结合Timeline动画进行设
18、计,游戏场景为一个地牢大场景,其中又包括几个不同的小场景,小场景结合关卡流程进行设计。3.1.1 游戏场景制作 首先将下载的场景素材进行解包,基于素材进行场景大概构思,这里需要先完成游戏中地牢大场景的大概制作,然后进行细化,然后开始游戏选择场景和剧情则可以选择大场景中的一个小场景进行部分进行独立分化更改,加入人物以及动画。图3-1为则第一个小场景的搭建雏形.图3-1 场景搭建雏形 将场景搭建完整,加入光源,物件,地牢大场景的俯瞰图如图3-2所示:图3-2 地牢场景俯瞰图3.2 游戏主角设计与功能实现游戏中玩家控制的主角为一名骑士,在这里需要实现玩家的行走操控,动画控制器设计,攻击设计,技能设计
19、,以及设置主角的跟随摄像机。3.2.1 人物模型设置首先将从网上下载下来的人物模型进行解包,放入场景内,并将其Animation Type设置成Humanoid。如图3-3和图3-4所示图3-3 角色模型展示图图3-4 角色Animation Type类型图接下来将剑和盾导入场景,放在模型相应的部位下面,必须放在主角prefab下相应的子关节下,不然后面设置动画时会出现武器不跟手的情况,如图3-5所示:图3-5 角色绑定装备展示图最后一个步骤就是给角色加上一些必要的组件,这里需要Rigibody,Capsule Collider,以及Animator,AudioSource,如图3-6所示:图
20、3-6 角色必备组件图3.2.2 角色的基本设计与实现这小节需要编写脚本让玩家能够操控角色进行移动,首先,需要规划好人物的动作控制器,新建一个新的动画控制器,绑定到主角身上,预期主角需要三层动作,第一层是默认状态的动画控制,第二层则是玩家攻击的动画控制,第三层是玩家防御时的动画控制,因此做好规划后,建立三个层级,如图3-7所示: 图3-7 角色动画层图接下来进入基本层,添加一个Base Layer,将走动的三个动画拖进去,并且设定其不同的权重,再回到基本层,将死亡动画以及滚动动画拖进这里,这里的触发条件都设置为Trigger类型,由于死亡是单向性的所以不用有回去的连线,还有一个重要的点就是为了
21、动画的流畅性,必须消勾连接线的“Has Exit Time”选项,设置完毕的动画基本层如图3-8所示:图3-8 角色基本动画层设计图然后创建脚本PlayerMovement,利用脚本控制动画播放以及控制人物的移动,关键脚本如下:1. floatlh=Input.GetAxis(Horizontal);2. floatlv=Input.GetAxis(Vertical);3. 4. Vector3output=Vector3.zero;5. 6. output.x=lh*Mathf.Sqrt(1-(lv*lv)/2.0f);7. output.z=lv*Mathf.Sqrt(1-(lh*lh)/
22、2.0f);8. 9. moveInput=newVector3(output.x,0,output.z);10. 11. Vector3cameraForward=mainCamera.transform.forward;12. cameraForward.y=0;13. 14. QuaternioncameraRelativeRotation=Quaternion.FromToRotation(Vector3.forward,cameraForward);15. Vector3lookToward=cameraRelativeRotation*moveInput;16. 17. if(mo
23、veInput.sqrMagnitude0)18. 19. RaylookRay=newRay(transform.position,lookToward);20. transform.LookAt(lookRay.GetPoint(1);21. 22. moveVelocity=transform.forward*playerSpeed*moveInput.sqrMagnitude;这里原本写完脚本之后,发现移动的时候加入往斜向方向移动时,速度会比上下左右移动要快些,这是因为控制上下左右是基于直角坐标轴,在斜向速度就会出现根号二倍速度的平方和的情况,这里有一篇论文提供了这种问题的解决方法,给
24、出了一个公式,将直角坐标轴转换成圆形的坐标轴13,利用这个公式,可以解决这个问题了。大部分的参数都设置成Public,这样便于在Unity的面板里进行设置以及控制,就是做了可视化的处理,将脚本绑定到角色身上后,可以看到如图3-9的面板,给玩家设置运动速度,便可以通过键盘上的W,A,S,D控制角色移动。空格键进行翻滚。图3-9 角色基本设置图在这里需要注意的一点是,由于进入翻滚动画转换条件设置的是Trigger类型,假如玩家按键的速度快过动画播放速度,就会造成信号累积,按键结束后还有动画播放,因此需要用脚本在玩家按下一次后清理一次信号,编写一下脚本并绑定在BlendTree上。进行设置,如图3-
25、10所示:图3-10 动画控制器信号清理设置图在进行基本设计的最后一步,需要摄像机能对玩家的运动进行追踪,将目标始终对准角色,因此需要编写一个摄像机控制脚本:1. publicclassRPGcamera:MonoBehaviour2. 3. publicfloatcameraHeight;4. publicfloatcameraDisctance;5. 6. privateTransformPlayerTran;7. 8. 9. voidStart()10. 11. this.PlayerTran=GameObject.FindGameObjectWithTag(Player).transf
26、orm;12. 13. 14. voidUpdate()15. 16. this.transform.position=newVector3(this.PlayerTran.position.x,this.PlayerTran.position.y+this.cameraHeight,this.PlayerTran.position.z-this.cameraDisctance);17. this.transform.LookAt(this.PlayerTran);18. 19. 20. 21. 将脚本绑定到摄像机之后,设定角度,测试无误,角色的普通状态基本操作就实现。3.2.3 角色的攻击设
27、计与实现在进入角色的攻击动画层次以及脚本编写之前,需要完成角色一些状态参数的设计,比如玩家的血量,经验值等。需要在玩家状态脚本里面创建一些参数,后期这些参数会在UI设计的时候进行同步,也就是更加直观的表现给玩家,以下是需要的一些基本参数,血量,经验值,攻击力,技能攻击力,等级,攻击范围,这些参数在后面进行与敌人发生战斗的数值交换中会用到,现在先配置给玩家,将脚本绑定在角色身上,进行参数设置。1. publicSliderplayerExp;2. publicSliderplayerHP;3. publicintplayerHealth;4. floatexp=0;5. intplayerLev
28、el=1;6. publicintdamage;7. publicintspDamge;8. publicfloatrange;第二步就是进行玩家的攻击动画层的设计,在这里采用了两端普通攻击一段特殊技能攻击的设计,触发条件同样选择Trigger类型,攻击同理,为了动画效果的流畅,需消勾“Has Exit Time”选项,攻击动画层设置后如图3-11所示:图3-11 角色攻击层动画设计接下来则是控制攻击脚本的编写,以下为攻击与特殊攻击初步实现的关键代码:1. publicboolattack;2. publicboolspAttack;3. privateboollastAttack;4. fl
29、oattimer;5. 6. 7. 8. boolnewAttack=Input.GetMouseButtonDown(0);9. if(newAttack!=lastAttack&newAttack=true&!isDefend)10. 11. attack=true;12. anim.SetTrigger(attack);13. 14. else15. 16. attack=false;17. 18. if(Input.GetMouseButtonDown(1)&timer=5)19. 20. spAttack=true;21. anim.SetTrigger(spAttack);22.
30、timer=0;23. 24. else25. 26. spAttack=false;27. 接下来需要通过脚本控制Animator切换不同的动画层,来实现普通层和攻击层之间的切换,首先需要在攻击层的Idle动画和slash动画增加一个脚本,这个脚本的主要作用是用来向挂载有Animator组件的角色的兄弟组件传信息,脚本的关键代码如下:1. publicstringonEnterMessages;2. overridepublicvoidOnStateEnter(Animatoranimator,AnimatorStateInfostateInfo,intlayerIndex)3. 4. fo
31、reach(varmsginonEnterMessages)5. 6. animator.gameObject.SendMessageUpwards(msg);7. 8. 9. 也就是起到一个传递信息的作用,需要先在动画上设置,在攻击脚本中便能接收这个信息,在玩家按下攻击按键时,动画层能接收到信息,然后改变动画层的权重,如图3-12所示:图3-12 攻击层信号设置图在两个不同状态,一开始接收到AttackIdle的信号,攻击层的权重为0,当按下攻击键,开始攻击,攻击层的权重就变成1,这样就实现了普通层到攻击层的转换,关键代码:1. voidOnAttackIdle()2. 3. pm.inpu
32、tEnable=true;4. anim.SetLayerWeight(1,0);5. 6. voidOnAttack()7. 8. pm.inputEnable=false;9. anim.SetLayerWeight(1,1);10. 然后,与普通层翻滚状态的信号累积一样,必须定时清除攻击状态的信号,如图3-13图3-13 攻击状态信号清楚设置图 测试发现,按下攻击键与技能键都可以正常触发角色动画,最后需要给角色的技能加入一个冷却时间以及技能特效,由于技能的伤害太大,需要限制玩家使用,否则游戏将变得没有难度。只需要在角色脚本写一个计时器,设置好冷却时间来限制技能的使用条件就可以了,技能特效
33、只需要在释放技能动画的结尾添加一个帧事件,并在脚本中当帧事件发生时,编写一个生成特效的方法让特效生成就可以了,技能效果如图3-14所示,关键代码如下所示:1. floattimer;2. timer+=Time.deltaTime;3. if(timer=5)4. 5. timer=5;6. 7. if(Input.GetMouseButtonDown(1)&timer=5)8. 9. spAttack=true;10. anim.SetTrigger(spAttack);11. timer=0;12. 技能特效生成代码:1. publicTransformsp;2. 3. voidSpAtt
34、ack()4. 5. GameObjectinstance=(GameObject)Instantiate(effect,sp.transform.position,sp.transform.rotation);6. Destroy(instance,4);7. 图3-14 角色技能效果图3.2.4 角色的防御设计与实现角色拥有防御的动作,由于防御只需要用到角色上半身,所以在防御层中给套上一个只有上半身的Avatar Mask,如图3-15所示:图3-15 角色Avatar Mask示例图接下来设计出角色的防御层动画,与攻击层一样,给其加上对角色传递信息控制动画层级的脚本以及定时清理防御信号的
35、脚本,触发条件选择bool类型,整个防御层动画设计完成后如图3-16所示:图3-16 角色防御层动画设计图触发防御的关键代码:1. voidDefende()2. 3. if(Input.GetKey(KeyCode.E)4. 5. anim.SetBool(isDefend,true);6. isDefend=true;7. 8. 9. else10. 11. anim.SetBool(isDefend,false);12. isDefend=false;13. 14. 3.3 怪物(敌人)设计与实现游戏中存在两种怪物,一种是普通怪物,存在于地牢的许多地方,玩家在穿过地牢的时候会不断遇到,另
36、一种怪物是游戏的Boss,属于游戏中的强力怪物,难度较大,会出现在游戏中的最后时刻,在这里将分开设计。首先将普通怪物的Prefab拉入场景当中,对其进行一些简单的设置,需要给其加上Animator,Audio Source,以及Capsule Collider三个组件。然后需要给怪物新建一个新的动画控制器,由于怪物没有主角拥有那么多复杂的动作,所以动画控制器中只需要有一层便足够了,这一层动画包括怪物的移动,攻击以及死亡,动画层设计如图3-17所示: 图3-17 普通怪物动画设计其中由于死亡是单向性,因此不用设置回去的连线,死亡的触发类型是Trigger,移动则是使用Float类型判断,攻击使用
37、与主角一样的Bool类型触发。接下来开始给普通怪物新建控制脚本,在最开始,与玩家角色一样,需要给他设置几个基本属性,包括生命值,攻击力,怪物的比较简单,这些属性将会在后面的战斗设计中起到作用,如下所示:1. publicintenemyHealth;2. publicintdamage;然后就需要让怪物能够执行上面的动画,发现玩家,追逐玩家,攻击玩家,不过需要注意的一点是,现在只是先让怪物动起来,任何攻击动作包括玩家的攻击还没有涉及到数值的交换。首先这里需要Unity3D的一个官方组件,Nav Mesh Agent组件,该组件是用来实现自动寻路功能的,文献7中详细对该插件进行了介绍以及该如利用
38、它制作自动寻路功能,在这里可以借用该组件,让怪物对的主角导航,实现追逐玩家的功能。首先需要将地图上的地面刷成可导航区域,点击Unity窗口上的Window AI Navigation,出现功能窗口,需要设置以下自动寻路区域的static,允许怪物自动寻路的高度,上台阶的高度,以及半径等,如图3-18所示:图3-18 Navigation设置图紧接着需要将地牢场景的static设置成Navigation static,按下Navigation面板的bake,然后场景将变成怪物的可寻路区域,然后回到怪物身上,需要给他加一个Nav组件,并设置寻路的速度,停止距离等参数,如图3-19所示:图3-19
39、怪物Nav Mesh Agent设置图完成这一步后,最后需要给怪物新建一个脚本,用来调用navmesh组件以及给予怪物目标,完成动画的播放,关键代码如下:1. if(CanSeeTarget()&Vector3.Distance(transform.position,player.position)15)2. 3. nav.SetDestination(player.transform.position);4. patrolling=false;5. if(nav.remainingDistancenav.stoppingDistance)6. 7. anim.SetBool(isAttack
40、,true);8. 9. else10. 11. anim.SetBool(isAttack,false);12. 13. 14. else15. 16. anim.SetBool(isAttack,false);17. if(!patrolling)18. 19. nav.SetDestination(lastKnowPosition);20. if(nav.remainingDistancenav.stoppingDistance)21. 22. patrolling=true;23. StartCoroutine(GoToNextPoint);24. 25. 26. 27. anim.S
41、etFloat(forward,nav.velocity.sqrMagnitude);这里给敌人设置了一个眼睛的对象,需要在Unity里新建一个空对象拖进Prefab里眼睛的位置,敌人通过射线检测自身与目标的位置而进行判断要不要进行追踪,到达一定距离后,就会按照动画控制的设置攻击玩家,假如不在范围之内,敌人则会在设置的两个点进行巡逻,将目标对象设置成public,在怪物Prefab下能够见到,只需要将主角的Prefab拖进去,这样的主角就成为了目标,怪物也能够识别到目标了,最后将普通敌人的prefab复制多个,分组放在场景不同区域,到这里,普通怪物的设置就完成了。接下来就是Boss怪物的设置,
42、这里Boss与普通怪物使用同一个脚本,也就是AI基本是一致的,只需要做出模型差异,大小差异,数值差异以及动画差异,首先将Boss的Prefab拖进场景最终区域,对其进行与普通怪物一致的设置,并对其设置一套类似的动画控制器,需注意的一点就是Boss的基本数值比普通怪物高出不少,确保游戏难度以及体验,设置完毕后发现Boss也能够对玩家进行追踪以及做出攻击动画,整个怪物以及Boss的设置就完成了。3.4 战斗设计与实现在前面的章节中,玩家角色以及敌人的基本设置已经完成,在这一章节,将主要进行具体玩法设置,也就是战斗内容的设计,本游戏的战斗采用经典ARPG的战斗方式,通过键盘控制玩家角色移动,鼠标则作为攻击键,选中敌人进行攻击。敌人则发现玩家,追踪玩家,到达攻击距离进行攻击。