Exemple #1
0
        /// <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);
        }
Exemple #2
0
        /// <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);
        }