(M)unity事件events执行设置人物受伤动画

通过事件的添加和设置可以完成对受伤后可能的操作,包括反弹,受伤动画反弹,ui设置。


ps

叠加动画的设置

1.设置不同的动画图层,完成动画效果的叠加(例如一边idle,一边因为受伤而变红)

步骤②为设置权重,权重与上一个图层相同
步骤③为设置混合模式,addictive模式可以完成动画的叠加
(M)unity事件events执行设置人物受伤动画_第1张图片

受伤变红动画的绘制
添加属性->选择sprite renderer->在需要的帧修改属性

(M)unity事件events执行设置人物受伤动画_第2张图片


脚本添加

1.在动画脚本中添加对受伤动画参数的设置(将受伤动画参数设置为trigger,触发则开始播放,调整动画的transition时,播放一次就返回上一级动画,如图

(M)unity事件events执行设置人物受伤动画_第3张图片
(M)unity事件events执行设置人物受伤动画_第4张图片

    void Update()
    {
        SetAnimation();
        
    }

    public void SetAnimation()
    {
        anim.SetFloat("velocityX", Mathf.Abs(rb.velocity.x));
        anim.SetFloat("velocityY", rb.velocity.y);
        anim.SetBool("isGround", pc.isGround);
        //anim.SetFloat("crouch", cr.isCrouch);
    }
//受伤由于只发生一次,不需要在update中逐帧检测,通过事件的添加完成
    public void PlayerHurt()
    {
        anim.SetTrigger("hurt");
    }

2.在角色脚本受伤函数中完成事件的添加

using UnityEngine.Events;
添加命名空间

public UnityEvent OnTakeDanmage;
由于事件中需要完成的操作可能包含位移,所以加入transform组件作为参数

③受伤后减血,进入无敌状态,同时执行受伤事件

    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;
        }
           
    }

④在ontakedamage事件中注册事件:受伤动画
将动画脚本拖入到下边脚本框中,右侧选择动画脚本中的受伤函数
在角色掉血时执行注册表中的函数,这里只添加了受伤动画

在运行时触发会执行该脚本,操纵触发器变量,选择runtime only

(M)unity事件events执行设置人物受伤动画_第5张图片

⑤运行完成受伤动画的播放

你可能感兴趣的:(unity,游戏引擎)