Додавання присідання до FPS Player в Unity

Додавання механізму присідання може поглибити занурення та забезпечити тактичну глибину ігрового процесу, особливо в іграх від першої особи та іграх на основі стелсу. Спираючись на наш посібник Unity FPS Controller, цей посібник демонструє, як додати функцію плавного присідання в Unity.

передумови

Кроки

  • У class під назвою 'SC_FPSController' з навчального посібника Unity FPS Controller додайте наступні змінні для керування присіданням:
public bool isCrouching = false;
public float crouchHeight = 0.5f;
public float crouchSpeed = 3.5f;
public float crouchTransitionSpeed = 10f;
private float originalHeight;
public float crouchCameraOffset = -0.5f;
private Vector3 cameraStandPosition;
private Vector3 cameraCrouchPosition;
  • Змініть метод 'Start()', щоб зберегти вихідну висоту 'CharacterController' і встановити положення камери:
void Start()
{
    characterController = GetComponent<CharacterController>();
    originalHeight = characterController.height;

    // Define camera positions for standing and crouching
    cameraStandPosition = playerCamera.transform.localPosition;
    cameraCrouchPosition = cameraStandPosition + new Vector3(0, crouchCameraOffset, 0);

    // Lock cursor
    Cursor.lockState = CursorLockMode.Locked;
    Cursor.visible = false;
}
  • У методі 'Update()' перевірте натискання клавіші присідання та перемкніть змінну 'isCrouching':
if (Input.GetKeyDown(KeyCode.C) && canMove)
{
    isCrouching = !isCrouching;

    if (isCrouching)
    {
        characterController.height = crouchHeight;
        walkingSpeed = crouchSpeed;
    }
    else
    {
        characterController.height = originalHeight;
        walkingSpeed = 7.5f;
    }
}
  • За межами попереднього блоку реалізуйте плавний перехід для положення камери між присіданням і стоянням:
if (isCrouching)
{
    playerCamera.transform.localPosition = Vector3.Lerp(playerCamera.transform.localPosition, cameraCrouchPosition, crouchTransitionSpeed * Time.deltaTime);
}
else
{
    playerCamera.transform.localPosition = Vector3.Lerp(playerCamera.transform.localPosition, cameraStandPosition, crouchTransitionSpeed * Time.deltaTime);
}
  • Налаштуйте швидкість руху гравця залежно від поточного стану:
float curSpeedX = canMove ? (isRunning ? runningSpeed : (isCrouching ? crouchSpeed : walkingSpeed)) * Input.GetAxis("Vertical") : 0;
float curSpeedY = canMove ? (isRunning ? runningSpeed : (isCrouching ? crouchSpeed : walkingSpeed)) * Input.GetAxis("Horizontal") : 0;

Питання:

  1. Навіщо використовувати 'Vector3.Lerp()' для переходу камери під час присідання?: функція 'Vector3.Lerp()' використовується для плавної інтерполяції між двома векторами. У цьому контексті це дозволяє камері плавно переходити між положеннями стоячи та присівши, а не різко клацати.
  2. Яка роль 'crouchTransitionSpeed'?: 'crouchTransitionSpeed' визначає, як швидко відбувається перехід між положеннями камери в присіданні та стоянні. Більше значення призводить до швидшого переходу.
  3. Чи можна налаштувати клавішу присідання?: Абсолютно. Клавіша присідання наразі встановлена ​​на 'C' ('KeyCode.C'). Замініть його будь-яким потрібним 'KeyCode', щоб налаштувати клавішу присідання.

Висновок

Включення плавної механіки присідання в Unity, яка передбачає коригування як розміру коллайдера, так і положення камери, може значно покращити занурення гравця. У цьому посібнику надано спосіб досягнення цього за допомогою природного плавного переходу.

Рекомендовані статті
Додавання підтримки подвійного стрибка до контролера персонажів 2D-платформера в Unity
Контролер Unity FPS
Додавання ефекту хитання голови до камери в Unity
Посібник з контролера програвача згори вниз для Unity
Контролер вертольота для Unity
Автомобільний контролер для Unity
Контролер персонажів. Як додати можливість штовхати жорсткі тіла в Unity