基于Unity闯关游戏的设计与开发.docx

上传人:夺命阿水 文档编号:920712 上传时间:2024-01-16 格式:DOCX 页数:54 大小:757.93KB
返回 下载 相关 举报
基于Unity闯关游戏的设计与开发.docx_第1页
第1页 / 共54页
基于Unity闯关游戏的设计与开发.docx_第2页
第2页 / 共54页
基于Unity闯关游戏的设计与开发.docx_第3页
第3页 / 共54页
基于Unity闯关游戏的设计与开发.docx_第4页
第4页 / 共54页
基于Unity闯关游戏的设计与开发.docx_第5页
第5页 / 共54页
点击查看更多>>
资源描述

《基于Unity闯关游戏的设计与开发.docx》由会员分享,可在线阅读,更多相关《基于Unity闯关游戏的设计与开发.docx(54页珍藏版)》请在课桌文档上搜索。

1、摘要相信闯关战斗类游戏曾经给了不少玩家一个美好的回忆,在目前游戏平台内非常流行。本文制作的勇者之路是一款操作简单,游戏模式经典的2d闯关战斗类游戏。本文完成了它的设计与开发,利用Unity引擎实现游戏的画面设计,人物动作,场景互动,战斗系统与关卡设计。c#语言被广泛应用于各种领域,其具有高度的可扩展性,以实现更灵活的功能,并有良好的可靠性。继承了c和c#的强大功能,又有一些简单易懂的特点,满足不同需求。Unity3D是一款全面整合的专业游戏引擎,使用c#或java等高级语言来实现脚本功能,使开发者无需了解底层复杂的技术,就能快速开发出具有高性能、高品质的游戏产品。在本游戏中,玩家可以通过控制键

2、盘上的A、D、S、J、K键来控制角色移动、跳跃、下蹲、蹬墙跳、攻击等动作,也可以打开背包吃掉血包补充血量,与场景互动通关等。敌人有触碰掉血、主动攻击、发起追击三种不同的攻击状态。本文对勇者之路游戏的开发与设计进行了较为详尽的描述。关键词:Unity引擎;c#;2d闯关游戏AbstractIbelievethatthebattlegamehasgivenmanyplayersagoodmemory,inthecurrentgameplatformisverypopular.TheRoadoftheBravenproducedinthispaperisasimpleoperation,classi

3、cgamemodeof2dbattlegame,completeditsdesignanddevelopment.UsingUnityenginetoachievethegamescreendesign,characteraction,sceneinteraction,combatsystemandleveldesign.Thisarticleusesc#asaprogramminglanguage,whichisasafeandstableobject-orientedprogramminglanguagederivedfromCandC+.Itinheritsthepowerfulfunc

4、tionsofCandC+whileremovingsomeoftheircomplexfeatures.Unity3Disafullyintegratedprofessionalgameengine,whichuseshigh-levellanguagessuchasc#orjavatorealizescriptfunctions,enablingdeveloperstoquicklydevelophigh-performanceandhigh-qualitygameproductswithoutknowingtheunderlyingcomplextechnologies.Inthisga

5、me,theplayercanusethecontroldirectionkeytocontrolthecharactersmovement,attack,alsocaneatthebloodpacktoreplenishhealth,andinteractwiththescenethroughthelevel.Theenemyhasthreedifferentattackstates:touchoffblood,activeattackandpursuit.Thispapergivesadetaileddescriptionofthedevelopmentanddesignofthegame

6、PathoftheBrave.Keywords:Unityengine;c#;2dgame目录1绪论11. 1选题的背景与意义11.2 选题的研究内容11.3 选题的设计方案12可行性分析32. 1技术可行性32.2 经济可行性32.3 操作可行性32.4 法律可行性32.5 总结33需求分析43. 1游戏系统需求分析43.2游戏系统用例模型44系统概要设计74. 1相关用例的时序图74.2 游戏功能模块图94.3 系统活动图105游戏的实现135. 1游戏场景及人物实现135.2 人物基础操作145.3 创建基础动画215.4 受伤与攻击235.5 巡逻与状态切换305.6 环境效果356游

