前言
欢迎来到【制作100个Unity游戏】系列!本系列将引导您一步步学习如何使用Unity开发各种类型的游戏。在这第26篇中,我们将探索如何用unity制作一个unity2d横版卷轴动作类游戏,我会附带项目源码,以便你更好理解它。
本节主要是添加攻击和三段攻击
三段攻击
新增攻击图层,权重设置为1,覆盖模式
配置攻击动画
一段攻击播放90%,按了按键进入下一个攻击状态,最后一段攻击也是一样
一段攻击播放了百分百就退出,其他两段攻击一样
添加攻击按键操作
键盘按键
手柄按键,如果有的话
修改PlayerAnimation
//播放攻击动画 public void PlayAttack(){ anim.SetTrigger("attack"); }
修改PlayerController
public bool isAttack;//是否攻击 private void Awake() { // 。。。 inputControl.Player.Attack.started += PlayerAttack; } //攻击 private void PlayerAttack(InputAction.CallbackContext context) { playerAnimation.PlayAttack(); isAttack = true; }
效果
攻击
分别配置三段攻击动画触发区域
配置动画在合适的位置开启对应攻击触发器
设置只对敌人造成伤害
默认关闭攻击触发器,新增图层
确保配置只对敌人层造成伤害
如果你是unity2022版本(我这里是2021),你还可通过修改配置接触捕捉层的方式实现只对敌人层造成伤害
还要记得设置敌人的受伤无敌时间和生命值
如果你使用的是2022版本的unity,我们可以给野猪配置2个碰撞器,一个用于触发伤害,所以即使我们前面设置好了也可能不会造成伤害,我们需要提高野猪触发器的碰撞检测优先级
效果,野猪受伤并扣血
限制可以移动攻击
前面测试会发现人物可以移动攻击,因为我们没有做任何的限制
修改PlayerController
private void FixedUpdate() { //受伤和攻击禁止移动 if(!isHurt && !isAttack) Move(); }
每一段攻击动画都挂载状态机脚本,确保动画播放完isAttack变为false
测试发现还是会滑步,因为前面我们把人物物理材质改成了无摩檫力,其实方法有很多,在人物脚底再放一个带摩檫力的碰撞体也行,代码控制人物在跳起来取消摩檫力也行,这里为了方便我们直接在人物脚下再放一个碰撞体
效果
可以看到,这样攻击还是会有间隙,导致攻击前移,如果你不想要这种效果可以修改前面的AttackFinish(也可以保留,看自己项目的需求)
效果
问题 角色连续按四下攻击,最后会多a一下
可以在动画入口再多加一层判断
修改PlayerAnimation
anim.SetBool("isAttack", playerController.isAttack);
问题:站在原地连续攻击野猪,只有第一下攻击野猪才掉血,后面的攻击野猪不掉血
出现这个现象是因为OnTriggerStay2D有个休眠时间,它被触发一段时间后自动停止。要想再次触发该函数需要稍微移动其中一个碰撞盒,也就是玩家需要移动到不同位置攻击野猪它才会掉血。后面会让野猪动起来,这样这个问题就不存在了。
当然也可以修改OnTriggerStay2D的休眠时间,使之变长,这样即使在原地攻击野猪它也会持续掉血。
修改OnTriggerStay2D的休眠时间方法:点击Edit -> Project Settings,然后选择Physics 2D,如下图所示,将Time To Sleep(休眠时间)修改为一个较大的值,如10000(默认情况下是0.5)
源码
源码不出意外的话我会放在最后一节