public class Demo_01 : MonoBehaviour
{
Animator animator;
void Start()
{
animator = GetComponent<Animator>();
}
void Update()
{
bool input_attack = Input.GetMouseButtonDown(0);
if (input_attack)
{
var info = animator.GetCurrentAnimatorStateInfo(0);
//第一段连招 在休闲状态下可以使用
if (info.IsName("Idle_A"))
{
//动画播放之间有0.1秒过渡效果 避免切入过于突兀
animator.CrossFade("Atk1", 0.1f);
}
else if (info.IsName("Atk1"))//第二段必须在第一段状态下
{
if (CanAttak(info, 0.1f, 1f))
{
animator.CrossFade("Atk2",0.1f);
}
}
else if (info.IsName("Atk2"))//第三段必须在第二段状态下
{
if (CanAttak(info, 0.1f, 1f))
{
animator.CrossFade("Atk3", 0.1f);
}
}
else if (info.IsName("Atk3"))//第四段必须在第三段状态下
{
if (CanAttak(info, 0.1f, 1f))
{
animator.CrossFade("Atk4", 0.1f);
}
}
}
}
/// <summary>
/// 可以攻击
/// </summary>
private bool CanAttak(AnimatorStateInfo info, float start, float end)
{
return info.normalizedTime>=start&&info.normalizedTime<=end;
}
}
把脚本挂在人物的身上,在动画控制器里面不需要设置动画触发条件,我们完全靠代码来控制
只需要把攻击状态连上一条返回Idle状态的线即可,因为我们在休闲状态触发攻击之后,我们还要返回原来的休闲状态,否则人物动画会卡死在攻击动画攻击完毕那一刻,动画播放之间有0.1秒过渡效果 ?避免切入过于突兀
?
|