(M)unity受伤反弹以及死亡动画

受伤反弹

1.在人物控制脚本中添加受伤后速度将为0,并添加一个反弹的力

在刷新移动时,需要在没有受伤的状态

csharp 复制代码
public bool isHurt;
public float hurtForce;
private void FixedUpdate()
{
    if(!isHurt)
    Move();
}

public void GetHurt(Transform attacker)
{
    isHurt = true;
    rb.velocity = Vector2.zero;
    //取自己的方向,应该无关乎数值大小,所以在完成方向的计算后应该规范化为1(normalize、)
    Vector2 dir = new Vector2((transform.position.x - attacker.position.x), 0).normalized;
    //添加反弹的力
    rb.AddForce(dir * hurtForce, ForceMode2D.Impulse);
}

2.添加到受伤事件列表中

3.由于是通过代码对物体改变状态,添加到受伤事件中的,受伤后ishurt布尔值一直为true,在运行时会有人物持续反弹的效果

更改数值为false方法

①在受伤动画控制器中添加一个脚本,通过在该代码中引入角色脚本改变数值,完成受伤动画播放结束后,受伤布尔值也改变成false

②双击进入脚本后,更改模板完成数值更改

通过animator.GetComponent获取动画挂载人物身上挂载的组件

csharp 复制代码
override public void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
{
    animator.GetComponent<PlayerController>().isHurt = false;
}

死亡事件动画

添加死亡动画,任何情况都可以完成转换,添加死亡布尔值为参数,true进入动画状态,false退出游戏

1.由于动画播放默认loop,在设置在anystate状态下级后,只要血量为0,就会反复执行动画

故,将死亡动画转化为单次播放

2.此外,除去在死亡后执行动画,事件中还应包含对输入系统的禁止

①人物角色脚本:

设置事件

csharp 复制代码
using UnityEngine.Events;
public UnityEvent onDie;
public void TakeDamage(Attack attacker)
{
    //如果无敌,则直接返回
    if (invulnerable)
    {
        return;
    }
    //Debug.Log(attacker.damage);
    if (currentHealth - attacker.damage > 0)
    {
        currentHealth -= attacker.damage;
        //触发一次伤害,就变成无敌
        TriggerInvulnerable();
        //执行受伤
        OnTakeDanmage?.Invoke(attacker.transform);
    }
    else {
        currentHealth = 0;
        //执行死亡
        onDie?.Invoke();
    }       
}

②playerController脚本:

添加即将添加到事件中的死亡函数,停止输入

csharp 复制代码
public bool isDead;
public void PlayerDie()
{
    isDead = true;
    //禁止gameplay下的相关输入
    inputControl.Gameplay.Disable();
}

③动画脚本:

检测人物控制脚本中角色的死亡状态,填写在转换条件中的布尔变量中

csharp 复制代码
void Update()
{
    SetAnimation();    
}
public void SetAnimation()
{
    anim.SetBool("isDead", playerController.isDead);
}
相关推荐
Artistation Game1 天前
九、怪物行为逻辑
游戏·unity·游戏引擎
百里香酚兰1 天前
【AI学习笔记】基于Unity+DeepSeek开发的一些BUG记录&解决方案
人工智能·学习·unity·大模型·deepseek
妙为1 天前
unreal engine5制作动作类游戏时,我们使用刀剑等武器攻击怪物或敌方单位时,发现攻击特效、伤害等没有触发
游戏·游戏引擎·虚幻·碰撞预设
dangoxiba1 天前
[Unity Demo]从零开始制作空洞骑士Hollow Knight第十三集:制作小骑士的接触地刺复活机制以及完善地图的可交互对象
游戏·unity·visualstudio·c#·游戏引擎
先生沉默先2 天前
使用Materialize制作unity的贴图,Materialize的简单教程,Materialize学习日志
学习·unity·贴图
十画_8242 天前
Visual Studio 小技巧记录
unity·visual studio
red_redemption2 天前
cpp,git,unity学习
git·unity·游戏引擎
tealcwu2 天前
【Unity踩坑】Unity更新Google Play结算库
unity·游戏引擎
先生沉默先2 天前
unity 默认渲染管线材质球的材质通道,材质球的材质通道
unity·游戏引擎·材质
白鹭float.2 天前
【Unity AI】基于 WebSocket 和 讯飞星火大模型
人工智能·websocket·unity