7、戏测试376. 1测试概述376.2 用例测试376.3 测试结论407总结44致谢45参考文献46附录A译文48附录B文献55附录C代码641绪论1.1 选题的背景与意义随着人们生活质量的逐步提高和电脑与网络迅速发展,人们对工作和学习以外的生活质量要求也在逐渐提高,电子游戏是一种现代的娱乐休闲方式,也是世界数字娱乐行业的重要的组成部分之一。选择一部画面精美、音质较高,可玩性较好的娱乐游戏成为了一种潮流的休闲娱乐方式。勇者之路作为一款经典2d闯关战斗类型游戏,游戏模式简单易上手,趣味性强,在快节奏的今天一款简单有趣的休闲游戏更受大众欢迎。可以说在人们的日常生活中,工作和学习之外,玩耍自己喜欢的

8、游戏正在成为一种潮流和时尚。而闯关战斗类游戏则深受大家的热爱。所以,开发出一部多年龄段人群都能接受,有保证的闯关战斗游戏,将会受到大众的欢迎。让人们在一天的疲惫之后,能享受到休闲游戏带来的快乐,这便是一款游戏的意义。1.2 选题的研究内容本课题以Unity3D游戏引擎为基础,搭建合适的游戏场景,编写所对应的代码对游戏角色进行控制,接收外部多种方式的输入,以实现玩家对于游戏的基本控制。设计游戏背景,游戏的Ul界面等游戏设计所必要的内容来提高游戏的可玩性和内容量。最终完成一款功能较为完善、具有一定质量的2d闯关战斗小游戏。1.3 选题的设计方案本游戏使用Unity进行设计开发,预定实现的功能有:1

9、)玩家的行动:奔跑,跳跃,下蹲,蹬墙跳,滑铲,攻击。2)敌人的行动:分为触碰到玩家产生攻击,检测到玩家时主动发起攻击,正面检测到玩家时启动防御功能。3)战斗系统:血条的制作,减血时闪红色效果。4)场景互动:玩家触碰到特定物品时会在屏幕上出现对应字母,玩家操控键盘实现互动。5)场景切换:进入下一个关卡的场景切换。6)背包系统:将捡到的物品放进背包以及使用。7)对话系统:玩家获得技能时会出现文字。8)ui:包括开始界面Ul和游戏内UI,包括状态栏。能够做到正常的交互、UI界面之间的流畅转换,让玩家流畅地进行游戏。2可行性分析2.1技术可行性本游戏使用C#语言开发技术,C#语言被广泛应用于各种领域,

10、其具有高度的可扩展性,以实现更灵活的功能,并有良好的可靠性。继承了C和C#的强大功能,又有一些简单易懂的特点,满足不同需求。而Unity官网又提供了大量的官方教程,不论是初学者还是资深的用户都能在文档中找到很多问题解决的方案,在某些视频网站也能找到不少免费的教程视频,在一定时间内初学者通过观看教程视频和阅读文档进行学习就能对Unity引擎有一定程度的掌握。VisualStudio是最流行的Windows平台应用程序的集成开发环境,是目前最优秀的C+集成开发工具之一。2.2经济可行性本游戏的设计与开发是在WindOWSlO环境下完成的,一台笔记本电脑就可以满足配置需求。所需要的编程工具ViSUa

11、ISnldio,开发工具Unity都可以在官网免费下载安装使用,素材方面,在Unity官网即可下载许多免费素材,无工具方面的的支出。开发人员是学生本人,完成游戏的设计开发和测试,无人员方面的支出。2.3操作可行性本游戏在界面和功能设计方面都充分从玩家角度出发,以界面简洁、操作简单、通俗易懂为宗旨,考虑到玩家的感受,游戏界面直观明了,交互性好,让玩家能快速了解游戏机制,操作简单易上手。2.4法律可行性本游戏的开发所用的Unity引擎免费下载安装,只需注册账号就能使用,所用素材也是官方素材库下载的素材,不涉及版权方面的纠纷,开发的游戏无不良引导或违禁违法的内容,因此法律上是可行的。2.5总结基于以

