Beispiel #1
0
        private float CalculateYMotion()
        {
            float _verticalAcceleration = _gravity;

            if (_stopJump && _velocity.y <= _minJumpVelocityThreshold && _velocity.y > 0)
            {
                _verticalAcceleration *= _stopJumpGravityMultiplier;
            }
            else if (_velocity.y <= 0)
            {
                _verticalAcceleration *= _fallGravityMultiplier;
            }
            float yMotion = PhysicsExt.CalculateMovementDistance(_velocity.y, _verticalAcceleration, Time.fixedDeltaTime);

            _velocity.y = PhysicsExt.CalculateVelocity(_velocity.y, _verticalAcceleration, Time.fixedDeltaTime);
            return(yMotion);
        }
Beispiel #2
0
        private Vector3 CalculateXZMotion(float horizontalAxis, float verticalAxis)
        {
            Vector3 motion = new Vector3(horizontalAxis, 0, verticalAxis);

            motion.Normalize();

            if (_charController.isGrounded)
            {
                motion     *= _movementVelocity;
                _velocity.x = motion.x;
                _velocity.z = motion.z;
                motion     *= Time.fixedDeltaTime;
            }
            else
            {
                if (horizontalAxis == 0 && verticalAxis == 0)
                {
                    return(new Vector3(_velocity.x, 0, _velocity.z) * Time.fixedDeltaTime);
                }

                float xMotion = PhysicsExt.CalculateMovementDistance(_velocity.x, motion.x * _airControlAcceleration, Time.fixedDeltaTime);
                float zMotion = PhysicsExt.CalculateMovementDistance(_velocity.z, motion.z * _airControlAcceleration, Time.fixedDeltaTime);

                float normalizedMaxVelocity = Mathf.Max(Mathf.Abs(motion.x), Mathf.Abs(motion.z)) * _movementVelocity;
                float maxDistance           = normalizedMaxVelocity * Time.fixedDeltaTime;
                xMotion = Mathf.Clamp(xMotion, -maxDistance, maxDistance);
                zMotion = Mathf.Clamp(zMotion, -maxDistance, maxDistance);

                _velocity.x = PhysicsExt.CalculateVelocity(_velocity.x, motion.x * _airControlAcceleration, Time.fixedDeltaTime);
                _velocity.z = PhysicsExt.CalculateVelocity(_velocity.z, motion.z * _airControlAcceleration, Time.fixedDeltaTime);
                _velocity.x = Mathf.Clamp(_velocity.x, -normalizedMaxVelocity, normalizedMaxVelocity);
                _velocity.z = Mathf.Clamp(_velocity.z, -normalizedMaxVelocity, normalizedMaxVelocity);

                motion.x = xMotion;
                motion.z = zMotion;
            }
            return(motion);
        }