Как сделать контроллер персонажа в unity?
Комната готова, Unity 6, нужен CharacterController с уже настроенным вводом Move
Компьютеры и связь
Развлечения
Нейросети, ИИ
Животные и питомцы
Комната готова, Unity 6, нужен CharacterController с уже настроенным вводом Move
v4-pro
Добавьте персонажу CharacterController и управляющий MonoBehaviour. Этот компонент перемещает капсулу с ограничением по столкновениям, но не применяет гравитацию автоматически. Для вашего первого варианта можно сделать движение по мировым XZ без прыжка.
Сохраните ссылку controller на уже добавленный CharacterController, а moveAction назначьте на существующий InputActionReference, возвращающий Vector2. При включении управляющего компонента включайте action, при выключении отключайте. Вертикальную скорость храните между кадрами в поле fallSpeed. Основная часть Update может выглядеть так:
Vector2 axis = moveAction.action.ReadValue<Vector2>();
Vector3 flat = Vector3.ClampMagnitude(
new Vector3(axis.x, 0f, axis.y), 1f);
if (controller.isGrounded && fallSpeed < 0f)
fallSpeed = -2f;
fallSpeed += -9.81f * Time.deltaTime;
Vector3 velocity = flat * 3f + Vector3.up * fallSpeed;
controller.Move(velocity * Time.deltaTime);
Скорость три единицы в секунду здесь является пробной настройкой. Ограничение длины направления не даёт диагональному вводу сделать ходьбу быстрее. Move принимает смещение, поэтому итоговая скорость умножается на длительность кадра.
Подгоните Height, Radius и Center капсулы под персонажа. Если объект стоит основанием на полу, центр капсулы должен находиться выше этой точки. Стены и пол должны иметь подходящие коллайдеры. Для такого управления не добавляйте Rigidbody на тот же объект как второй независимый механизм движения.
Проверьте узкий проход, остановку у стены и падение на пол. Step Offset и Slope Limit настраивайте под ступени и уклоны вашего уровня. Этот пример не задаёт направление относительно повёрнутой камеры и не реализует прыжок: он позволяет сначала проверить простой контролируемый проход по комнате.
Используйте CharacterController с движением через Move. Читайте Vector2 из вашего Move action, переводите его в направление XZ и умножайте скорость на deltaTime перед передачей в Move. Вертикальную скорость и гравитацию рассчитывайте отдельно: компонент не добавляет их сам. Настройте капсулу и коллайдеры уровня, затем проверьте стены и пол.
Пока нет премиум-вопросов в подборке
Не нашли то, что искали?
Задайте свой вопрос
Ответить на вопрос