Хорошее видео! Спасибо!) Можно еще после считывания инпута нормализовывать вектор направления движения, так как это же на скорость будет перемножаться и скорость будет чутка непостоянной
Нормализоыать можно, все зависит от задумки автора игры) ведь если игра на консоль или мобилку, то логично предположить, что персонаж будет двигаться тем быстрее чем дальше от центра положение стика. А так как Input.GetAxis() возвращает от -1 до 1, то и проблем никаких не будет. Некоторым играм нужен только бег и стояние, тогда лучше вектор нормализовать)
У Вас очень интересный канал по разработке, сам работаю на unity около 5 лет,переодически смотрю Ваши видео чтобы узнать что-то новое для себя, желаю успехов в развитии канала!!!
Заморочененько 😀 Но хоть где то на русскоязычном ютюбе наконец то мелькнула формула прыжка зависящая от указанной высоты!) А не просто AddForce Impulse и тд и тп. Не зря я её в чатик кидал 😉
У меня вопрос, я так понимаю нет какого то "правильного" способа написать передвижение для персонажа. Но все же интересно какой более предпочтителен и выглядит "правильнее", будь то банальное изменение Trasform.position, взаимодействие через Rigitbody с рассчетом нормали поверхности и т.д (как у Сакутина в видео), или как здесь с помощью Character Controller. Интересно было бы узнать.)
Предпочтителен тот, что подходит для решения задачи) Движение через трансформ самое топорное, ибо оно совсем не учитывает физику. CharacterController не всегда может дать то, что требуется, ну а через RigidBody - менее быстрый, но самый гибкий вариант.
А почему движение через Character Controller нужно реализовывать именно в Fixed Update, это же не движение через просчет физики, это ведь тоже самое, что и через какой-нибудь transform.Translate делать, который тупо объект телепортирует? А считывать в Update input в данном случае разве корректно? За 30 кадров input может поменяться 3 раз и игрок может ощутить некорректное поведение контроллера, нет? И зачем делай рейкаст для определения земли, если у Character Controller есть стандартное свойство isGrounded?
1. Нет, CharacterConroller использует физику, поэтому лучше их синхрониировать выполнение кода. 2. Инпут в принципе работает в апдейте. И как раз если считывать в FixedUpdate, он может проскакивать и будешь получать некорректные данные. 3. Кастомная проверка через рейкаст, на земле ли контроллер позволяет сделать галочку "на земле", когда коллайдер ещё не коснулся земли. Стандартный флажок ставится только при колизии с землёй. Но управление отзывчивей, когда мы ещё не докасаемся до земли, но уже можем совершить прыжок. Рекомендую поиграться с этим и убедиться на опыте
Очень нравится движение из вов. Везде и в юнити при остановке героя после движения имеется малое скольжение. В вов такого нет. Есть ли метод как сделать управление персонажем без скольжения? Если это очень сложное решение, то было бы интересно послушать хотя бы общее решение
Только это не гравитационная постоянная, а ускорение свободного падения на Земле. Гравитационная постоянная это фундаментальная константа и немного из другой формулы.
Почему нужно заморачиваться с рейкастами, когда они имеют баги с реализацией контроллера, если можно взять controller.isGrounded и он будет работать благодаря тому что мы всегда войдействуем гравитацией
Рейкасты не имеют багов, если ими правильно пользоваться. А controller.IsGrounded работает на колизии, это зачастую мешает динамике игры, т.к. персонаж должен полностью приземлиться перед след прыжком. Это ощущается плохо
В данном случае нет никакой разницы, где кешировать контроллер. Но очень часто инициализация должна произойти раньше, чем объект впервые будет включён, поэтому есть привычка писать инициализацию в Awake().