Учебное пособие по прыжкам через стену Player 3D и 2D для Unity

Прыжки через стены — механика, распространенная в платформерах и экшн-играх, — позволяет игрокам прыгать со стен, что делает навигацию более сложной и универсальной. Это руководство направлено на интеграцию прыжков со стены в предоставленный контроллер FPS. К концу персонаж игрока сможет совершать прыжки через стену как в 2D, так и в 3D настройках.

Реализация Wall Jump для 3D с использованием скрипта 'SC_FPSController'

Начиная с базового кода из руководства Unity Контроллер FPS, мы представим механику прыжка через стену.

Шаг 1. Настройка обнаружения стен

  • Добавьте новый слой в Unity с именем "Wall" для объектов, с которых можно спрыгнуть со стены.
  • Обновите класс 'SC_FPSController', который вы можете получить из нашего руководства Unity Контроллер FPS, добавив следующие переменные:
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;
}

Этот луч в приведенном выше коде обнаружит стены слева и справа от игрока.

Шаг 3. Реализация прыжка через стену для 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 Персонажный контроллер для Unity, мы представим механику прыжка на стену.

Шаг 1. Настройка обнаружения стен

  • Добавьте новый слой в Unity с именем "Wall" для объектов, с которых можно спрыгнуть со стены.
  • Обновите класс 'CharacterController2D', который вы можете получить из нашего руководства 2D-контроллер символов для 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. Реализация прыжка через стену для 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. В чем разница между реализацией прыжка через стену в 2D и 3D в Unity?: В Unity 2D-физика использует методы 'Physics2D' (например, 'Physics2D.Raycast()'), а в 3D-физике используются методы 'Physics' (например, 'Physics.Raycast()'). Логика остается относительно схожей, но методы и направления (Vector2 для 2D, Vector3 для 3D) различаются.

Заключение

Это дополнение позволяет персонажу в 2D-пространстве прыгать со стен. Возможно, потребуется поэкспериментировать со значениями силы, чтобы обеспечить плавный игровой процесс. Объединив эти шаги, игроки обнаружат, что движения 2D-персонажа станут более универсальными и динамичными в средах со стенами.

Рекомендуемые статьи
Учебное пособие по фонарику для Unity
Учебное пособие по 3D-контроллеру Worm для Unity
Учебное пособие по контроллеру проигрывателя сверху вниз для Unity
Контроллер самолета для Unity
Реализация системы паркура в Unity
Диалоговая система для единства
Планетарный контроллер игрока на основе твердого тела для Unity