/// <summary> /// 切换动画 /// </summary> /// <param name="id">动画ID</param> /// <param name="animDeltaTime">补偿上下帧间的误差</param> /// <returns></returns> bool ChangeAction(string id, int animDeltaTime) { int indexAction = ActionHelp.GetActionIndex(_actionGroupData, id); if (indexAction < 0) { return(false); } ChangeAction(indexAction, animDeltaTime); //if (beforName == _activeActionData.Name) //{ // //if (oldAction.Name != "Idle") // // Debug.Log("asdf"); // beforName = _activeActionData.Name; //} //else //{ // if (beforName != "Idle") // Debug.Log("asdf"); //} return(true); }
/// <summary> /// 处理中断 /// 立即模式 立即由切换Action. /// 等待完成 等待动画播放完成后执行. /// </summary> /// <param name="interrupt"></param> /// <returns></returns> bool LinkAction(ActionInterrupt interrupt) { if (ActionHelp.GetActionIndex(_actionGroupData, interrupt.ActionID) == -1) { Debug.LogError(string.Format("Can't find ActionID {0}", interrupt.ActionID.ToString())); return(false); } bool connectImmediately = interrupt.ConnectMode == ActionInterruptConnectMode.Immediately; if (interrupt.ConnectMode == ActionInterruptConnectMode.WaitFinish) { // 中断触发的时机是当前动画播放完成 int actualQueuedTime = interrupt.ConnectTime <= 100 ? _activeActionData.AnimTime * interrupt.ConnectTime / 100 : // [0-100] AnimTime _activeActionData.AnimTime + _activeActionData.PoseTime * (interrupt.ConnectTime - 100) / 100; if (actualQueuedTime <= _actionTime) { connectImmediately = true; } _queuedInterrupt = interrupt; _queuedInterruptTime = actualQueuedTime; } // 立即中断到指定动画 if (connectImmediately || interrupt.ConnectMode == ActionInterruptConnectMode.Immediately) { ChangeAction(interrupt.ActionID, 0); } return(true); }