Godot. Путь Алкаша. Рейкасты
Добрый вечер. Немножко разболелся, так все планы накрылись медным тазом. Но сегодня уже получше, на работе немножко разобрался, так что сейчас напишу на примере одной маленькой но очень нужной задачи, что к чему, в процессе буду накатывать, так что не знаю что выйдет к концу поста)
https://docs.godotengine.org/en/stable/tutorials/physics/ray...
Делать буду на примере базового шаблона, ну и приближу ТЗ к реальному в том формфакторе, как именно мне доводилось работать.
Как видите у меня никаких заготовок нету, сейчас в процессе все наглядно покажу.
Собственно враги бегают, на краю разворачиваются, на видосике видно.
Представим гипотетическую ситуацию, я снова молод, юн и красив, меня взяли джуном в контору. Мне прилетатает срочный таск в чатик от ГД,
1. надо чтобы враги могли спускаться по рампам,
2.чтобы могли запрыгивать на препятствия в один тайл высотой
3. ЧТобы могли падать с края, если там высота в одни тайл и они могут забраться обратно.
4. Это срочно!!! сегодня показывать билд продюсерской группе, если что пиши или спрашивай у тимлида.
Ладушки, лиха беда начало, да и горе не беда. Топаем к тимлиду за ЦУ и советом.
Тимлдид, будь человеком, билд я с репы стянул, даже запускается, где хоть посмотреть то чего? Задача такая-то.
Ну ладно, другого и не ожидалось, хорошо хоть носом ткнули, где начать можно. Будем посмотреть что нас ждет и что это за синие макароны на ушах у краба висят(спойлер: самое нам нужное)
Перво наперво, я всегда смотрю, а могу ли я чего-нибудь выпилить, тут я безусловно могу. Зачем мне два рейкаста по краям и флипать картинку, если я могу флипать целиком врага и рейкаст перед ним, удалю лишнее.
Да и вообще для этой задачи, надо переделать сцену, чтобы поудобнее было, не бегать же каждый раз туда.
У меня получилось так.
Немножко почистим лишнего кода и уберем лишний рейкаст.
Сколько лишнего убрали, а работает все так же. А если работает одинаково, то зачем писать больше?)
Немножко текста, разбавить эти картинки. А что собственно происходит и про что этот код?
is_on_wall() он проверяет, касается ли сейчас бочком наш кинематикбоди стенки, если касается, то разворачивает целиком всю сцену и меняет ей вектор движения на противоположный.
_velocity.x *= -1
self.scale.x *= -1
not floor_detector_right.is_colliding()
это значит, что рейкаст который спереди врага стоит и в низ нацелен, он больше не касается пола или стенок, ну что типа там пустота, и если там пустота, то действует так же, как и при касании со стенкой.
К слову not можно заменить на ! (Логическое отрицание) и так и так работает, я лично предпочитаю использовать !
Но тут уж заодно раз в качестве болванки взял чужой проект, то буду максимально стараться придерживаться их стилистики, но это пустяки.
Блин большой получается уже пост, а ещё кучу всего надо. Разобью на несколько, иначе в кашу все превратится. Да и болезный организм водочка быстро ушатала, фокус теряю)
Допишу обязательно, на работе то все сделал, быстро вышло. Сделать порой на порядок быстрее, чем попытаться это в посте изложить)
Ну по сути и этого на день хватит новичку поразбираться, изменения уже вносить научились, для экспериментов тоже время надо, так-то проект интересный и не сложный, есть на что посмотреть)
Будут вопросы, задавайте в комменты. Постараюсь не затягивать с продолжением.
Кто опытный и ему это слишком примитивно, ждите разборов от @wolchy, она умная и по существу расскажет, как что устроено в деталях, если время у неё будет, надеюсь на это. У меня только колхоз-стайл, для прикладного использования.
Свидетели Godot'овы
90 постов331 подписчик
Правила сообщества
Нельзя писать плохой про Godot и можно писать хороший про Godot. Borat.jpg
Упоминание других движков допустимо только в технических сравнениях иначе - вы юнитист и бог вам судья.