IEnumerator SpeedUpYield()
        {
            float tempDeltaTime = speedUpDeltaTime;

            while (mSpeedMode == eSpeedMode.speedUp)
            {
                if (tempDeltaTime > 0f)
                {
                    tempDeltaTime -= Time.deltaTime;
                    pc.moveSpeed   = originalMoveSpeed + targetSpeedUp * tempDeltaTime / speedUpDeltaTime;
                }
                else
                {
                    tempDeltaTime = speedUpDeltaTime;
                    mSpeedMode    = eSpeedMode.high;
                    pc.moveSpeed  = originalMoveSpeed + targetSpeedUp;
                    break;
                }
                yield return(null);
            }
            yield return(null);

            while (mSpeedMode == eSpeedMode.high)
            {
                if (speedUpTimeLeft > 0f)
                {
                    speedUpTimeLeft -= Time.deltaTime;
                }
                else
                {
                    speedUpTimeLeft = 0f;
                    mSpeedMode      = eSpeedMode.speedDown;
                    break;
                }
                yield return(null);
            }
            yield return(null);

            while (mSpeedMode == eSpeedMode.speedDown)
            {
                if (tempDeltaTime > 0f)
                {
                    tempDeltaTime -= Time.deltaTime;
                    pc.moveSpeed   = originalMoveSpeed + targetSpeedUp * (1f - tempDeltaTime / speedUpDeltaTime);
                }
                else
                {
                    tempDeltaTime   = 0f;
                    mSpeedMode      = eSpeedMode.normal;
                    pc.moveSpeed    = originalMoveSpeed;
                    speedUpTimeLeft = 0f;
                    break;
                }
                yield return(null);
            }
            yield return(null);
        }
        /// <summary>
        /// 加速跑
        /// </summary>
        /// <param name="speedUp">增加的速度</param>
        /// <param name="speedTime">加速持续的时间,加速时间有最短的限制,必须>2*速度改变时间</param>
        public void SpeedUp(float speedUp, float speedTime)
        {
            //在加速过程中吃了加速的道具,刷新加速的时间
            if (speedUpTimeLeft > 2f * speedUpDeltaTime)
            {
                //0.3秒内再吃一个加速不现实吧,加速状态的速度最好是一个固定值
                speedUpTimeLeft = speedTime;
                targetSpeedUp   = speedUp;
                if (mSpeedMode == eSpeedMode.normal || mSpeedMode == eSpeedMode.speedDown)
                {
                    mSpeedMode = eSpeedMode.high;
                }
            }
            else if (speedUpTimeLeft == 0f)
            {
                targetSpeedUp   = speedUp;
                speedUpTimeLeft = speedTime;
                mSpeedMode      = eSpeedMode.speedUp;

                //启动加速的协程
                StartCoroutine(SpeedUpYield());
            }
        }