12、上的分析,在技术、经济、操作和法律方面来看,本游戏的开发没有太大的阻碍,可见本游戏的开发是完全可行的。3需求分析3.1 游戏系统需求分析3.1.1玩家需求分析随着社会的快速发展,人们的生活节奏越来越快,作为一款让人们怀念并想再次体验其简单快乐的游戏,可以让玩家沉浸其中,体会到简单有成就感的游戏体验,所以开发这个勇士之路的游戏。3.1.2功能需求分析1)在开始界面通过鼠标点击选择开始游戏。2)利用方向键来控制游戏角色的左右移动、跳跃、下蹲、蹬墙跳。3)游戏角色触碰蜗牛、被野猪攻击、被蜜蜂攻击时血条会掉血,血条清空则死亡。4)游戏角色触碰血瓶,可以将血瓶放入背包。5)游戏过程中按键盘tab键,会弹

13、出背包界面,可以直接在背包内点击血瓶补血,也可以将其拖出到游戏界面下方的物品栏中使用。6)游戏角色可与场景进行交互,当移动到指定物品宝箱或大门前,会有字母标识出现,在键盘上点击相应字母按钮,便可以打开宝箱或进入下一关。7)游戏过程中当开启宝箱会弹出文字。8)游戏一共3关,当达最后一关终点时,游戏胜利。3.2 游戏系统用例模型1)用例图Figure 3-1 Game case diagram表3T用例说明Fig.3-1 Use case instructions用例名称用例说明显示游戏要素显示游戏场景、游戏角色、血量等信息。按键功能玩家按下方向键控制游戏角色的移动,按下k键控制攻击,按下E键控制

14、场景交互,按下tab键控制背包。场景互动玩家碰到宝箱则会弹出提示,玩家走到关卡出口处则会弹出提/Ko血量减少当玩家被敌人攻击,血量减少。血量增加当玩家拾取血瓶并使用,血量增加。判断游戏状态当玩家到达非最后一关终点处,游戏进入下一关;到达游戏最后一关终点处时,游戏胜利;当血量为零时,游戏失败。2)游戏中类间关系图Figure3-2Inter-classrelationshipdiagram图中Player为游戏角色类,Scene为场景类,Enemy为敌人类,包括Boar野猪类、SnaiI蜗牛类、Bee蜜蜂类。Land为地面类,ArtiCle物品类包括:BoX为宝箱类,BottIe为瓶子类。一个场

15、景可以有多个敌人、地面和物品;游戏角色需要依赖场景才能实现自己的功能。4系统概要设计4.1相关用例的时序图4.1.1开始界面系统图4-1开始界面用例时序图Figure4-1Startinterfaceusecasesequencediagram图4-2按键功能用例时序图Figure4-2Casetimesequencediagramofkeyfunction图4-3血量增减用例时序图Figure4-3Timeseriesdiagramofthecaseofbloodvolumeincreaseanddecrease4. 2游戏功能模块图图4-4游戏功能模块图Figure4-4GameFunct

16、ionModuleDiagram4.3.1开始界面活动图图4-5开始界面活动图Figure4-5Startinterfaceactivitydiagram图4-6输入活动图Figure4-6Inputactivitydiagram图4-7其他活动图Figure4-7Otheractivitydiagram5游戏的实现5.1游戏场景及人物实现D地面图5-1地面图片Figure 5-1 Ground picture2)敌人图5-2敌人图片Figure 5-2 pictures of the enemy3)勇士图5-3勇士站立,勇士跳跃图片Figure5-3warriorstanding!,jump

