Реализация системы паркура в Unity

Концепция паркура, тренировочной дисциплины, направленной на преодоление физических препятствий с помощью движения, приобрела огромную популярность в видеоиграх, предлагая игрокам интерактивную и увлекательную среду. Реализация этой системы в Unity может улучшить игровой процесс. Это руководство проведет вас через процесс настройки базовой системы паркура в Unity, уделяя особое внимание бегу по стенам и прыжкам.

Требуемые активы

1. Настройка сцены

  • Убедитесь, что в окружающей среде стены и препятствия помечены соответствующим образом, используя "Wall" для стен и "Obstacle" для сводчатых препятствий.

2. Изменение сценария 'SC_TPSController' для бега по стене

2.1. Обнаружение стены:

  • Этот метод проверяет, находится ли персонаж рядом со стеной, используя raycasting.
bool IsBesideWall(Vector3 direction)
{
    RaycastHit hit;
    if (Physics.Raycast(transform.position, direction, out hit, 1f))
    {
        if (hit.transform.CompareTag("Wall"))
        {
            return true;
        }
    }
    return false;
}

2.2. Стена Бег

  • Эта сопрограмма управляет бегом по стенам.
public float wallRunTime = 2f; // Duration of the wall run.

IEnumerator WallRun(Vector3 direction)
{
    float startTime = Time.time;
    canMove = false; // Disable regular movement during wall run.

    while (Time.time - startTime < wallRunTime)
    {
        characterController.Move(direction * speed * Time.deltaTime);
        yield return null;
    }

    canMove = true; // Enable regular movement after wall run.
}
  • Интегрируйте прокладку стены по методу 'Update()':
// Wall Run
if (IsBesideWall(transform.right) && Input.GetButton("Jump") && canMove && !characterController.isGrounded)
{
    StartCoroutine(WallRun(transform.right));
}
else if (IsBesideWall(-transform.right) && Input.GetButton("Jump") && canMove && !characterController.isGrounded)
{
    StartCoroutine(WallRun(-transform.right));
}

3. Изменение 'SC_TPSController' для прыжков

3.1. Обнаружение препятствия

  • Проверьте наличие препятствия перед персонажем.
bool IsObstacleInFront()
{
    RaycastHit hit;
    if (Physics.Raycast(transform.position, transform.forward, out hit, 1.5f))
    {
        if (hit.transform.CompareTag("Obstacle"))
        {
            return true;
        }
    }
    return false;
}

3.2. вольтижировка

  • Добавьте метод прыжка:
void Vault()
{
    canMove = false; // Disable regular movement during vaulting.
    
    // Translate the player over the obstacle.
    Vector3 vaultMovement = (Vector3.up + transform.forward) * speed * Time.deltaTime;
    characterController.Move(vaultMovement);
    
    canMove = true; // Enable regular movement after vaulting.
}
  • Интегрируйте прыжки в метод 'Update()':
// Vaulting
if (IsObstacleInFront() && Input.GetButton("Jump") && canMove && characterController.isGrounded)
{
    Vault();
}

Заключение

Эти модификации добавят функции бега по стенам и прыжков в существующий контроллер игрока от третьего лица. Протестируйте эти новые движения в различных сценариях, чтобы убедиться, что они работают так, как задумано. В зависимости от конкретной среды игры или желаемой механики паркура могут потребоваться корректировки.

Рекомендуемые статьи
Автомобильный контроллер для Unity
Учебное пособие по прыжкам через стену Player 3D и 2D для Unity
Диалоговая система для единства
Создание движения игрока в Unity
Контроллер вертолета для Unity
Добавление поддержки двойного прыжка в контроллер персонажей 2D-платформера в Unity
Как сделать управление краном в Unity