Beispiel #1
0
        // Move all of the objects within the LateObject to prevent jittering when the height transitions
        public void LateUpdate()
        {
            // don't move any objects if the game isn't active. The game may not be active if the character is in the air when they died
            if (!gameManager.IsGameActive())
            {
                return;
            }

            float forwardSpeed = forwardSpeeds.GetValue(totalMoveDistance);

            if (isStumbling)
            {
                forwardSpeed -= stumbleSpeedDecrement;
            }
            if (powerUpManager.IsPowerUpActive(PowerUpTypes.SpeedIncrease))
            {
                forwardSpeed += powerUpSpeedIncrease;
            }

            // continue along the curve if over a curved platform
            if (curveTime != -1 && platformObject != null)
            {
                curveTime = Mathf.Clamp01(curveMoveDistance / platformObject.curveLength);
                if (curveTime < 1 && followCurve)
                {
                    UpdateTargetPosition(thisTransform.eulerAngles.y);

                    // compute a future curve time to determine which direction the player will be heading
                    Vector3 curvePoint         = GetCurvePoint(curveMoveDistance, true);
                    float   futureMoveDistance = (curveMoveDistance + 2 * forwardSpeed * Time.deltaTime);
                    Vector3 futureCurvePoint   = GetCurvePoint(futureMoveDistance, false);
                    futureCurvePoint.y = curvePoint.y = targetPosition.y;
                    Vector3 forwardDir = (futureCurvePoint - curvePoint).normalized;
                    targetRotation = Quaternion.LookRotation(forwardDir);
                    infiniteObjectGenerator.SetMoveDirection(forwardDir);
                }
                curveMoveDistance += forwardSpeed * Time.deltaTime;
            }

            if (thisTransform.rotation != targetRotation)
            {
                thisTransform.rotation = Quaternion.RotateTowards(thisTransform.rotation, targetRotation,
                                                                  Mathf.Lerp(slowRotationSpeed, fastRotationSpeed, Mathf.Clamp01(Quaternion.Angle(thisTransform.rotation, targetRotation) / 45)));
            }

            playerAnimation.SetRunSpeed(forwardSpeed, forwardSpeedDelta != 0 ? (forwardSpeed - minForwardSpeed) / (forwardSpeedDelta) : 1);
            forwardSpeed      *= Time.deltaTime;
            totalMoveDistance += forwardSpeed;
            infiniteObjectGenerator.MoveObjects(forwardSpeed);
        }