Создание 2D платформера в Godot за 30 минут / Изучение движка Godot
Вставка
- Опубліковано 14 чер 2024
- Начиная с первого проекта, Godot - показался очень легким и удобным игровым движком. В ходе видео мы с вами разработаем небольшую 2Д игру на Godot и вместе с ней рассмотрим множество основных концепций данного игрового движка.
🍿 Видео с информацией про Godot: • Godot - почему про нег...
🕹 Программа обучения Unity: bit.ly/2AZZBdp
✏️ Статья на сайте itProger: bit.ly/2C7lXdM
Тайм коды:
00:00 - Начало
00:53 - Скачивание и установка
01:47 - Интерфейс
03:31 - Создание узлов (Nodes)
04:23 - Создание главного игрока
13:39 - Передвижение игрока
25:00 - Изменение изображения игрока
27:53 - Создание платформ и прыжка
33:53 - Расстановка платформ в игре
✔ Сообщество программистов: itproger.com/
✔ -------------
Вступай в группу Вк - prog_life 🚀
Группа FaceBook - goo.gl/XW0aaP
Инстаграм itProger: / itproger_official
Instagram: / gosha_dudar
Telegram: t.me/itProger_official
Twitter - / goshadudar
- Уроки от #GoshaDudar 👨🏼💻
- Все уроки по хештегу #goshaLessons
Создай серию уроков, пожалуйста
*ВАЖНЫЕ ИЗМЕНИЯ GODOT 4*
KinematicBody2D стал CharacterBody2D.
Слегка поменяли логику, теперь не надо указывать в move_and_slide аргументы.
Настройки стен, направления и всего прочего устанавливаются отдельно через собственные свойства , например CharacterBody2D.velocity = Vector2(100,0) или CharacterBody2D.up_vector = Vector2.UР
P.s. это не все, еще очень много изменений советую почитать в интернете
Спасибо
@@FANBRO228 да пожалуйста, если честно вообще бы не советовал учить годо по этому ролику, тк он очень устаревший
@@Closemyheart да я понял уже нету новых видео по новой версии движка много всего поменялось
@@Closemyheart а какие бы видео уроки или документацию вы бы могли посоветовать по новой версии?
лол 4 версия мне всю физику сама написала
Жду серию уроков по этому движку) Интересно какие еще языки есть и сложно ли на них скрипты писать.
ua-cam.com/users/SkanerSoft можешь здесь посмотреть там чувак этим давно занимается.
есть C# например.
проще всего Gdscript
даже проще питона
и заточен под движок.
и большинство туториалов на нем.
поэтому советую начать с него
@Владислав Велес 1) генераторы по большей части - синтакс. сахар. есть итераторы, если приспичит
+ есть yield
2. насчёт асинхронных функций - yield в большинстве случаев хватит за глаза.
3. про невозможность создания классов - это совсем не понял)
скрипт уже является классом.
можно создавать кастомные типы напр. с пом. ключевого слова class_name.
можно создавать классы внутри скриптов
@@me2beats313, но всё равно легче на с# писать, ибо с gdscript будешь мозги себе больше иметь) Хотя, если разобраться( а там без "Б") то нормально будет
@Владислав Велес в gdscript каждый скрипт это класс
Для плавной остановки хорошо еще использовать фунцию lerp()
velocity = move_and_slide(velocity, Vector2.UP)
velocity.x = lerp(velocity.x, 0, 0.2)
А что делает lerp? Оно постепенно уменьшаеть значение числа?
шО ЗА Язык програпирования ? Питон ?
@@darkhunter777 У этого движка свой язык GDScript но можно использовать CSharp (c#)
@@ArcticFox42 Это линейная интерполяция. Нахождение промежуточных значений между двумя известными. Если, например, у нас есть 0 и 10, то, интерполированное значение ровно по центру(коэффициент интерполяции, или как правильно, уже не помню, будет 0.5) будет 5. Коэффициент обозначает насколько далеко от первого значения до второго интерполировать. Если коэффициент равен 0, то итоговое значение равно первому, а если 1, то равно второму значению. В основном, в языках программирования реализуется вот так:
function lerp(start, end, t) {
return start * (1 - t) + end * t;
}
огромное спасибо возьму на заметку)
Спасибо большое за урок, все предельно понятно, продолжайте в том же духе, жду с нетерпением продолжения на эту тему
Привет. Для первого ознакомления с движком прям шикарное видео ) Спасибо.
"Нужно больше золота", а так как в наш век информация и знания одно из самых ценных, то твои уроки это-Золото). Ждём ещё уроки по этому движку!
Отлично. Продолжай и дальше. А то многие после начальных уроков не объясняют дальше про Godot на русском. Ждём про стрельбу, анимацию и т.п.
Нужно больше уроков по godot. Хороший движок, но мало таких уроков. Ещё можно было бы сделать выпуск про 3d игру, и создание для неё моделей с хотя бы простенькой анимацией
*В Godot пока что в 3D лучше не суваться, ибо есть проблемы с производительностью.*
@@Mitsumata что, и оптимизировать никак нельзя?
@@graphicsh Можно и легко. Там уже давно с 3D всё пофикшено.
@@variondrakon но графика очевидно хромает.
@@comachine ну ты сказанул годот ещё маленький движок
Это просто КЛАСС !!
Надеюсь что будет полный курс про Движок Godot.
С самого начала - язык программирования движка, создание игры (желательно под Android), встраивание рекламы, создание apk файла.
@WyverN
Видел.
Автор скучен.
Гоша в сто раз лучше рассказывает !!
@@goldrockpro9079 Ну тогда остается только ждать Гошу)
талант объяснять сложные вещи простым языком конечно у него не отнять.
кстати у Сканера есть Дискорд сервер - там быстро помогают по большинству вопросов
@@me2beats313 Я за Сканнера)) У него очень много уроков по Годо. А после выхода версии Godot 4.0 он планирует перезапустить уроки.
@@goldrockpro9079 ахрахаапх, ну да, гоша лучше рассказывает. Правда дает он тебе информацию, за практическое применение которой тебе ноги сломают, но зато рассказывают лучше!!! Ты иди ещё купи у него курс по юнити)
@@goldrockpro9079 не знаю скучен он, не скучен. А меня устраивает.
Отличный урок!
Спасибо :)
Ты забыл написать:
else:
Vel.x = 0
Чтобы персанаж оставался, когда отпускается кнопка.
он будет в воздухе останавливаться, лучше так:
elif is_on_floor():
vel.x = 0
что за язык програмирования
@@thegreatfaer3081 GDScript
@@thegreatfaer3081 gdscript
Run_mAn_ruN это новый язык?
Я искал такую среду 1год с нетерпением жду продолжения
Прикольно, мне очень понравились и понятно объяснил. Продолжай пожалуйста, удачи тебе
Буду очень рад если появится серия на эту тему)
Видео было очень интересный. Пожалуйста, продолжай снимать по Godot
Круто👍 Ждём 3D урок
Спасибо ты всё-таки услышал и сделал по этой платформе. И получилось такое совпадение, что ты меня порадовал подарком на день рождения)
спасибо за продвижение годота. ждем еще контента по годоту)))))))позязя
Супер! Движок лучший для новичков! Мне всё понятно впервые ))))
РЕБЯТА ДЛЯ ИЗБАВЛЕНИЯ ЭФФЕКТА СКАЛЬЖЕНИЯ У ПЕРСА НУЖНО ПРОДУБЛИРОВАТЬ МЕСТО ГДЕ НАПИСАНО Input ВМЕСТО PRESSSED НАПИСАТЬ released И ПОСТАВИТЬ ТАМ ГДЕ VEL.X+= ИЛИ VEL.X-= ,0 И ПЕРС БУДЕТ СТОЯТЬ КОГДА ВЫ ОТПУСТИТЕ КЛАВИШИ УПРАВЛЕНИЯ
Спасибо
Спасибо
Не сработало. Скольжение все ещё есть.
И там нет функции released, лишь just_released
@@user-ew6wb1fo7z Тебе just_released и нужно. Только вместо += или -= пиши просто = 0
@@madbuilder9551 да я догадался уже. В гугл забил перевод, а дальше логика.
Но другим объяснение пригодится.
Отличный урок !!!
Ураа! Это единственное видео на моей версии :'>
Спасибо тебе!
Плюсую тысячу раз
Спасибо, по годот на русском Ютубе мало видео. Очень рад, что вы выложили видео) Очень ждал
Зайди на канал к Сканнеру))
Смотреть видосы по годоту от дударя, когда есть действительно хороший разработчик с канала "Godot 3D Russia", который снимает ХОРОШИЕ и подробные видео по этому движку
@@ellyminaty5146 Да, тем более у Годо Раша этих видео дофига и больше, а у Гоши Дударя только одно видео по простенькому платформеру. Не знаю, как остальным, но я считаю, что простым инди возможностей Годо за глаза. Кто-то говорит, там говно графон, но нет. Графика в Годо на достойном уровне. Возможностей у Годо очень много. Сейчас версия 3.2.2. Боюсь представить, насколько это будет бомбезный движок после выхода версии 4.0.
@@alexraum8579 Ну, объективно, сейчас годот ещё совсем слаб и не может тягаться с юнити на равных. Но если ты энтузиаст и хорош в программировании и разработке игр, то годот крайне интересен, учитывая все ограничения юнити из-за подписок.
Ну, а по поводу Дударя, здесь даже говорить нечего. Сколько бы видосов у него не было, учиться по ним никакого смысла нет, ибо он сам не имеет ни малейшего представления о том, что вещает. Видео ради видео и не более
@@ellyminaty5146 Вот именно, Годо полностью бесплатен. Хоть он и не может потягаться с Юнити на равных, но всё же мне за глаза его возможностей. Тем более, у меня ноут средний. Юнити тоже идёт без лагов, но Годо запускается за пару секунд. Плюс, мне его интерфейс как-то больше понравился. Уже и практика с Годо была. Сделал 2д игру небольшую и 3D шутер в стиле Low Poly. Там у меня сам игрок, карта, анимация движения, выстрел, перезарядка, ограничение патронов, вывод хр и патронов в интерфейс, туман добавил, дальность прорисовки и occlusion culling. Также, у меня перс медленно скользил с холма, поэтому я добавил в коде, что полом считается всё при наклоне до 30 градусов. Те, что только вошли в Годо, не знают, как решить это. Поэтому кину этот фрагмент кода сюда...
vel = move_and_slide(vel, Vector3(0,1,0), deg2rad(30))
То есть, нужно просто добавить deg2rad(30))
У кого поверхность ровная, это не нужно вовсе. Но если у вас там в игре холмы есть, например, (как у меня) то без этого никуда.
27:30 отлично, мы сначала создали 2 условия для передвижения, а потом создали еще два для отражения ассета игрока. Просто хлопки в чат.
Лол, и я об жтом подумал и написал, и сразу твой комент увидел !)
2 гения это сила 😂
++
32:45 - "За счёт дельты мы сглаживаем"... 6ляять, сглаживаем мы только с помощью математических функции, а дельта, это переменная с плавающей точкой, с помощью которой можно заставить игру работать в зависимости от реального времени, а не от ФПС. Дельта - это время, прошедшее с последнего кадра в секундах.
Если есть переменная Speed = 400, используя выражение velocity = Speed * delta, персонаж будет передвигаться со скоростью около 6-7 пикселей за кадр (при частоте кадров 60). Т.е. если комп игрока не вытягивает все 60 ФПС, и его ФПС прыгает от 50 до 60, то игра все равно будет идти в реальном времени, даже при ФПС = 30 (передвижение на 13 пикселей за кадр) его игра не будет замедлять время. Но без дельты (при ручном вводе кол-ва пикселей за кадр), если комп игрока вытягивает только 30 из 60-ти, то его игра будет идти в 2 раза медленней чем должна.
31:00 "is_action_pressed срабатывает только после того как мы нажали, отпустили..." 6ляяяяяяяяять я в axye с этого ютубера... Скаммер чистой воды. Сплошное введение в заблуждение, халтурный и костыльный код, ноль понимания темы (только ее иллюзия) и т.д. до бесконечности...
Ещё чувак зеркалит текстуру Игрока, но не зеркалит злоебучий хитбокс игрока -____-
Я не могу даже примерно вспомнить сколько раз я пробил свой лоб сильнейшими фейспалмами в течении всего видео...
@@theseangleвот кстати в одной игре у моего друга время было замедленно. А у меня все норм было.
Спасибо огромное, если честно, то правда в Godot очень удобно работать.
Очень жду серию уроков по Godot!
delta нужна не для того, чтобы сглаживать, а чтобы синхронизировать с реальной производительностью. Дельта содержит время, которое прошло между предыдущим вызовом функции _physics_process и текущим. По умолчанию, функция вызывается 60 раз в секунду (это настраивается в настройках программы) Если вдруг игра подтормаживает, то delta увеличивается, и доумножением на delta мы как бы компенсируем любые тормоза на компе. По-хорошему, на delta следует умножать каждую переменную, которая изменяет velocity. И ещё неплохо сперва нормализовать delta (домножив на 60), чтобы все наши изменяющие переменные не уменьшались в 60 раз. Ну либо все переменные, меняющие velocity придётся указывать в единицах за секунду, а не в единицах за кадр.
Полезный комент 👍
Гоша, давай ещё серию срочно, все ждём
Хотелось бы еще различных видео по этому движку. Уверен, что он не хуже того же юнити будет. Углубиться в эту тему стоит.
круто, продолжай))
Я всё смотрел твои старые туторы и мне ненравилось что ты льёшь воду, непонятно обьясняешь без сценария, а тут... ДА ТЫ ЛУЧШЫЙ ЮТУБЕР!
Да, у вас очень легко понимать. И главное уверенность, что можно так делать игру, не смортя по каждой теме урок, а сам принцип работы и уверенность что будет работать.
Чтобы игрок не продолжал движение после того как вы отпустите кнопку движения можно просто после после elif Input.is_action_pressed("Player_right"):
vel.x = speed
Написать
else:
velocity.x = 0
Тогда после отжатия кнопки игрок мгновенно остановиться, сам я новичок, уверен можно придумать что-нибудь получше, чтобы например игрок останавливался плавно, но как сам я пока не знаю, по крайней мере это решит проблему.
elif Input.is_action_just_released("player_right"):
vel.x = 0
Работает
Если хочешь чтоб оно плавно скользило просто вместо 0 поставь 5 или 7
Почему godot не видит первую кнопку то есть if input.is_action_pressed("влево")он не реагирует а elif input.is_action_pressed("вправо")он работает пр этом может в любой момент повернуть на лево хотя я жму на право
@@Ya_chelkash та же фигня
Блин, так интересно пересматривать уроки по старой версии движка... Жалко, что нету гайдов для людей, которые хотели бы создавать игры на новых версиях. Очень надеюсь, что автор заметит этот комментарий (плевать что прошло 3 года) и создаст подробный гайд по четвёрке. Респект👍
чел жизненно
есть гайды, но на английском
@@bloxz8594 знаю, но смотреть в субтитры которые переводят текст и одновременно на само видео очень некомфортно
@@rhapsodies3 ну тут остаётся только учить англ либо испльзовать яндекс с авто переводом голоса
@@bloxz8594 не могу не согласиться
Классно, просто и понятно.
Продолжайте )
лучший движок. Давай, пж, еще про него
Очень положительный комментарий! Спасибо. Жутко интересно!
Жду плейлист с уроками)
У тебя лучший канал по программированию
кхм Хауди хо с более милионом подпищиков покинул чат))
Жду продолжения.
Нужны уроки дальше) Как создать более сложную и более полноценную игру?)
Обожаю этот канал
Жду продолжения уроков по Godot engine
Оч круто! Только что доделал эту игру. Ждём 2 чсть
Может сделаете вторую часть?
А как вам идея сделать платформер в 3D? Можно будет сделать мини квадрат с полигонами,и заполнить его разными платформами с батутами,и прочей фауной,которая создаёт окружение игры. Я бы реально посмотрел на такую игру на движке Godot 😀
Есть типа того уже
@@nikitagundorov9906 угу, несколько десятков тысячь наверное)) Орегенальная типа идея
Ну идея хорошая, но можешь эти игры посмотреть и на юнити и на других, так как их уже тысяч 5
Жду следующих уроков)
А можно вопрос а если ты пишешь команду if Input.is_action_pressed(player_left) то вскобках надо писать игрок как у тебя или то как у меня называется персонаж
Да мне тоже очень интересно, также хотелось бы увидеть написание скриптов на языке C++
Спб за твои тактики! Играю по ним уже давно. Пока получается)
Есть канал, который снимает видео по Godot, но твои видео (лично для меня) более понятные
А не правильнее (проще) так:
onready var imagePlayer = get_node("icon")
func _physics_process(delta):
if Input.is_action_pressed("player_left"):
imagePlayer.flip_h = false
vel.x -= speed
elif Input.is_action_pressed("player_right"):
imagePlayer.flip_h = true
vel.x += speed
то есть вынести развороты игрока в уже имеющиеся IF где ранее уже задавали направление движения ?
Я просил в пережном видио круто спасибо
Молодец. Благодарствую.
супер. спасибо.
Спс! Как же я этого ждал. В этой документации мне лень учить)). Жду короче курсы). Серьёзно, я не против если вы/ты выпустили/ил курсы по godot.
найс) лайк
Народ жаждет больше видеоуроков по GODOT 2D
Продолжи пожалуйста снимать такие видео
Спасибо большое!
было бы неплохо еще примеров разных типов игр
Спасибо. Я три с лишним часа по хреновейшему гайду пытался сделать то, что с твоей помощью сделал за 20 минут. И при этом мне всё понятно что было в твоём видео. Ты учитель программирования от бога.
@Stalker 8 ну, с английским мне помог Яндекс переводчик страниц. Он сейчас очень неплохо переводит.
как же все это круто ! одно удовольствие слушать.
Да! Продолжай!
ДА! ПРАДАЛЖАЙ!
Жду больше уроков по godot
После импорта можно выключить галку Filter и переимпортировать, тогда не будет мыла
Можешь подробнее рассказать, как импортировать без мыла?
Гоша, только твои ролики и помогают рассеять туман неведения. спасибо, что помогаешь нам! Очень хотелось бы увидеть продолжение. И если с платформерами все более менее понятно, то как работать с ЮАЙ генерацией и созданием, например пошаговых стратегий - пока загадка. Очень прошу, выпусти еще роликов!
Вот круто объясняет Гоша, другие ютуберы когда назначают клавиши, используют стандартные функции, типо "ui_left" и тд, а Гоша показал сразу, что можно и свои создавать. За это мне и нравятся твои уроки)
Если вам нужно чтобы персонаж останавливался на поверхности (Но нужно в самом начале объявить переменную friction, которая у меня равна 800, от нее зависит как сильно будет действовать трение на персонажа):
if is_on_floor():
if vel.x > 0:
vel.x -= friction * delta
if vel.x < 1:
vel.x = 0
elif vel.x < 0:
vel.x += friction * delta
if vel.x > -1:
vel.x = 0
а почему когда я пишу
move_and_slide(vel, Vector2 UP)
мне пишет
eror parsing expression misplaced: built- In type
пасибо огромное!!!
Люди! Подскажите в чем ошибка:
Не работает эта строка -
if vel.x < 0:
imagePlayer.flip_h = true
elif vel.x > 0:
imagePlayer.flip_h = false
Пишет ошибку: Invalid set index 'flip_h' (on base: 'null instance') with value of type 'bool'.
Что делать-то?
и у меня
Нашёл ответ?
Как отслеживать момент когда игрок падает за границы сцены? В той же функции писать проверку?
спасибо!
спасибо очень помог
а будет вторая серия создание этой игры ?
это будет очень классно
Жду больше уроков по этому движку. Очень мало уроков на русском в интернете
а как в настройке управления движения назначить сенсорные стики? Там нету категории для мобильного сенсорного управления, а лишь клавиатура + мышь и геймпад. Буду благодарен за ответ.
блин двигло пошло в паблик ) эх, а раньше было клево сидеть в небольшом и уютном комьюнити )
Здравствуйте, такая проблема, у меня в игре спрайт прыгает, а положение точки центра я не знаю как изменить, не могли бы вы помочь?
Что нужно добавить к программе? Возможно автор настроил годо до записи видео, но у меня программа не распознаёт пиксельное изображение с aseprite в формате png
32:12 Просто супер! В Unity на до либо лучи бросать, либо проверять OnCollisionStay, а тут все автоматом.
Ну тут ещё raycast реализован как узел, можно так:)
Жду игру на 3д :)
Прекрасно
Все прекрасно, уже сделал полноценный платформер, только есть одно НО, а именно персонаж скользит как на льду. Даже когда я его не трогаю, он может самостоятельно проскользить всю карту. Кто знает как исправить?
Наконецсто, видео урок от префсионала.
Звучит смешно, этот чувак просто посмотрел на бугре и интерпретировал на русский ютуб.
@@1play2fun еще и платформер трешовый получился нет нормального прыжка нет анимаций да и само обьяснение поверхностное
@@user-kn9xt7hf2b на скорую руку.
просвистеонала
ну а что вы хотели за полчаса?)
это видео для новичков
Спасибо ты топ 😁😁😁😁😁
Если в главной сцене узел Игрок расположить выше, чем узел Платформа, то игрок проваливается за платформой. Если же платформа стоит выше в узле, то игрок как бы ближе, чем платформа. А встать на платформу не получается.
Пишет: The argument 'delta' is neger used in the function '_physics_process'. If this is intended, prefix it with an underscore: '_delta'. Что делать?
+
Круто! Гоша, я тоже изучаю Godot, и сейчас пытаюсь реализовать мультиплеер. Оказалось, это не такая уж и легкая вещь. Было бы очень здорово, если бы ты выпустил видео про мультиплеер в Godot. Нет ни одного ролика на русском ютубе на эту тему. Стань же первопроходцем!
спасибо парень
лайк бро
Можно по больше про создавание игр и сайтов
Может быть есть такие же гении,как и я ,и смотрят это видео спустя 3 года.Подскажите подалуйста для передвежения персонажа надо указать клафишу,но после тестирования получилось так что он не двигается,вопрос что то поменялось после обновления или я что то не так делаю?
спасибо огромное
Извини я новенький в годот ты мне сильно! помог (пожалуйста 2 часть по плату)
Ребят скажите а что легче в освоении godo или unity в также в каком из движке легче скриптинг?
попробуй оба)
Если хочешь 3d, то годо пока сильно уступает юнити.
и наоборот - в 2d годо более удобен.
@@me2beats313 годо не прямо сильно уступает, а скоро, он даже будет лучше
Подскажите как сделать анимацию бесконечного вращения источника направленного света? всю голову уже сломал) вращается только туда сюда в пределах 180 градусов.