Описание добавления функционала движения игроку в 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 игр с управлением персонажа клавишами.