Платформер на Unity: физика и контроллер персонажа
Пока тут болею бронхитом, ковыряю понемногу Unity. На следующем месте работы, вполне вероятно, придётся с фронтом работать, а не только с беком. Решил потренироваться на простеньком платформере. Одно из первых и важных в платформере — персонаж и его управление. И там не всё так просто.
Если погуглить на эту тему, то многие задаются вопросом, Dynamic или Kinematic коллайдер использовать? Многие не понимают, как работает kinematic тело.
В общем-то, довольно много вариантов контроллеров для персонажа уже сущестует:
У unity есть неплохие уроки по созданию контроллера персонажа для платформера.
Предположим, мы не хотим заморачиваться с kinematic телом и используем стандартную физику с dynamic коллайдером. Вполне вероятно, что то, как оно работает по умолчанию, вам не очень понравится.
Если вам необходимо что-то сверх физики, какие-то свои фичи (например, прилипание к стенам), то с dynamic коллайдером это будет проблематично.
Что ж, будем использовать kinematic тело.
Возьмём контроллер из официальных уроков по Unity по созданию контроллера для платформера. Вся суть логики сводится к использованию Rigidbody2D.Cast.
Сначала зададим маску:
Сама логика по обработке в FixedUpdate.
Что из этого получится? С простыми коллайдерами оно даже будет работать, но если какая-то нестандартная структура будет, скажем, если использовать Sprite Shape, то определение коллизий будет работать плохо. Вплоть до того, что просто провалимся в коллайдер, пока нас не вытолкнет из него.
Попробуем популярный CharacterController2D от prime31.
Там логика работает вокруг Physics2D.Raycast. Рейкастим по направлению движения (4 луча вертикально, 8 горизонтально).
После кастов корректируем вектор движения.
В результате худо-бедно вроде работает.
Будут проблемы при использовании нестандартных коллайдеров. Нужно будет подгонять скрипт под свои нужды. Но как отправная точка вполне сгодится.