17、ing聿图5-4勇士奔跑的图片Figure5-4ThepicturesofwarriorrunningaA5)其他Figure 5-5 The pictures of warrior running图5-6宝箱图片Figure 5-6 Chest picture5. 2人物基础操作5. 2.1设置基本组件设置基本组件的主要功能如下:实现人物的自由下落并且停留在地面上。图5-7游戏效果图片Figure 5-7 Game effect pictures游戏内效果如图:1)为人物添加组件a添加重力组件在player的属性面板下方选择AddComponent(添加组件),搜索RigidbOdy2D(重

18、力组件)。重力组件的作用:当未添加重力组件时,人物会在空中悬浮。为了模拟真实世界,每个物体都应当是有质量和重力的,添加重力组件后,人物就会自然下落。图5-8添加重力组件Figure5-8Addgravitycomponentb添加碰撞体组件在PIayer的属性面板下方选择AddComPOnent(添加组件),搜索CaPSUleColIider2D(胶囊碰撞体)。碰撞体组件和重力组件都是为了模拟真实世界中,一个物体必需的组件。上文添加重力组件后人物会自然下落,但是不会停留在地面上。这是因为人物和地面都没有碰撞体,无法实现碰撞。gcapif可Search$CapsuleCollider0Capsu

19、leCollider2DNewscript图5-9添加碰撞体组件Figure5-9Addcollidercomponent2)为地面添加组件a添加碰撞体组件在player的属性面板下方选择AddCOmPonent(添力口组件),搜索TilemapCollider2Do这样就可以实现人物自由下落并且停留在地面上了。QtiIeISearch:Tilemap:TilemapCollider2DISTiIemapRendererNewscript图5-10添加碰撞体组件Figure5-10Addcollidercomponent5. 2.2人物移动和翻转移动和翻转的主要功能如下:AD为左右两个方向键,

20、玩家按下任意方向键都可向所按方向键移动。当处于移动状态,按任意方向键可翻转调头。游戏内效果如图:图5-11游戏效果图片Figure5-11GameeffectpicturesD移动首先创建浮点类型变量SPeed(速度)。PUbIiC公开变量,可以在属性面板中自由输入速度数值控制移动快慢。publicfloatspeed;11IOrefrncsprivatevoidAwakeO13InputControl.三newPlayerlnputControlO;15图5-12创建变量代码截图Figure5-12Createascreenshotofthevariablecode创建实时更新函数:priv

21、atevoidFixedUpdate()以及控制人物基本移动的函数:publicvoidMove(),函数MoVe需要在函数FiXedUPdate中执行。FixedUpdate是一个固定更新的值,无论在什么设备上都有固定的频率来执行。想要控制刚体速度,需要先获得刚体。所以我们先创建一个刚体命名为rb,书写代码rb=GetComponent();将player的rigidbody2D与刚创建的rb中实现绑定,这样就可以调取rigidbody2D中所有的参数进行修改。所以现在我们可以修改速度了,书写代码rb.velocity=newVector2(inpulDirection.x*speed*Ti

22、me.deltaTime,rb.velocity.y);用输入的方向值*速度*时间的修定,其中时间的修正可以帮助我们在不同的配置电脑上都获得相同的效果2)翻转实现翻转有两种方法:方法一是修改transform中SCaIe的X数值,当数值从1变为-1时就可以实现翻转,方法二是勾选SPriteRenderer组件中Flip(翻转)的xy,本文采用方法一。创建一个临时变量facedir用来确定人物的翻转方向。当inputDirection.x数值大于0,facedir的值就等于1,反之则等于-15.2.3人物的跳跃跳跃的主要功能如下:k键为跳跃键,玩家按下k键可实现跳跃。同时按k键和任一方向键,可实

