Тёмный

Наследование скриптов / ООП в Godot Engine 

Фронтенд Паштет
Подписаться 76 тыс.
Просмотров 22 тыс.
50% 1

Наследование скриптов в Godot Engine позволяет эффективно переиспользовать код без копирования. За счет наследования можно значительно упростить проект и добиться большей скорости разработки. В данном уроке мы разберемся с элементами объектно ориентированного программирования в Godot.
Полный курс по Godot 4: stepik.org/a/1...
Код урока: github.com/drx...
Урок про наследование сцен: • Наследование сцен в Go...
Миникурс по GDScript: • Введение в GDScript дл...
Мой дискорд сервер: / discord
Мой канал в телеграмм: t.me/frontend_...
Я на Twitch: / frontend_pashtet

Опубликовано:

 

20 окт 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 94   
@stasitschik
@stasitschik 2 года назад
Давно искал что-то подобное. Много раз слышал "ООП это хорошо". Проходили его в колледже. На примере "животное:собака-кот". Но как эти знания применять в реальной разработке нас никто не научил, а с множества видосов ничего понятнее не становилось, т.к. эти самые многие в конечном итоге рассказывали про тех же кошечек-собачек. Тут же взят реальный пример из игры и объяснены базовые принципы ООП как это используется в реальной разработке. Респект.
@frontend-pashtet
@frontend-pashtet 2 года назад
Спасибо за комментарий. Я очень рад, что урок получился полезным)
@Roman-og4ur
@Roman-og4ur Год назад
Если ты не можешь понять как перенести абстрактные "животных:кошка-собака" на свой пример - то тебе в программировании делать нечего. Наберут по объявлениям в ИТ/Геймдев/..., а потом то сайты рушатся, то игры крашаться, то программы зависают(добывая крипту...)
@stasitschik
@stasitschik Год назад
@@Roman-og4ur одно дело в гемдеве, там это интуитивно понятнее, но вот в десктопе это не так просто.
@stasitschik
@stasitschik Год назад
@@Roman-og4ur и говорить про то, что "делать в программировании нечего" слишком громко. На геймдеве программирование не заканчивается.
@Poloskun4ik
@Poloskun4ik Год назад
​@@stasitschik мне кажется, в начале лучше вообще не заморачиваться по ООП, делать без него. А потом уже рефакторить код и сразу поймёшь, что к чему.
@kamilayza
@kamilayza 2 года назад
Вышло очень даже неплохое видео Всё подробно и понятно за какие-то несколько минут Это всегда поражает Спасибо за новое видео про движок Godot
@kamillayesa
@kamillayesa 2 года назад
Как всегда всё лаконично, минималистично и удобно для понимания Спасибо за такие полезные видео про Godot engine
@frontend-pashtet
@frontend-pashtet 2 года назад
Спасибо за комментарий) Приятно это слышать. Именно этого эффекта я и хотел от видео.
@R6_Lucky
@R6_Lucky 2 года назад
Наткнулся на твой канал после этого видео, с разработкой игр еще не знаком, но ты очень доступно и с долей юмора все объясняешь, так что было довольно познавательно, спасибо)
@frontend-pashtet
@frontend-pashtet 2 года назад
Спасибо. Стараюсь делать обучающий контент не скучным. И добро пожаловать в геймдэв)
@noth512
@noth512 2 года назад
Спасибо, как раз такой видос и был нужен
@dead_jacks
@dead_jacks Месяц назад
ООП РУЛИТ!!! Паштет выражаю огромную благодарность!!!! Смотрел твои ролики в первый раз ничего не понял. Доделал проект кое как сдал своему научному руководителю получил 5 на защите, но структура и (возможно код) кал... Спустя 3 месяца и еще 100 часов в Godot и пересмотра зарубежных и твоих роликов я прозрел и осознал как нужно делать структуру и кодить в GDscript. Теперь (перечеркнуто, делаю рефакторинг) создаю тот же проект с 0
@frontend-pashtet
@frontend-pashtet Месяц назад
Очень круто. Спасибо, что поделился. Видно, что у тебя основательный подходе к разработке. Если сидишь в дискорде, заходи к нам, там джемы и вообще очень приятные люди discord.gg/NqF45TKBD7
@666GooglMan66
@666GooglMan66 2 года назад
Вообще бомба!) Продолжай!!!!
@frontend-pashtet
@frontend-pashtet 2 года назад
Спасибо) Рад, что тебе заходит контент
@sp4cedo9
@sp4cedo9 2 года назад
Паштет, сделай пожалуйста видос как отличается GDSript Godot 4.0 от Godot 3. Ребя поддержите лайками!!!!
@frontend-pashtet
@frontend-pashtet 2 года назад
Привет. Спасибо за идею. Добавлю в свой список. Пока, честно говоря, ещё к 4ке не просматривался. Но тема актуальная.
@-keimurikxe2252
@-keimurikxe2252 Год назад
капец, брат, спасибо. Я смотрю еще видео, думаю : "Крутое видео, вот бы он еще оставил проект, что бы потыкаться". И в конце говоришь что оставляешь, нереальное спасибо
@МВ-11НікітаТіщенко
Ууууу ксавчик снимаеш видео о Godot, Молодец.
@Limon4ikChannel
@Limon4ikChannel 2 года назад
а видео вышло быстрее, чем я думал, класс
@frontend-pashtet
@frontend-pashtet 2 года назад
Могло выйти ещё быстрее, но пришлось взять паузу. Спасибо за коммент)
@KBEGames
@KBEGames 2 года назад
То что надо для моей игры
@BuzzyDev
@BuzzyDev 2 года назад
Крутой челик, лучший в мире, паштет бог
@firewatch123
@firewatch123 Год назад
что-то в духе абстрактных классов и экземпляров этого класса, впечатляет
@frontend-pashtet
@frontend-pashtet Год назад
Именно. Это оно
@Хаято-з2и
@Хаято-з2и 2 года назад
О новое видео👍
@pavelt6519
@pavelt6519 2 года назад
спасибо за качественные уроки!. Слышал в Годо 2д-физика не очень. Можешь охарактеризовать различия с юнити? Пишу физическую головоломку. Годо - мой 2-й движок после Solar2D (Corona). Love2D тоже немного ковырял. Значительных отличий в худшую сторону не заметил пока.
@frontend-pashtet
@frontend-pashtet 2 года назад
Привет. Честно говоря, у меня опыта с 2д физикой не много, чтобы ее как-то анализировать. Так что, если ты поделишься опытом, то мне будет полезно и интересно послушать) Единственное, что могу сказать, что народ делает игры с 2д физикой достаточно активно. Но каких это усилий стоит, я не могу сказать.
@damascake
@damascake 2 года назад
Физика в годо, как и в большинстве движков, моделирует кинематику, но не учитывает сопромат. Потому что учёт сопромата в 60 ФПС не потянет даже топовое железо. Софт для подобных расчётов вычисляет реакции и силы по 10 минут, ни о каких фреймах в секунду там речи быть не может. Поэтому приходится изобретать различные ухищрения. В годо для ухищрений придумали Area и их способность переопределять гравитацию внутри себя. Благодаря этому ты без расчёта сопромата можешь просто указать игровым объектам, что вот здесь у нас, скажем, опора движется (лифт, платформа и т.п.), стало быть, все касающиеся её объекты, должны двигаться вместе с ней - это трюк, подменяющий трение и реактивные силы.
@frontend-pashtet
@frontend-pashtet 2 года назад
@@damascake вот это топовый комент. Спасибо, что подробно расписал. Мне было интересно.
@ИльяДемидов-п7ю
@ИльяДемидов-п7ю 2 года назад
@@damascake зачем сопромат в 2d играх? И в 3d играх то не часто такое нужно
@vladyan01
@vladyan01 2 года назад
Defold по лучше солара и лов2д будет на мой взгляд, он тоже на Луа. И у Годо можно физику на Bullet переключить
@minimalstory
@minimalstory 2 года назад
Классно.
@vladyan01
@vladyan01 2 года назад
Супер, я даже и не знал что можно наследовал скрипты. Расскажи про создание классов в Годо, различия class и class_name. И ещё было бы круто про архитектуру Годо, как лучше всего проектировать игру, понятно что движок построен на принципе наследования сцен, но как применять это не очень понимаю пока что )
@frontend-pashtet
@frontend-pashtet 2 года назад
Привет. Хорошая тема про class. Думаю сделаю про это короткое видео в будущем. Про архитектуру проекта тоже интересная тема. У меня как раз сложилось видение, как организовывать проекты. В начале я постоянно об это спотыкался. Спасибо, что поделился идеями!
@vladyan01
@vladyan01 2 года назад
@@frontend-pashtet я сейчас спотыкаясь, все написал в одном скрипте, теперь расхлебываю))
@frontend-pashtet
@frontend-pashtet 2 года назад
@@vladyan01 бывает) Я тоже переписывал проект. Пока не наспотыкаешься, не поймешь, как удобней)
@leagueofbaluu5873
@leagueofbaluu5873 5 месяцев назад
Мега харош 👌
@grinvich2304
@grinvich2304 Год назад
ExtremeCode говорил что инкапсуляцию и полиморфизм смешивать в одном проекте не стоит. Если начал с инкапсуляции, то и дальше придерживаться её. Типа масштабирование будет легче😅
@koteelok2014
@koteelok2014 2 года назад
На моменте "Инкапсуляция - это сокрытие" где-то умер один ООПшник.
@frontend-pashtet
@frontend-pashtet 2 года назад
Помянем
@AlonsoImput
@AlonsoImput Год назад
Так, с ооп мы поняли, но это попса, как годо дружит с data oriented парадигмами и ECS в частности? Ну и да, у годо привалирует концепция "один объект - один скрипт" или я неправильно понял? Просто после юньки, который строился вокруг идеи кучи минималистичных скриптов на объекте, ограничение в один скрипт меня немного смутило)
@frontend-pashtet
@frontend-pashtet Год назад
Насчёт ESC ничего не скажу. Не осведомлён, к сожалению. Насчёт «один объект - один скрипт» ты правильно понял. Только так и можно. Такая вот идея. Но необязательно все писать в одном скрипте. Стандартную ООП композицию никто не отменял. Можно создать класс, вынести поведение туда, пользоваться им в разных скриптах. В Unity прикольно, что композиция поддерживается на уровне дизайна. С множеством маленьких скриптов, как ты говоришь. Но в Godot это не особо популярно, насколько я могу судить. В конце концов это все паттерны. Можно и свой DI навернуть, и композицию при достаточном желании. Каких-то серьезных ограничений для этого нет. Разве что, gdscript не такой матёрый как C#. Но в Godot и шарп можно. Все зависит от желания.
@KING_PETROWICH
@KING_PETROWICH 2 года назад
здравствуйте как сделать так чтобы объекты только что вставленные в программу не были прозрачными???
@AlonsoImput
@AlonsoImput Год назад
Я хз, нужно ли еще или нет, но это происходит из-за направления нормалей на модели. Если работаешь в blender, то в режиме редактирования меш -> нормали -> во внешнюю сторону. Чтобы увидеть направление нормалей, нужно в правом верхнем углу окна 3D пррсмотра в настройках визуализации (кнопка рядом с вкл/выкл гизмо) включить соответствующую галочку.
@RaharOfficial
@RaharOfficial 2 года назад
Спасибо, можешь сделать видос как делать выбор персов для каждого игрока? Всмысле я делаю сплит скрин игру типо гонок с разными режимами типо царя горы, горячей картошки и ТД. Но есть проблема. Выбор машины для игроков. То есть надо сделать что бы если ты выбираешь машину, у неё менялось и управление, чтобы игрок который выбрал эту машину ей и управлял. (ПРОБЛЕМА) я не знаю как это сделать
@frontend-pashtet
@frontend-pashtet 2 года назад
Привет. Понимаешь, такой видос это почти целая игра. Получится слишком длинное видео и для очень узкой аудитории. Я скорей на уроках более широкого назначения ориентируюсь. А вот на стримах я делаю механики под конкретные игры. Но и они и длиной в несколько часов.
@VeryLowDamage
@VeryLowDamage 11 месяцев назад
Про нифига не выйграли - технически, если мы понимаем, что нам нужно каждый раз переопределять метод - значит в родительском класе вызываем ошибку с описанием, что метод атак не переопределен
@popooppop
@popooppop 2 года назад
Можешь объяснить подробнее про yied() , мне кажется это очень крутая штука, но я о ней кроме таймера ничего незнаю. Оказывается можно анимацию ждать. Или там слишком много всего чтобы в ролик добавить? Или например рассказать о том как делать свои сигналы
@frontend-pashtet
@frontend-pashtet 2 года назад
yield достаточно запутанная штука. В 4ке ее заменят на async/await. Но это не значит, что не стоит разбираться с yield. Лично я использую его просто для того, чтобы дождаться определённого сигнала. Ну вот в ролике, как ты отметил, жду завершения анимации. Так можно ждать любой сигнал.
@popooppop
@popooppop 2 года назад
@@frontend-pashtet вау, async это синхронно, а await это ждать? Страшновато на четвёрку переходить и так мало чего знаю, а потом вообще небось надо переучиваться)
@frontend-pashtet
@frontend-pashtet 2 года назад
@@popooppop yield, сигналы и async/await это все элементы асинхронного программирования. Если просто, то это код, который выполнится не сразу, а когда-то в момент события. Можно делать как обычно- соединять сигналы с функциями, а можно упростить это с помощью yield или async/await. Кстати, в 4ке много изменений, но они связаны с производительностью, рендером и тд. Очень много опыта 3ки не пропадёт)
@KRYTOY_EZHIK
@KRYTOY_EZHIK Год назад
Привет! Я хотел спросить, как изменить размер изображения, используя код в 4 godot?
@frontend-pashtet
@frontend-pashtet Год назад
Такое проще обсуждать в дискорде. Может тебе нужен scale, может что-то другое. У нас там сообщество discord.gg/mswNVD2M98
@popooppop
@popooppop 2 года назад
Я пересмотрел видео из за того что начал делать как раз такую игру где я хотел сделать игрока и врага похожими. Но Господи как же я наговнокодил мне даже обидно что сразу не посмотрел внимательно это видео. Оказывается я вообще ничего не понимаю в ооп. Вот например я определяю урон через сингл тон хотя сейчас посмотрел весь твой код ты вообще не использовал его и твой код так не понятен для меня он такой чистый и короткий, аж плакат хочется;
@popooppop
@popooppop 2 года назад
окей у меня несколько вопросов, а то я щас сдохну от того что нихуэ не понимаю. 1) return я знал что ретурн возращает, но что значит if .....(): return ? это типо если это произойдет то оно дальше пойдет? 2) я понял что func......(): -> float это то что эта функция дает какое то число или что то тип того, а bool дает true или false. НО is_dead() - > bool return hp
@popooppop
@popooppop 2 года назад
ААА все спустя 2 часа я все понял, аааааа , это гениально спасибо тебе что затрегерил меня на непонимание и мне пришлось вломится в офиг гугла и устроить там чикибомбом фаавававыаыфаываыпфывапрыкеркепинкпигше спс
@frontend-pashtet
@frontend-pashtet 2 года назад
Спасибо за этот комментарий☺️. Ты молодец, что пошел в код и разобрался с наследованием. Я тоже не сразу научился использовать ООП в годо. Хотя в ООП разбирался до этого. Требуется практика. И вот как раз переписывание и переосмысление кода это шикарная практика.
@popooppop
@popooppop 2 года назад
@@frontend-pashtet в этом то и проблема по моему мнению в годо. Я учился с нуля без программирования и посмотрел от силы 3 гайда на английском где конечно же для новичков всех этих сложностей в коде нету. В юнити я видел дофига ассетов с готовыми играми где можно смотреть как что работает, а в годо такого вообще нет не смотря на несколько стандартных проектов
@frontend-pashtet
@frontend-pashtet 2 года назад
@@popooppop понимаю. Но в Godot люди чаще выкладывать код своих игры и демок. Просто потому что он с git лучше дружит (весь проект это текст, за исключением ассетов). Я участвовал дважды в Godot Wild Jam, и там почти все проекты выкладывают в открытый доступ. Изучая код интересных игр, я нашёл для себя несколько интересных плагинов и подходов к написанию кода. Можешь посмотреть игры для этого джема на itch.
@Alodin13
@Alodin13 2 года назад
Сразу вопрос: почему наследование скриптов, это наследование второго типа, если скрипт это класс? А вернее расширение класса godot.
@frontend-pashtet
@frontend-pashtet 2 года назад
Это моя авторская классификация :D Условно разделил тему наследования на наследование сцен и скриптов. К ООП эта классификация отношения не имеет. В Godot просто это две вещи идут немного независимо. Сцены могут наследоваться без наследования скриптов, и скрипты тоже могут иметь свою независимую от сцен иерархию.
@Alodin13
@Alodin13 2 года назад
@@frontend-pashtet 🤔😁 ладно А материал клёвый, кстати :)
@satainkara
@satainkara Год назад
Construct 3 рулит!
@Илья-п4м3щ
@Илья-п4м3щ 2 года назад
А в чем разница между = и := при присваивании? В документации что то нет про это. Или я не нашел
@frontend-pashtet
@frontend-pashtet 2 года назад
Второе сразу же выводит тип переменной, если это возможно Например, var speed : int = 5 можно коротко записать как var speed := 5, потому что 5 это int
@Илья-п4м3щ
@Илья-п4м3щ 2 года назад
@@frontend-pashtet но ведь можно записать var a = 5 , и так работает. Или так типы выводятся на этапе компиляции?
@frontend-pashtet
@frontend-pashtet 2 года назад
@@Илья-п4м3щ если тип задан, то годо будет проверять на этапе компиляции на ошибки. Ну, и в редакторе будет тебе подсказки давать, что очень удобно.
@frontend-pashtet
@frontend-pashtet 2 года назад
@@Илья-п4м3щ но работать будет и так, это верно. Просто с типами как-то солидней😄
@Илья-п4м3щ
@Илья-п4м3щ 2 года назад
@@frontend-pashtet это да) но := не покажет тип прям тут. Или там подсказки будут отличаться? Например, если просто =, то не будет показан тип?
@Palekingwilreturn
@Palekingwilreturn 7 месяцев назад
А композишн?
@Mirukhara
@Mirukhara 10 месяцев назад
как-будто на французском говоришь
@crwdex
@crwdex 10 месяцев назад
речь очень опережает действия, от этого понять сложнее
@ВладимирШмаков-у5у
@ВладимирШмаков-у5у 6 месяцев назад
😢намучился перед созданием игры:не могу сделать ускорение для персонажа. На счет видео, тут есть кулдаун, но функции кулдауна я не увидел, поэтому хотелось бы чтоб было видео обьясняющее кулдаун и тайсер А то не знаю где что узнавать документация хорошо, но когда я зашол в таймер - просто написано что это таймер(или чтото подобное ) Я уже не знаю куда деватся Мне бы хотябы коментарий я уже буду на седьмом небе от счастья А то у меня кодом позоже он постоянно запускает таймер, когда есть направление движения, а как сделать чтоб делалось ускорение при движении и через таймер я не понимаю
@Rundik
@Rundik 2 года назад
ООП в голанге? Что-то новое
@frontend-pashtet
@frontend-pashtet 2 года назад
Ну не совсем в голанге)
@LMCdd
@LMCdd 2 года назад
При желании ООП код можно наваять и на Си без ++, для ООП наличие классов не является обязательным, как бы это странно и вычурно не звучало на первый взгляд в наше время.
@frontend-pashtet
@frontend-pashtet 2 года назад
@@LMCdd ООП без классов, деньги на ветер
@ritoon2223
@ritoon2223 7 месяцев назад
Обучите, gd script
@ritoon2223
@ritoon2223 7 месяцев назад
Я из c# и c++ знаю
@DeRyabec
@DeRyabec Год назад
Чел базу говорит
@YoutubeBobr
@YoutubeBobr Год назад
Зачем изучать что-то новое и непонятное если есть АНРИАЛ и ЮНИТИ??? БЕСПЛАТНЫЕ!!! с кучей БЕСПЛАТНЫХ ДОПОЛНЕНИИ!!! с кучей БЕСПЛАТНЫХ уроков, гайдов, мануалов!!! В чем преимущество Godot Engine? Наверно стоило начинать ролик с ЭТОГО?!!!
@ponpon2468-
@ponpon2468- Год назад
Ну он круче,в юнити невозможно работать
@YoutubeBobr
@YoutubeBobr Год назад
@@ponpon2468- спорные утверждения
@ponpon2468-
@ponpon2468- Год назад
@@RU-vidBobr ну тут наверное да,субъективщина. Мне просто юнити не нравится,даже лагает немного
@KsavirResh
@KsavirResh Год назад
Чтобы узнать об этом, смотри видео об этом. С чего вдруг этому вопросы подниматься в специфичном видео по конкретной теме для тех, кто уже изучает конкретно Godot? Наоборот, нафиг не надо лишней воды.
@Makcimm85
@Makcimm85 8 месяцев назад
Godot очень удобный и интуитивно понятный, к тому же поставляется всего одним небольшим файлом, размером в 100 мегабайт и работает быстро.
Далее
Наследование сцен в Godot Engine
2:37
Всё о Tilemap в Godot Engine 4
19:48
Просмотров 44 тыс.
How Games Make VFX (Demonstrated in Godot 4)
5:46
Просмотров 352 тыс.
Immersive Sim in Godot 4: COGITO - Overview
8:22
Просмотров 43 тыс.