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