23、现朝输入的方向键的方向跳跃。游戏内效果如图:图5-13游戏效果图片Figure5-13Gameeffectpictures首先编辑按键,打开PIayerinPUtControl,添加actions命名为jump,将其设置为k键。()PtyrinputCotrol(InputActions)XvAsetAuto-Save0AcliorwBnnRopertMts1 *mvBinding.JUmP*PthSpc(KeyboardISpaceKytor(J)叱UmincontrolsctwvnKWyboenSskMOU%JJmepedTouchJoystickXRInteracboniProcesso

24、rs图5-14设置跳跃键Figure5-14Setthejumpkey创建浮点类型变量jumpForce(跳跃力),接下来实现按下跳跃键就完成单次跳跃,书写代码inputControl.Gameplay.Jump.started+=Jump;其中+二是注册函数的含义。在刚体上施加一个向上方向的力transform.up*跳跃力jumpforce,设置一个跳跃力数值,结合重力数值调整到一个满意的状态。但是我们可以看到一些问题,比如人物跳跃到空中的时候可以一直跳,所以接下来还要完成限制跳跃,思路就是只有在地上的时候可以跳跃,而在空中不可以跳跃。另一个问题就是如果跳跃贴到墙,由于有一个朝墙的速度人物

25、就会卡在墙上。1referenceprivatevoidJump(InputAction.CallbackContextobj)64rb.AddForce(transform.up*jumpForce,FceMode20.Impulse);图5-15跳跃代码截图Figure5-15Jumpcodescreenshots解决连续跳跃问题:思路是只有在地上的时候可以跳跃,而在空中不可以跳跃。那么就需要进行物理环境监测,创建一个脚本命名为PhySiCSCheck,将其添加到Player身上。创建函数方法CheCk,由于需要不断执行所以将其放在UPdate函数中。创建一个布尔值变量isground代表

26、是否在地面的状态,通过碰撞体发生碰撞的方式来检测,但是要注意区分是撞到地面还是撞到墙。创建浮点类型变量Checkraduis检测范围,创建变量groundlayero书写检测地面代码isGround=Physics2D.OverlapCircle(transform.position,CheckRaduis,groundLayer);其中transform.position为人物脚底中心点,如果环境监测到是地面则执行跳跃。privatevoidJumpdnputActioneCaHbackContextobj)if(physicsCheck.isGround)rb.AddForce(trans

27、form.upjumpForcerForceMode2D.Impulse);图5-16环境检测代码截图Figure5-16Screenshotoftheenvironmentaldetectioncode解决人物跳起来贴墙就卡住的问题:创建光滑的物理材质,让人物不会和墙面产生摩擦。将physicsmaterial2D的fiction设为0即可。5.2.4人物的下蹲下蹲的主要功能如下:S键为下蹲键,玩家按下S键可实现下蹲。在下蹲状态时,人物不可以左右移动。游戏内效果如图:图5-17游戏效果图片Figure5-17Gameeffectpictures创建布尔型状态iscrouch,判断是否下蹲:当

28、y轴的数值小于-0.5并且人在地上,就代表要进行下蹲。书写代码isCrouch=InputDirection.y-0.5f&physicsCheck.isGround;两个条件同时为true时才执行下蹲,有任何一个不为true都不会执行。接下来制作下蹲的状态不能左右移动,只需要在控制移动的语句前加上判断语句,If(!iscrouch),这样在下蹲状态就只能转换人物的方向而不能左右移动了。publicvoidNove()78if口巾SCrOUChwrb.velocity=newVector2(input0irection.*speedTi三e.deltaTime,rb.velocity.y);8

29、IintfacDir三(int)transform.localScle.x;图5-18下蹲移动控制代码截图Figure5-18Squatmovesthecontrolcodescreenshot无论玩家还是敌人以及部分物品,都需要拥有相应的动画播放达到更精美的游戏效果。动画要与绑定角色契合,不同动画之间的切换要流畅自然,要求角色能够根据当前的速度和状态自动播放相应动画。本文以人物站立动画为例,首先将人物逐帧动作图片按不同动作分别命名便于区分。图5-19逐帧图片Figure5-19Framebyframepicture如何添加动画呢?接下来要学习新的组件即动画控制器Animatoro首先在add

30、compoent中选择animator,创建新的project即animatorcontroller管理多个动画。在window菜单选择Animation中的AnimatOr,即动画控制器。进入动画控制器窗口,可以看到三种默认的状态:Entry动画的进入,Exit动画的退出,AnyState任何状态都可以执行的动画,通过在此窗口编辑人物的不同动画的切换。图5-20动画控制器Figure5-20animationcontroller先创建idle站立动画,在window菜单选择Animation中的Animation,可以看到出现一个时间轴的窗口,点击Create创建动画,可以看到站立动画已经默

