一般这种情况是因为同时按太多键。
比如我是在移动动作的同时,进行闪避动作,就有小概率人物动作会定格在闪避的最后一帧,同时闪避动作也不会自行结束,因为动画机里设定的Dodge参数始终为True
试了一下处理按键太麻烦,干脆直接加个判断语句,如果人物卡在这个动作一定时间了,那就把这个动作的布尔参数重新设为False,关掉这个动作
代码如下:
public class anim : MonoBehaviour { ? ? private Animator ani; ? ? bool isDodge;
? ? float DodgeTime;//
? ? void Start() ? ? { ? ? ? ? ani = GetComponent<Animator>();
? ? } ? ? void Update() ? ? {
? ? ? ? if (Input.GetKeyDown(KeyCode.Space))//按下空格进行闪避 ? ? ? ? { ? ? ? ? ? ? ani.SetBool("attack", false);
? ? ? ? ? ? ani.SetBool("dodge", true); ? ? ? ? }
? ? ? ? if (ani.GetBool("dodge"))//通过动画机内的闪避参数,计算闪避动作的实际进行时间 ? ? ? ? { ? ? ? ? ?? ? ? ? ? ? ? DodgeTime += Time.deltaTime; ? ? ? ? ? ? if (DodgeTime >= 0.3)//如果卡在闪避动作超过0.3秒 ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ani.SetBool("dodge", false);//那么将闪避参数设为false,结束闪避动作 ? ? ? ? ? ? ? ? Debug.Log("闪避时间为:" + DodgeTime); ? ? ? ? ? ? ? ? DodgeTime = 0; ? ? ? ? ? ? } ? ? ? ? } ? ? }
? ? void startDodge()//在闪避动作的“事件”特定时间,添加一个函数以确定闪避开始 ? ? { ? ? ? ? isDodge = true; ? ? ? ? ani.SetBool("attack", false);//防止动作冲突 ? ? } ? ? void endDodge()//在闪避动作的“事件”特定时间,添加一个函数以确定闪避结束 ? ? { ? ? ? ? isDodge = false; ? ? ? ? DodgeTime = 0;//如果动作正常进行没卡死,那么DodgeTime=0 ? ? ? ? ani.SetBool("dodge", false);
? ? }
|