Движение игрока в Unity: 3D игра — урок

Описание добавления функционала движения игроку в 3D игре, созданной в Unity. Управление сферой-игроком осуществляется с помощью клавиш.

Подготовка игрового объекта

Перед написанием кода необходимо подготовить сферу, представляющую игрока. Переименуйте её в «Player». Сфера должна иметь следующие компоненты:

  • Transform: Определяет позицию, вращение и масштаб объекта.
  • Mesh Renderer: Обеспечивает видимость объекта.
  • Sphere Collider: Превращает объект в твердое тело, позволяя ему взаимодействовать в физическом мире.

Для взаимодействия с физикой игры добавьте компонент Rigidbody через меню Add Component -> Physics -> Rigidbody. После добавления, сфера будет падать под действием гравитации, если не находится на твердой поверхности.

Создание скрипта управления

Создайте папку «Scripts» в проекте и в ней новый C# скрипт «PlayerController». Перетащите скрипт на игровой объект «Player». Имя скрипта используется как имя класса.

Код скрипта:

using UnityEngine;

public class PlayerController : MonoBehaviour
{
    public float speed;
    private Rigidbody rb;

    void Start()
    {
        rb = GetComponent<Rigidbody>();
    }

    void FixedUpdate()
    {
        float moveHorizontal = Input.GetAxis("Horizontal");
        float moveVertical = Input.GetAxis("Vertical");

        Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);

        rb.AddForce(movement * speed);
    }
}

Объяснение кода

Код использует модификаторы доступа public и private.

  • public float speed;: Публичная переменная типа float, определяющая скорость движения. Её значение настраивается в инспекторе Unity.
  • private Rigidbody rb;: Приватная переменная типа Rigidbody, содержащая ссылку на компонент Rigidbody игрового объекта.
  • void Start(): Функция, вызываемая один раз при запуске игры. Получает ссылку на компонент Rigidbody с помощью GetComponent<Rigidbody>().
  • void FixedUpdate(): Функция, вызываемая каждый физический кадр. Подходит для работы с физикой.
    • float moveHorizontal = Input.GetAxis("Horizontal");: Получает значение горизонтального перемещения (клавиши влево/вправо).
    • float moveVertical = Input.GetAxis("Vertical");: Получает значение вертикального перемещения (клавиши вперёд/назад).
    • Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical);: Создаёт вектор движения с Y-координатой 0 (отсутствует вертикальное движение).
    • rb.AddForce(movement * speed);: Применяет силу к Rigidbody игрока, используя вектор движения, умноженный на скорость.

Проверка работы

После добавления кода и настройки speed в инспекторе, запустите игру. Используйте клавиши управления (стрелки или WASD) для перемещения сферы.

Реализовано простое управление игроком в Unity с использованием Rigidbody и Input.GetAxis. Скорость движения регулируется изменением значения speed. Этот подход подходит для большинства простых 3D игр с управлением персонажа клавишами.

Что будем искать? Например,программа