一.添加动画
- 1.分别创建GreenHurt(38-41), GreenDead(42-53), 拖入对应的素材
- 2.删掉刚刚创建的动画产生的state(并不会删掉动画本身)
二.录制受伤闪烁效果
- 1.添加受伤图层
- 2.添加新的受伤动画(Hurt1是被击退的特效,Hurt2是闪烁的特效)
- 3.添加Property
- 4.将动画时间范围选择0-1s, 然后在0.2s,0.4s,1s 分别设置透明度
- 5.先删掉Base Layer层的Hurt2动画, 然后设置HurtLayer层
- 6.将Hurt2拖到Hurt层的这个位置
- 7.在Param中添加触发器,添加动画过渡的condition
目前到 9:24
第二天继续
- 1.点击通往hurt2的过渡线
动画结束之后的线是有退出时间的
- 2.打开Player身上的PlayerAnimation脚本编辑
添加如下代码
// 执行受伤
public void PlayerHurt()
{
anim.SetTrigger("Hurt"); // 这个名字是动画面板上的Param,不要写错
}
- 3.修改人物身上挂载的Char: 修改 Assets/Scripts/General/Character.cs, 增加受伤触发事件
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
public class Character : MonoBehaviour
{
[Header("基础属性")]
public float maxHealth;
public float currentHealth;
[Header("受伤无敌")]
public float invulnerableDuration;
private float invulnerableCounter;
public bool invulnerable;
public UnityEvent<Transform> OnTakeDamage; //受伤触发事件
private void Start()
{
currentHealth = maxHealth; //初始血量满血
}
private void Update()
{
if (invulnerable)
{
invulnerableCounter -= Time.deltaTime;
if (invulnerableCounter <= 0)
{
invulnerable = false;
}
}
}
public void TakeDamage(Attack attacker)
{
if (invulnerable)
return;
// Debug.Log(attacker.damage);
if (currentHealth >= attacker.damage)
{
currentHealth -= attacker.damage;
TriggerInvulnerable();
// 执行受伤
} else
{
currentHealth = 0;
// 触发死亡
Debug.Log("触发死亡");
}
}
// 无敌判断
private void TriggerInvulnerable()
{
if (! invulnerable)
{
invulnerable = true;
invulnerableCounter = invulnerableDuration;
}
}
}
回到unity中可以发现Player的Charters组件中多了这个Unity的事件功能, 我们就可以在受伤时间触发时,执行播放动画,声音,改变UI等方法
- 4.将PlayAnimation拖动到这里, 调用刚刚其PlayHurt方法
- 5.修改Character.cs的代码,触发事件
测试成功: 当人解除到boar时, 人物闪烁
- 1.这里作者又又又改了, 他说还是希望播放最初那个受伤动画(仍然是另外一个Layer)
- 2.给Player添加受伤改变颜色的效果
- 3.在1和3帧处, 修改颜色
目前到 12:32