Впровадження системи паркур в Unity

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

Необхідні активи

1. Оформлення сцени

  • Переконайтеся, що в середовищі є стіни та перешкоди, позначені належним чином, використовуючи "Wall" для стін і "Obstacle" для склепінчастих перешкод.

2. Зміна сценарію 'SC_TPSController' для Wall Running

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' для Vaulting

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
Додавання підтримки подвійного стрибка до контролера персонажів 2D-платформера в Unity
Як створити Crane Control в Unity
Автомобільний контролер для Unity
Контролер персонажів. Як додати можливість штовхати жорсткі тіла в Unity
Контролер літака для Unity