31、认添加到AnimatoI当中了,并且为黄色也就是当游戏一进入的时候会默认播放的动画。图5-21创建动画Figure5-21Createanimation接下来把动画添加到时间轴上,将命名好的动作图片拖拽到时间轴上,并调节采样率到一个满意的速度。图5-22添加时间轴Figure5-22Addtimeline用同样的方法可以创建跑动动画,跳跃动画,下蹲动画,攻击动画等一系列动作。那么接下来制作如何让人物从站立状态切换到跑步状态,即动画的切换。选中idle站立状态,按鼠标右键选择MakeTranSitiolI创立状态,就可拉出一条线,与run跑步状态连接。图5-23动画切换Figure5-23Ani

32、mationswitch单独创建一个脚本用来播放人物的动画PIayerAnimation。privateRigidbody20rb;0referencesprivatevoidAwake()11anim=GetConponent();rb三GetComponent();M0referencesprivatevoidUpdateO174SetAnimationO;191referencepublicvoidSetAnimationO22 口23 anin.SetFloat(velocityX,rb.velocity.x);|24 I图5-24播放动画代码截图Figure5-24Playthesc

33、reenshotsoftheanimationcode5.4受伤与攻击5.4.1创建人物状态栏为了能在游戏中直观地看到游戏角色的血量,将在游戏界面左上角添加ui,显示游戏角色头像和血量条。游戏内效果如图:图5-25游戏效果图片Figure5-25Gameeffectpictures首先在Hierarchy下空白处右键创建ui,选择Canvas即画布。可以注意到eventsystem,所有屏幕的点击比如按钮、滑动条,因为它才能被识别到。接下来需要对其进行设置:点击evensystemactionasset,选择自己创建的Piayerinputcontrol进行替换。图5-26设置evensyst

34、emFigure5-26Setuptheevensystem在HierarChy下空白处右键创建ui,选择image,调整坐标位置,制作血量滑动条。图5-27血量条Figure5-27Bloodvolumebar5.4.2伤害计算伤害计算的主要功能如下:当角色受到攻击,将会按固定值减少血量。敌人只能攻击游戏玩家而不能攻击敌人。游戏内效果如图:图5-28游戏效果图片Figure5-28Gameeffectpictures1)让敌人只能攻击游戏角色而不能攻击敌人的方法:首先在敌人界面的Iayer内选择创建新的类别一一player、enermyo在游戏角色界面的Iayer内选择PIayer类别,敌人

35、则选择enermy类别。随后在敌人界面的碰撞界面的剔除类别中选择Player和enermy这两个类别,这样就同时剔除了这两个图层的碰撞检测,可以看到人物可以穿过敌人,而敌人与敌人之间也不会发生碰撞了。图5-29剔除类别Figure5-29Excludingcategories那么如何检测当人物贴近敌人会产生伤害呢?这时我们要为敌人添加额外的触发器trigger,为敌人添加CaPSUleCoHider2D,并选中isTrigger,注意要剔除掉敌人类避免敌人与敌人之间触碰发生伤害。2)伤害计算在character脚本内创建float类型变量maxHealth(最大血量)、CurrentHealt

36、h(当前血量),将脚本挂在敌人和游戏角色上,分别设置好最大血量。既然两个物体都有CharaCter的代码,那么只需要做一个攻击有关的代码,每一次当攻击判断的时候触发执行对方身上的CharaCter,进行数值的减少。usingUnityEngine;1referncepublicclassCharacter:HonoBehaviour(Header(-*三n-)publicfloatmaxHealth;0rfrncMpublicfloatCurrentHealth;1rrncpublicvoidTakeDanageCAttackattacker)图5-31创建变量Figure5-31Create

37、variables游戏中有三种不同的敌人,想要让三种敌人有不同的伤害值,在attack脚本中创建血类型的变量damage(伤害值)、float类型变量attackrange(攻击距离)、attackrate(攻击频率)。usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;OreferencesClaSSAttackpublicclassAttach:MonoBehaviour国0referencespublicintdamage;0referencespublicfloatattackRange;l0

