最终效果
系列导航
文章目录
- 最终效果
- 系列导航
- 前言
- 三段攻击
- 攻击
- 设置只对敌人造成伤害
- 限制可以移动攻击
- 问题 角色连续按四下攻击,最后会多a一下
- 问题:站在原地连续攻击野猪,只有第一下攻击野猪才掉血,后面的攻击野猪不掉血
- 源码
- 完结
前言
欢迎来到【制作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)
源码
源码不出意外的话我会放在最后一节
完结
赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注
,以便我第一时间收到反馈,你的每一次支持
都是我不断创作的最大动力。当然如果你发现了文章中存在错误
或者有更好的解决方法
,也欢迎评论私信告诉我哦!
好了,我是向宇
,https://xiangyu.blog.csdn.net
一位在小公司默默奋斗的开发者,出于兴趣爱好,最近开始自学unity,闲暇之余,边学习边记录分享,站在巨人的肩膀上,通过学习前辈们的经验总是会给我很多帮助和启发!php是工作,unity是生活!如果你遇到任何问题,也欢迎你评论私信找我, 虽然有些问题我也不一定会,但是我会查阅各方资料,争取给出最好的建议,希望可以帮助更多想学编程的人,共勉~