Посібник із 3D- і 2D-стрибків у стіну гравця для Unity

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

Реалізація Wall Jump для 3D за допомогою сценарію 'SC_FPSController'

Починаючи з наведеного базового коду з посібника Unity FPS Controller, ми представимо механіку стрибка стіни.

Крок 1: Налаштування виявлення стіни

  • Додайте новий шар у Unity під назвою "Wall" для об’єктів, з яких можна стрибнути зі стіни.
  • Оновіть клас 'SC_FPSController', який ви можете отримати з нашого підручника Unity FPS Controller, за допомогою таких змінних:
public LayerMask wallLayer;
public float wallJumpForce = 10f;
private bool isTouchingWall = false;

Крок 2: Виявлення стіни

  • Включіть наступну логіку в метод 'Update()' для виявлення стіни:
RaycastHit hit;
if (Physics.Raycast(transform.position, transform.right, out hit, 1f, wallLayer) || Physics.Raycast(transform.position, -transform.right, out hit, 1f, wallLayer))
{
    isTouchingWall = true;
}
else
{
    isTouchingWall = false;
}

Цей raycast у наведеному вище коді виявить стіни ліворуч і праворуч від гравця.

Крок 3: Реалізація Wall Jump для 3D

  • У методі 'Update()' після логіки стрибка з землі вставте:
else if (Input.GetButton("Jump") && canMove && isTouchingWall)
{
    moveDirection.y = wallJumpForce;

    // This adds a bit of horizontal force opposite the wall for a more dynamic jump
    if (Physics.Raycast(transform.position, transform.right, 1f, wallLayer))
    {
        moveDirection += -transform.right * wallJumpForce / 2.5f; // Adjust the divisor for stronger/weaker push.
    }
    else if (Physics.Raycast(transform.position, -transform.right, 1f, wallLayer))
    {
        moveDirection += transform.right * wallJumpForce / 2.5f;
    }
}

Ця логіка в коді вище перевіряє, чи гравець натискає кнопку стрибка, може рухатися та чи торкається стіни. Якщо це так, то воно передає вертикальну силу та невелику горизонтальну силу від стіни.

Реалізація Wall Jump для 2D за допомогою сценарію 'CharacterController2D'

Починаючи з наведеного базового коду з 2D Character Controller для Unity посібника, ми представимо механіку wall jump.

Крок 1: Налаштування виявлення стіни

  • Додайте новий шар у Unity під назвою "Wall" для об’єктів, з яких можна стрибнути зі стіни.
  • Оновіть клас 'CharacterController2D', який ви можете отримати з нашого навчального посібника 2D Character Controller для Unity, за допомогою таких змінних:
public LayerMask wallLayer;
public float wallJumpForce = 10f;
private bool isTouchingWall = false;

Крок 2: Виявлення стіни у 2D

  • Включіть наступну логіку в метод 'Update()' для виявлення стіни:
RaycastHit2D wallHitLeft = Physics2D.Raycast(transform.position, Vector2.left, 1f, wallLayer);
RaycastHit2D wallHitRight = Physics2D.Raycast(transform.position, Vector2.right, 1f, wallLayer);

if (wallHitLeft.collider != null || wallHitRight.collider != null)
{
    isTouchingWall = true;
}
else
{
    isTouchingWall = false;
}

Крок 3: Реалізація Wall Jump для 2D

  • У методі 'Update()' після логіки стрибка з землі вставте:
if (Input.GetKeyDown(KeyCode.W) && isTouchingWall && !isGrounded)
{
    r2d.velocity = new Vector2(r2d.velocity.x, jumpHeight);
    if (wallHitLeft.collider != null)
    {
        r2d.AddForce(new Vector2(wallJumpForce, 0)); // Push to the right when wall is on the left
    }
    else if (wallHitRight.collider != null)
    {
        r2d.AddForce(new Vector2(-wallJumpForce, 0)); // Push to the left when wall is on the right
    }
}

Питання адресовані:

  1. Як персонаж може виявити стіну в Unity?: Персонаж може виявити стіни за допомогою raycasting. Випустивши невидимий промінь від гравця в потрібному напрямку, можна визначити, чи перетинається з цим променем об’єкт, наприклад стіна.
  2. Яка різниця між двовимірною та тривимірною реалізацією стрибків до стіни в Unity?: У Unity 2D-фізика використовує методи 'Physics2D' (наприклад, 'Physics2D.Raycast()'), тоді як 3D-фізика використовує методи 'Physics' (наприклад, 'Physics.Raycast()'). Логіка залишається відносно подібною, але методи та напрямки (Vector2 для 2D, Vector3 для 3D) відрізняються.

Висновок

Це доповнення дозволяє персонажу в 2D просторі стрибати зі стін. Експерименти зі значеннями сили можуть знадобитися для забезпечення плавного ігрового процесу. Інтегруючи ці кроки, гравці побачать, що рух двовимірного персонажа стане більш універсальним і динамічним у середовищах зі стінами.

Рекомендовані статті
Посібник з контролера програвача згори вниз для Unity
Навчальний посібник із 3D-контролера Worm для Unity
Контролер RTS і MOBA Player для Unity
Додавання підтримки подвійного стрибка до контролера персонажів 2D-платформера в Unity
Додавання присідання до FPS Player в Unity
Система діалогу для єдності
Підручник з ліхтариком для Unity