38、referencespublicfloatattackRate;图5-32创建变量Figure5-32Createvariables使用OntriggerStay的方法,通过Other来访问被攻击的那个人来获得其身上的character代码。在CharaCter脚本中创建接收伤害的函数方法,把一个attack类型值传进来命名attacker,然后在attack代码中就可以访问它,调用takedamage把当前的attack传进去,书写语句other.GetComponent().TakeDamage(Ihis);设置好单次攻击值。创建Start函数,使游戏开始后当前血量等于最大血量,即刚进入游

39、戏时是满血的。当受到攻击时就用当前血量就减去伤害,这样就可以得到当前血量了。书写语句CurrentHealth=maxHealth;CurrentHealth-=attacker.damage;publicclassCharacter:MonoBehaviourHeader。基本属性)1referencepublicfloatmaHealth;2referencespublicfloatOUPrentHealt机OreferencesprivatevoidStartO_CurrentHealth三maHealth;1referencepublicvoidTakeOanageCAttackatt

40、acker)I19CurrentHealth-三attacker.damage;图5-33当前血量代码截图Figure5-33Screenshotofthecurrenthealthvolumecode5.4.3游戏角色攻击游戏角色攻击的主要功能如下:当游戏角色对敌人发起攻击可以导致敌人死亡。游戏内效果如图:游戏角色将用触发器的方式来执行三段攻击,在游戏角色下创建子集物体attackarea,并在其下创建三段攻击attackl、attack2attack30UHfwchy+SamptSen*0MamCamera0Go*AnimatorQPlayerAnimation(Script)QPhysi

41、csCheck(Script)QPlayerController(Script)QCharacter(Script)AttackAreaGameObjectlsActiveTransfomWAttack1GameObjectJsActiveTransform*4PolygonCollider2DpesheetCurAttack2Attack3图5-36添加触发器接下来修改在时间轴上的变量,首先将物体和时间轴上的关闭,随后拖动关键帧到想要的位置再启动时间轴,这时就添加了一个关键帧点,在下一帧就把它关闭。那么怎么计算攻击的伤害呢?首先在attackl上添加attack脚本,为每段攻击设置单独的攻击

42、值,同样的方法制作attack2、attack3,可以将attack3的攻击值调大作为暴击。图5-37设置伤害值Figure5-37Setthedamagevalue为了防止人物伤到自己,可以将IayeroVerrideS中的contactcapturelay勾选上enemy,这样将只和敌人发生触碰关系。实现攻击状态不能移动的功能:在移动代码的判断语句中加上!isAttack,即不在攻击状态时才能移动。5.5巡逻与状态切换5.5.1野猪的撞墙转身和等候计时野猪的撞墙转身和等候计时的主要功能如下:当野猪漫游时遇到墙面或悬崖,会自动转身实现巡逻功能。当野猪检测到墙壁或悬崖会进行倒计时,一定时间后再

43、进行转身。游戏内效果如图:图5-38游戏效果图片Figure5-38Gameeffectpictures1)实现巡逻功能:原理就是判断墙壁。在PhySiCSCheCk脚本中创建几个布尔值,touchleftwall(ft),touchrightwall(右墙)以及VeCtOr2类型的偏移IeftOffset,rightoffseto接下来书写墙体的判断语句:touchLeftWall=Physics2D.OverlapCircle(Vector2)transform.position+IeftOffset,CheckRaduis,groundLayer);获得撞墙检测组件,将其添加在UPdat

44、e函数中,持续判断,这样野猪一旦撞墙就会转身。书写判断语句:if(physicsCheck.touchLeftWallphysucsCheck.IouchRightWall)privatevoidUpdateOfaceDir三newVector3(-transform.IocalScale.r,);if(physicsCheck.touchLeftWallphysicsCheck.touchRightWalt)transform.IocalScale三newVector3(faceDir.x,1,1);图5-39撞墙判定Figure5-39Crashagainstthewall2)实现野猪撞墙后等待功能:此处需要书写计时器的功能,创建等候时间变量Waittime,记录当前时间waittimecounter,状态waito将计时器的函数方法也写在UPdate

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 在线阅读 > 生活休闲


备案号:宁ICP备20000045号-1

经营许可证:宁B2-20210002

宁公网安备 64010402000986号