Створення контролера від першої особи в Unity
Цей підручник допоможе вам створити простий контролер від першої особи в Unity. Контролер від першої особи дозволяє гравцям досліджувати 3D-світ з плавним рухом і обертанням камери. Ми будемо використовувати базові сценарії C# і вбудований компонент Unity CharacterController.
1. Налаштування сцени
Почніть із налаштування базового середовища сцени для контролера від першої особи:
- У Unity створіть нову 3D-сцену.
- Перейдіть до GameObject > 3D Object > Plane, щоб створити поверхню землі.
- Відрегулюйте масштаб літака, щоб зробити його достатньо великим, щоб гравець міг ходити навколо.
- Перейдіть до GameObject > 3D Object > Cube, щоб додати перешкоди або стіни для взаємодії.
2. Додавання об’єкта Player
Для представлення гравця ми будемо використовувати об’єкт-капсулу:
- Перейдіть до GameObject > 3D Object > Capsule, щоб додати капсулу до сцени.
- Розташуйте капсулу трохи над землею (наприклад, Позиція = (0, 1, 0)).
- Перейменуйте капсулу на Player.
- Видаліть компонент Capsule Collider, оскільки CharacterController оброблятиме зіткнення.
- Додайте компонент CharacterController до об’єкта Player, вибравши Player, потім клацнувши Add Component в інспекторі та знайшовши CharacterController.
3. Написання сценарію контролера від першої особи
Тепер давайте створимо сценарій для обробки руху гравця та обертання камери:
- У вікні проекту клацніть правою кнопкою миші та виберіть Create > C# Script. Назвіть його FirstPersonController.
- Приєднайте сценарій до об’єкта програвача, перетягнувши його з вікна проекту до програвача в ієрархії.
Відкрийте сценарій і замініть вміст таким кодом:
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-середовища. Налаштовуючи та розширюючи сценарій, ви можете додати більше функцій і взаємодій відповідно до потреб вашої гри.