通过事件的添加和设置可以完成对受伤后可能的操作,包括反弹,受伤动画反弹,ui设置。
ps
叠加动画的设置
1.设置不同的动画图层,完成动画效果的叠加(例如一边idle,一边因为受伤而变红)
步骤②为设置权重,权重与上一个图层相同
步骤③为设置混合模式,addictive模式可以完成动画的叠加
受伤变红动画的绘制
添加属性->选择sprite renderer->在需要的帧修改属性
脚本添加
1.在动画脚本中添加对受伤动画参数的设置(将受伤动画参数设置为trigger,触发则开始播放,调整动画的transition时,播放一次就返回上一级动画,如图
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<Transform> 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
⑤运行完成受伤动画的播放