Створення контролера від першої особи в Unity

Цей підручник допоможе вам створити простий контролер від першої особи в Unity. Контролер від першої особи дозволяє гравцям досліджувати 3D-світ з плавним рухом і обертанням камери. Ми будемо використовувати базові сценарії C# і вбудований компонент Unity CharacterController.

1. Налаштування сцени

Почніть із налаштування базового середовища сцени для контролера від першої особи:

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

2. Додавання об’єкта Player

Для представлення гравця ми будемо використовувати об’єкт-капсулу:

  • Перейдіть до GameObject > 3D Object > Capsule, щоб додати капсулу до сцени.
  • Розташуйте капсулу трохи над землею (наприклад, Позиція = (0, 1, 0)).
  • Перейменуйте капсулу на Player.
  • Видаліть компонент Capsule Collider, оскільки CharacterController оброблятиме зіткнення.
  • Додайте компонент CharacterController до об’єкта Player, вибравши Player, потім клацнувши Add Component в інспекторі та знайшовши CharacterController.

3. Написання сценарію контролера від першої особи

Тепер давайте створимо сценарій для обробки руху гравця та обертання камери:

  1. У вікні проекту клацніть правою кнопкою миші та виберіть Create > C# Script. Назвіть його FirstPersonController.
  2. Приєднайте сценарій до об’єкта програвача, перетягнувши його з вікна проекту до програвача в ієрархії.

Відкрийте сценарій і замініть вміст таким кодом:

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. Налаштування входів

Менеджер вводу Unity використовує попередньо визначені назви осей, наприклад «Горизонталь» і «Вертикаль» для переміщення, а також «Миша X» і «Миша Y» для введення мишею. Вони налаштовуються автоматично, але ви можете налаштувати чутливість у меню Правка > Параметри проекту > Менеджер введення.

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

Тепер, коли контролер від першої особи готовий, натисніть кнопку відтворення, щоб перевірити його:

  • Використовуйте W, A, S, D, щоб рухати гравця вперед, назад і вбік.
  • Рухайте мишкою, щоб повернути камеру та подивіться навколо.
  • Переконайтеся, що гравітація працює, зійшовши з будь-яких піднятих предметів, щоб побачити, чи гравець впав природним чином.

7. Покращення контролера

Ви можете покращити контролер від першої особи, додавши:

  • Функція спринту завдяки збільшенню швидкості переміщення при утриманні клавіші Shift.
  • Логіка стрибків, яка визначає, коли гравець натискає клавішу пробілу та застосовує швидкість угору.
  • Механіка лазіння або присідання для більш складної взаємодії гравця з оточенням.

Висновок

Завдяки цьому базовому контролеру від першої особи ви тепер маєте функціональні налаштування гравця для дослідження 3D-середовища. Налаштовуючи та розширюючи сценарій, ви можете додати більше функцій і взаємодій відповідно до потреб вашої гри.