首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何实现玩家攻击?

星龙游戏开发日志6:玩家攻击

大家好,我是星龙,好久不见,时隔一年我又开始写游戏开发日志了。废话不多说,今天来教大家如何实现游戏中玩家的攻击。

首先用PS画出玩家的攻击动画,这里我只画了两帧,一帧抬手动作,一帧斩击动作。

然后在unity导入素材,创建一个攻击时候的动画(具体操作可以查看往期文章:游戏开发日志3:制作人物动画)。

在动画器设置好过渡到攻击动画的条件,任何时候都可以进入到攻击动画,并且执行完攻击动画将会自动退出(具体操作可以查看往期文章:游戏开发日志4:动画过渡)。

之后给玩家Player添加一个子对象PlayerAttack。        给子对象PlayerAttack添加一个多边形碰撞体,勾选触发器,绘制出玩家的攻击范围。

接下来就是愉快的敲代码环节,在角色的PlayerController脚本中创建五个变量,分别是三个float变量:攻击碰撞器持续的时间、攻击前摇时间、攻击后摇时间和两个bool变量:正在攻击、是否可以攻击。        然后写攻击函数,当按下键盘J键并且isAttack = true的时候,执行攻击动画,attacking = true表示正在攻击,isAttack = false表示不能再次攻击,并且攻击的时候会有一个硬直效果,随后StartCoroutine(协程名());启动协程

这里稍微讲协程在这里的作用,主要是用于延迟某一段代码的延迟执行,从而实现攻击前摇、攻击后摇等效果。如下图所示,协程函数的返回值是IEnumerator,返回格式写成yield return,后面new WaitForSeconds (attackBeforeTime);则是返回的值,表示attackBeforeTime(N秒)后执行后面的代码。        整个攻击流程先是按下攻击键产生攻击动画,因为攻击动画分为抬手动作和斩击动作,所以需要一个协程来延迟开启攻击碰撞体,攻击碰撞体的作用主要是用于检测是否有敌人;随后攻击动画结束后,则关闭攻击碰撞体,令attacking = false表示攻击动画已经结束;最后执行一个攻击后摇的协程,主要用于设置下次攻击的间隔的时间,俗称攻速。

在玩家移动函数那边加入一个判断条件,如果attacking = true,则玩家无法移动,用于配合攻击函数中rb.velocity = new Vector2(0, rb.velocity.y);这一行代码,产生玩家攻击时的硬直效果。

最后再加一个OnTriggerEnter2D函数,当攻击到标签为Enemy的物品时,会将此消灭。    别忘了在Update函数加上Attack函数。

OK,以上就是本期的全部内容了!希望对你们有所帮助!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20220920A04EOU00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券