Создание контроллера от первого лица в Unity

Этот урок проведет вас через создание простого контроллера от первого лица в Unity. Контроллер от первого лица позволяет игрокам исследовать трехмерный мир с плавным движением и вращением камеры. Мы будем использовать базовый скриптинг C# и встроенный компонент Unity CharacterController.

1. Подготовка сцены

Начните с настройки базовой среды сцены для вашего контроллера от первого лица:

  1. В Unity создайте новую 3D-сцену.
  2. Перейдите в GameObject > 3D Object > Plane, чтобы создать поверхность земли.
  3. Отрегулируйте масштаб самолета так, чтобы он был достаточно большим, чтобы игрок мог по нему ходить.
  4. Перейдите в GameObject > 3D Object > Cube, чтобы добавить препятствия или стены для взаимодействия.

2. Добавление объекта игрока

Для представления игрока мы будем использовать объект-капсулу:

  • Перейдите в GameObject > 3D Object > Capsule, чтобы добавить капсулу на сцену.
  • Расположите капсулу немного над землей (например, Position = (0, 1, 0)).
  • Переименуйте капсулу в Player.
  • Удалите компонент Capsule Collider, поскольку обрабатывать столкновения будет CharacterController.
  • Добавьте компонент CharacterController к объекту Player, выбрав Player, затем нажав Добавить компонент в Инспекторе и выполнив поиск по CharacterController.

3. Написание сценария контроллера от первого лица

Теперь давайте создадим скрипт для обработки движения игрока и поворота камеры:

  1. В окне Project щелкните правой кнопкой мыши и выберите Create > C# Script. Назовите его FirstPersonController.
  2. Прикрепите скрипт к объекту Player, перетащив его из окна Project на Player в иерархии.

Откройте скрипт и замените его содержимое следующим кодом:

using UnityEngine;

public class FirstPersonController : MonoBehaviour
{
    public float moveSpeed = 5f;
    public float mouseSensitivity = 2f;
    public float gravity = -9.81f;

    private CharacterController controller;
    private Vector3 velocity;
    private Transform cameraTransform;

    void Start()
    {
        controller = GetComponent();
        cameraTransform = Camera.main.transform;
        cameraTransform.position = new Vector3(transform.position.x, transform.position.y + 1.5f, transform.position.z);
        cameraTransform.parent = transform; // Attach camera to player
    }

    void Update()
    {
        // Player movement
        float moveX = Input.GetAxis("Horizontal") * moveSpeed;
        float moveZ = Input.GetAxis("Vertical") * moveSpeed;
        Vector3 move = transform.right * moveX + transform.forward * moveZ;

        controller.Move(move * Time.deltaTime);

        // Apply gravity
        if (controller.isGrounded && velocity.y < 0)
        {
            velocity.y = -2f;
        }
        velocity.y += gravity * Time.deltaTime;
        controller.Move(velocity * Time.deltaTime);

        // Camera rotation
        float mouseX = Input.GetAxis("Mouse X") * mouseSensitivity;
        float mouseY = Input.GetAxis("Mouse Y") * mouseSensitivity;

        transform.Rotate(Vector3.up * mouseX);
        cameraTransform.Rotate(Vector3.left * mouseY);
    }
}

4. Прикрепление камеры

Для вида от первого лица камеру необходимо прикрепить к игроку:

  • Выберите Основную камеру в иерархии.
  • Расположите его немного выше объекта Player (например, Y = 1,5).
  • Перетащите камеру на объект Player в иерархии, чтобы сделать ее дочерним объектом Player. Это заставит ее следовать за движениями и поворотами игрока.

5. Настройка входов

Input Manager Unity использует предопределенные названия осей, такие как «Horizontal» и «Vertical» для движения, а также «Mouse X» и «Mouse Y» для ввода мыши. Они настраиваются автоматически, но вы можете настроить чувствительность в Edit > Project Settings > Input Manager.

6. Тестирование контроллера

Теперь, когда контроллер от первого лица готов, нажмите кнопку воспроизведения, чтобы протестировать его:

  • Используйте W, A, S, D для перемещения игрока вперед, назад и в стороны.
  • Двигайте мышью, чтобы вращать камеру и осмотреться.
  • Убедитесь, что гравитация работает, сойдя со всех поднятых предметов и посмотрев, будет ли игрок падать естественно.

7. Улучшение контроллера

Вы можете еще больше улучшить контроллер от первого лица, добавив:

  • Функциональность спринта за счет увеличения moveSpeed ​​при удержании клавиши Shift.
  • Логика прыжка основана на отслеживании нажатия игроком клавиши пробела и применении восходящей скорости.
  • Механика карабканья и приседания для более сложного взаимодействия игрока с окружающей средой.

Заключение

С этим базовым контроллером от первого лица у вас теперь есть функциональная настройка игрока для исследования 3D-сред. Настраивая и расширяя скрипт, вы можете добавлять больше функций и взаимодействий в соответствии с потребностями вашей игры.