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

Концепція паркур, навчальної дисципліни, зосередженої на подоланні фізичних перешкод за допомогою руху, набула величезної популярності у відеоіграх, пропонуючи гравцям інтерактивне та захоплююче середовище. Впровадження цієї системи в 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();
}

Висновок

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