Добавление приседания в FPS Player в Unity
Добавление механизма приседания может углубить погружение и придать тактическую глубину игровому процессу, особенно в играх от первого лица и стелс-играх. Основываясь на нашем руководстве Unity Контроллер FPS, в этом руководстве показано, как добавить функцию плавного приседания в Unity.
Предварительные условия
- Базовое знакомство с Unity интерфейсом.
- Понимание Unity 'CharacterController'.
- Скрипт контроллера FPS из руководства Unity Контроллер FPS.
Шаги
- В класс с именем 'SC_FPSController' из руководства Unity Контроллер FPS добавьте следующие переменные для обработки приседания:
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;
Вопросы:
- Зачем использовать 'Vector3.Lerp()' для перехода камеры во время приседания? : Функция 'Vector3.Lerp()' используется для плавной интерполяции между двумя векторами. В этом контексте это позволяет камере плавно переходить из положения стоя в положение приседа, а не резко щелкать.
- Какова роль 'crouchTransitionSpeed'?: 'crouchTransitionSpeed' определяет, насколько быстро происходит переход между положением камеры приседая и стоя. Более высокое значение приводит к более быстрому переходу.
- Можно ли настроить клавишу приседания? : Абсолютно. Для клавиши приседания в настоящее время установлено значение 'C' ('KeyCode.C'). Замените его на любой желаемый 'KeyCode', чтобы настроить клавишу приседания.
Заключение
Включение в Unity механики плавного приседания, которая включает в себя настройку размера коллайдера и положения камеры, может значительно улучшить погружение игрока. В этом руководстве представлен метод достижения этого с помощью естественного и плавного перехода.