Сообщество - Свидетели Godot'овы
Добавить пост

Свидетели Godot'овы

41 пост 135 подписчиков

Популярные теги в сообществе:

48

Godot Engine. Обзор игрового движка

Всем привет, дорогие товарищи! Представляю вашему вниманию большой обзор игрового движка Godot Engine. Надеюсь, вам будет интересно :)

Godot Engine. Обзор игрового движка Разработка, Gamedev, Godot, Godot Engine, Игры, Компьютерные игры, Игровой движок, Длиннопост

Для ЛЛ: многабукв, но можно пролистать в конец поста – там есть список преимуществ и недостатков движка. Godot классный! Попробуйте Godot!



Кому может быть полезен этот пост


Этот материал актуален для молодых игроделов –кто делает первые шаги в индустрии и мучительно выбирает движок. А также для тех разработчиков, кто устал вносить денежки владельцам проприетарного ПО и хотел бы пересесть на что-то подешевле.


Статья написана с целью познакомить сообщество с игровым движком Godot, а не сравнить его возможности с конкурентами, поэтому попрошу воздержаться от холивара на тему «чьи поезда поездатее».


Мною было приложено много усилий, чтобы обзор получился ёмким и более-менее объективным. Это не копипаста чьей-то более ранней статьи, обзор основан на личном опыте использования движка.


Официальный сайт Godot Engine



Немного истории


Разработкой движка Godot (читается «годо») с 2007 года занимались Хуан Линетски и Ариель Манзур. Стоит отметить, что в те бородатые времена движок был проприетарным, закрытым и создавался для нужд частных заказчиков.

Godot Engine. Обзор игрового движка Разработка, Gamedev, Godot, Godot Engine, Игры, Компьютерные игры, Игровой движок, Длиннопост

В 2014 году авторы выпустили обновлённую версию движка под лицензий MIT и выложили исходники на GitHub, разработка перешла сообществу Godot Engine Community, и продолжается до сих пор.


Репозиторий Godot Engine Community на GitHub



Обзор


Godot Engine – очень компактный (~74MB), быстрый и оптимизированный движок, позволяющий создавать с нуля любую игру любого жанра. Он кроссплатформенный, мультифункциональный, бесплатный, опенсорсный.


Кстати «с нуля» здесь ключевое. В базовой сборке Godot не имеет шаблонов для игровых процессов, однако есть огромное количество плагинов, аддонов и внешних библиотек, которые могут помочь со стартом. Доступ к репозиторию осуществляется прямо из окна запуска движка. Просто переходим на нужную вкладку и листаем ;)

Godot Engine. Обзор игрового движка Разработка, Gamedev, Godot, Godot Engine, Игры, Компьютерные игры, Игровой движок, Длиннопост

Он достаточно дружелюбен к новичкам. Элементы документации продублированы в трёх местах, что обеспечивает быстрый доступ к справке «без отрыва от производства». Так же в движок зашиты ссылки на он-лайн ресурсы, которые помогут вам в решении большинства проблем.

Godot Engine. Обзор игрового движка Разработка, Gamedev, Godot, Godot Engine, Игры, Компьютерные игры, Игровой движок, Длиннопост

Несмотря на свою легковесность, Godot обладает необходимым и достаточным функционалом разработки (об этом ниже), а так же берёт на себя базовые оптимизационные задачи, такие как: управление памятью и ресурсами компьютера, интеграция устройств ввода, сборка и оптимизация продукта под различные платформы – от мобильных, до консолей.


При этом базовая сборка не тащит за собой «ваще все библиотеки, которые только есть в природе» – вплоть до того, что в ней отсутствуют инструменты для билда. Godot – это конструктор. Он не знает, чем вы будете заниматься, поэтому предоставляет функционал разработки… и… всё! Остальное вы докачиваете сами по мере необходимости.


Периодически в этих ваших интернетах на форумах и у обзорщиков проскальзывает снисходительная ремарка «Godot – движок для первой игры, и всё». Это не так. Godot – высокоуровненвый профессиональный инструмент, достаточно дружелюбный, но своеборазный и сложный в освоении, если вы хотите нарисовать что-то сложнее пиу-пиу платформера.



Среда разработки


Godot «из коробки» обладает всеми необходимыми компонентами для разработки, отладки, тестирования и конструирования игры, не требует использования дополнительного ПО для создания программной и архитектурной составляющих (разумеется, вам в любом случае потребуются программы для создания визуального контента, звуковых ассетов, etc.).


Однако, если по какой-то причине, встроенные инструменты вас не устраивают, вы легко можете воспользоваться привычным. Godot умеет дружить со множеством внешних редакторов и IDE.


Для воплощения ваших самых смелых идей он имеет 2D и 3D пространство со стандартным набором классов и объектов, а так же редактор скриптов и два редактора шейдеров — для прямого программирования и визуальной настройки. Поведение любого класса вы можете расширять и/или изменять по мере надобности.


Об особенностях рендера и визуальной среды ниже.


Редактор скриптов обладает возможностями дополнения кода, авто-отступами, подсветкой синтаксиса, быстрым доступом к API движка и докам.


Интерфейс приятный, лакончиный и довольно интуитивный:

Godot Engine. Обзор игрового движка Разработка, Gamedev, Godot, Godot Engine, Игры, Компьютерные игры, Игровой движок, Длиннопост

Внутренние ресурсы проекта


Основным объектом для программных манипуляций является дерево «сцен» и «узлов». Узлом может являться как самостоятельный объект, так и группа объектов. Прелесть заключается в том, что любой из узлов в любой момент времени можно изолировать в самостоятельный компонент («сцену»). Поэтому при разработке можно быстро и безболезненно редактировать, масштабировать или полностью менять структуру проекта и/или его отдельных модулей.

Godot Engine. Обзор игрового движка Разработка, Gamedev, Godot, Godot Engine, Игры, Компьютерные игры, Игровой движок, Длиннопост

Все игровые ресурсы (графические и звуковые ассеты, скрипты, конфиги, шейдеры, etc.) хранятся в файловой системе как набор файлов, не являясь частью БД или иерархических компонентов структуры самого движка. К файловой системе можно обращаться как непосредственно средствами вашей ОС, так и из редактора проекта.

Godot Engine. Обзор игрового движка Разработка, Gamedev, Godot, Godot Engine, Игры, Компьютерные игры, Игровой движок, Длиннопост

Возможно, вам трудно осознать преимущества этого подхода, поэтому отмечу, что упрощённая система хранения данных обеспечивает лёгкий доступ всех членов команды разработчиков ко всем ассетам (мы не зависим от версии БД, текущей версии продукта и даже версии самого движка!), а так же сильно облегчается контроль версий — особенно если применяете внешние системы управления.



Скрипты


Godot исользует собственный высокоуровневый динамически типизированный скриптовый язык программирования — GDScript, который является плодом порочной связи гибридом Python и Lua.


Язык специализировался и оптимизировался под ранее упомянутую архитектуру систем сцен и узлов, однако если по какой-то причине вам хочется писать на другом языке (допустим, не хватает каких-либо инструментов, или вы просто не хотите осваивать новый синтаксис), Godot умеет интегрировать другие языки программирования, в частности C#, C++, Rust.


Помимо этого (начиная с версии 3.0) присутствует компонент для визуального программирования — Visual Scripting. Про него не могу ничего сказать, не приходилось пользоваться, но, думаю, это легко нагуглить.


Идеология движка имеет строгое ограничение: один узел — один скрипт. Однако, если вам необходимо менять поведение и/или состояние объекта в зависимости от игрвого состояния, Godot любезно предоставляет возможность заменять один скрипт на другой «на лету» или пользоваться внешними скриптами, которые вообще не привязаны ни к одному узлу — например, это могут быть списки оружия, брони и соответствующее им поведение, которое подхватывается из мирно дремлющего скрипта активным и применяется.



Визуализация


Графическая система — OpenGL ES. Для рендеринга 3D-сцен применяются технологии order-independent transparency, normal mapping, specularity, полноэкранные постэффекты типа FXAA, bloom, DOF, HDR, гамма-коррекции, distance fog, динамические тени на основе shadow maps и другие.


Отдельно стоит отметить превосходную симуляцию освещения и постобработки. В возможностях манипуляций со светильниками Godot не уступает движкам, специализирующимся на кинематографических эффектах для игр.


В отличие от многих других движков, которые имитируют 2D-среду на 3D пространцстве, 2D компонент Godot полностью изолирован, оптимизирован и имеет свой собственный набор классов и объектов. Следствием этого является компактность и быстродействие готового игрового продукта (мы не тащим с собой тяжёлые 3D-объекты и обвязку к ним там, где это не требуется), а так же удивительная лёгкость манипуляций с 2D компонентами в процессе разработки.

Godot Engine. Обзор игрового движка Разработка, Gamedev, Godot, Godot Engine, Игры, Компьютерные игры, Игровой движок, Длиннопост

Помните, выше упоминалось, что Godot поддержит вас в любых самых сумасшедших начинаниях? ;) Стартуя работу с 2D сценой, вы легко можете добавить в неё 3D объекты или целые блоки, воспользовавшись многоуровневой системой вьюпортов. Благодаря изоляции 2D и 3D пространства (и, разумеется, многопоточности) компоненты не мешают друг другу и не тормозят работу продукта. В обратную сторону это тоже работает ;)



Игровая физика


Физический движок для 2D и 3D тоже уникальный и разработан с нуля, что позволило добиться требуемого уровня оптимизации физической подсистемы. Реализованы возможности рейкастинга, обнаружение столкновений, динамики твёрдых тел и соединений между ними. Так же имеется обширный арсенал инструментов, осуществляющих кинематику.


Кстати, объекты предназначенные для распознавания физических взаимодействий, полностью изолированы от визуализационных, что облегчает манипуляции с теми и другими и гарантирует, что вы не поломаете визуал своего сложного десептикона столкновением с автоботом.


К сожалению, в версиях движка 3.0 — 3.5 (к настоящему моменту самая свежая из стабильных) на 2D пространстве отсутствует физика частиц — поведение имитируется, оставаясь не более, чем визуальным эффектом. Честной физики мы тут не увидим. В Godot 4.0 этот компонент улучшен, но это всё ещё альфа — имейте это в виду, если захотите поиграть с физикой частиц в новой версии движка. Для 3D всё в порядке.



Платформы


Напоминаю, для того, чтобы сбилдить проект вам сперва нужно скачать и настроить соответствующий компонент. Выбор при этом у вас впечатляющий. Godot поддерживает Windows (и UWP OS), MacOS, X11 (Linux, BSD), Android OS, iOS, HTML5. Также можно производить экспорт на другие платформы вручную через компилирование движка для SDK целевой платформы.


Система ввода поддерживает клавиатуру, мышку, геймпад и сенсорный экран (разные устройства могут быть назначены на абстрактное действие, и оно будет рассматриваться независимо от использованного метода ввода).



Подведём итоги


Здесь перечислены плюсы и минусы движка в голом виде — без дополнительных библиотек и плагинов, как будто вы его только что скачали.


Плюсы:

- компактность;

- MIT лицензия;

- открытый код;

- не трубет установки;

- кроссплатформенность;

- гибкость;

- универсальность;

- быстродействие;

- многопоточность;

- высокая оптимизация;

- эффективное управление ресурсами компьютера;

- удобство для использования;

- быстрый доступ к справке и внешним библиотекам;

- возможность взаимодействия с компонентами управления из вашего скрипта (например, можно статистику смотреть не на выделенной панели, а вывести прямо во вьюпорт игры).


Минусы:

- скундый набор инструментов визуальной разработки;

- отсутсвие предустановленных тимплейтов;

- отсутствие встроенных инструментов для билда;

- неудобные инструменты вёрстки диалоговых окон;

- слабые AR/VR компоненты;

- осутствие физики для 2D частиц;

- отсутствие возможности редактирования мешей и уровней сглаживания;

- низкая популярность в России (очень мало материалов на русском языке).


Благодарю за внимание! Надеюсь, вам было интересно в общих чертах познакомиться с Godot. Если у вас остались вопрсы, можете задать их в комментах, постараюсь ответить на все :)

Всем хорошего дня, вдохновения и успехов в освоении Godot!


P.S.: Следующим постом выложу полезные материалы для новичков с кратким описанием полезности.


P.P.S.: К сожалению, невозможно запихать в один обзор всю полезную и интересную информацию, поэтому в перспективе планирую сделать подробное описание каждого блока с разбором функциональных компонентов. Пожалуйста, посигнальте в комментах, если эта информация вам интересна.

Следующий пост в серии
Показать полностью 7
9

Godot. Static, Tool и два Enums'a

Всем привет, редко писать стал, погряз в трудах праведных времени свободного мало. Сейчас в основном занимаюсь обвязкой для метагейма, апгрейды, покупки и т.д. Ну и открыл для себя немало удобных штук, думаю надо поделиться своими соображениями с сообществом.

Да, под  метагеймом я подразумеваю не MostEffectiveTactic, а абстрагированное развитие прогресса игрока, вне основной геймплейной сессии.


А потому в этом посте, будет простенькое хранение игровой валюты, отображение её на экране и кнопочка с помощью которой можно будет потратить эту валюту)
Создал пустой проект, в которых запихнул три иконочки.

Godot. Static, Tool и два Enums'a Gamedev, Godot Engine, Godot, Видео, Длиннопост

Перво наперво надо её где-то хранить, запилим CurrencyStorage. Можно это конечно сделать синглтоном или ещё как, но в этом случае я сделаю, используя статичные функции, меня недавно распрашивали насчет них, кому-то видимо нужно и может пригодится, да и сам я ими пользуюсь в различных Utils классах.
Важное замечание, в gdscript есть статичные функции, но нет статичных переменных, что с одной стороны странно и неудобно, с другой стороны хорошо) Но эту неприятность легко можно обойти, например в константе хранить массив, словарь или свой пользовательский класс.

Использую словарик.

Godot. Static, Tool и два Enums'a Gamedev, Godot Engine, Godot, Видео, Длиннопост

Обратите внимание, что класс CurrencyStorage, ни отчего не наследуется, его экземпляров мы создавать не будем, при попытке запихать его в AutoLoad будет ошибка.

Ну ладно. проверим что все работает как надо

Godot. Static, Tool и два Enums'a Gamedev, Godot Engine, Godot, Видео, Длиннопост

Теперь сделаем универсальный Label, который будет показывать не только количество, но и содержать в себе иконку валюты.

Godot. Static, Tool и два Enums'a Gamedev, Godot Engine, Godot, Видео, Длиннопост

Сейчас можно расставить наши IconLabel в сцене Main, запустить и игра упадет.

Связано это с порядком выполнения методов _ready() в дочерних и родительских нодах, а если помните то CurrencyStorage.store() я поместил именно в _ready.
Кстати непонимание этой разницы вызывает немало ошибок у новичков, поверьте я знаю с двумя новичками и сотрудничаю сейчас.
метод _ready() это не конструктор, он вызывается когда экземпляр уже добавился на сцену в результате add_child(). Конструктор, который вызывается при создании экземпляра это _init()
И порядок выполнения следующий:
parent -> _init()
child -> _init()

...

child -> _ready()

parent ->_ready()


_init родителя вызывается раньше чем _init потомка, но добавляются на сцену они в обратном порядке, что в принципе очень даже логично)
Перенесем загрузку стартовых данных в _init()

Godot. Static, Tool и два Enums'a Gamedev, Godot Engine, Godot, Видео, Длиннопост

Для каждой IconLabel не забудьте указать разный тип. И я кстати косякнул, два раза в match указал Gold, вместо Silver.

Godot. Static, Tool и два Enums'a Gamedev, Godot Engine, Godot, Видео, Длиннопост

Собственно результат при запуске.

Godot. Static, Tool и два Enums'a Gamedev, Godot Engine, Godot, Видео, Длиннопост

В редакторе же мы видим далеко не такую красоту, там тлен и пустота.

Godot. Static, Tool и два Enums'a Gamedev, Godot Engine, Godot, Видео, Длиннопост

Согласитесь очень неудобно, ведь надо же не только вывести, но и красиво расставить.

Для этого воспользуемся ключевым словом tool.

Godot. Static, Tool и два Enums'a Gamedev, Godot Engine, Godot, Видео, Длиннопост

собственно результат

Godot. Static, Tool и два Enums'a Gamedev, Godot Engine, Godot, Видео, Длиннопост

Картинками не показать, что меняется в редакторе, вот видосик держите.

Наберет если пост 15 лайков, то напишу и продолжение про пользовательскую кнопку для покупок за валюту, и покупке валюты за рубли)) Тонкий байт на лайки, эндорфинов не хватает, а каждый лайкосик дает немало)

Ну и ссылка на чатик сообщества в тг https://t.me/Godot_pikabu
Можно позадавать или поотвечать на вопросы или просто пофлудить, но без троллинга и токсичности плз.


p.s. А иногда tool не сразу почему-то работает после добавления его в скрипт, бывает нужно релоаднуть проект.

Godot. Static, Tool и два Enums'a Gamedev, Godot Engine, Godot, Видео, Длиннопост
Показать полностью 11 1
9

Godot. Unique Scene Name

Всем привет, затрону один важный момент касающийся организации кода. По моим наблюдениям новички туторами обмажутся, а потом у них возникают проблемы, а все из-за использования абсолютных путей. Я про два конкретных способа get_parent() и get_node().

Создам тестовый проект для наглядности.

Godot. Unique Scene Name Gamedev, Инди, Godot, Godot Engine, Видео, YouTube, Длиннопост

Вроде бы все хорошо, никаких проблем нету, мы же ничего не собираемся менять никогда в структуре этой сцены<sarcasm> 100% можно быть уверенным только в одном, что изменения будут, в геймдеве особенно)
Немножко изменим структуру сцены.

Godot. Unique Scene Name Gamedev, Инди, Godot, Godot Engine, Видео, YouTube, Длиннопост

Если уж хотите все одно таким образом обращаться к нодам или сценам нужным, то Godot предоставляет очень удобный инструмент.

Godot. Unique Scene Name Gamedev, Инди, Godot, Godot Engine, Видео, YouTube, Длиннопост

Теперь для помеченных таким образом сцен не нужно указывать абсолютный путь, годот все сделает за вас. get_parent() почти всегда порочная практика, в конце поста покажу один пример)

Если потомку надо знать своего родителя, то пусть родитель и сообщает ему об этом.

Godot. Unique Scene Name Gamedev, Инди, Godot, Godot Engine, Видео, YouTube, Длиннопост
Godot. Unique Scene Name Gamedev, Инди, Godot, Godot Engine, Видео, YouTube, Длиннопост

Все теперь можно их перетаскивать по сцене как угодно, уже ничего не сломается.

Особенно это удобно при создании GUI, адаптивный интерфейс как правило требует много разнообразных вложений и родительских сцен, чтобы все там само красивенько расползалось по экрану, с таким подходом сэкономите себе кучу нервов и времени)

И обещанное про get_parent()
Для наглядности в _physics_process добавил 3 get_parent()

на картинке ниже видно, что _physics_process выполняется на 30% дольше чем _velocity_computed

Godot. Unique Scene Name Gamedev, Инди, Godot, Godot Engine, Видео, YouTube, Длиннопост

А теперь скрин профайлера без этих 3-х get_parent()

Godot. Unique Scene Name Gamedev, Инди, Godot, Godot Engine, Видео, YouTube, Длиннопост

Как видите на 25% быстрее стал выполняться, чем _velocity_computed
Если вам кажется что это пустяк, то вот видосик. Ролик коротенький, но 60мб получился, заль. ютуб. В первом случае у меня фпс начинал падать ниже 60 уже после спавна 600 человечков, во втором это число выросло до почти 2100.

https://youtu.be/jd3pMYHGYYM

Всем спасибо за внимание.
Небольшой и уютный чатик нашего сообщества https://t.me/Godot_pikabu

Частенько действительно полезные вещи подсказывают, удобно, с любым затупом можно просто спросить))

Показать полностью 7 1
10

Godot. Particle Library

Всем привет, давно ничего не писал, времени не было) Произошло много событий, даже слишком)) Я накосепорил преизрядно, натворил делов недобрых, после этого меня ещё и с работы выгнали, так что теперь я в статусе безработного бомжа) Но есть плюс, я был у невролога и психиатра, прописали мне таблов. И заодно закодировался, так что ближайшие полгода алкопостов не будет) Ну это одна причина почему не писал долго.

Вторая причина. В чатике сообщества организовались с парнями и поучаствовали в джеме.
@Noizless.dog, @inar0s, @xenofob, привет, ещё и тут)

Godot. Particle Library Godot, Godot Engine, Инди, Gamedev, Видео, Без звука, YouTube, Длиннопост

За три дня успели сделать в целом играбельный продукт, хоть и не до конца, сейчас понемножку полируем ещё. Поиграть можно тут.
https://itch.io/jam/sibgamejam-nov-2022/rate/1779990

Сильно заострять внимание на это не буду, позже будет отдельный разбор, по нашим ошибкам в ходе разработки)

А сегодня хотел написать вот о чем. Вот такой эффектик сделал для поверапа в игре, батарейку пополняет. Как по мне прикольный получился)

Ну и была мысль расписать, как его сделать, а потом думаю, как делать партиклы я уже писал, тут все тоже самое, проще поделиться сразу готовой реализацией, ну и сделал публичную репу на гитхабе)) А то мне уже скоро 40, а ни одного опенсорсного проекта не сделал ещё, что я за разработчик такой))

Немножко о том как все устроено в репозитории.
ссылка на сам репозиторий.
https://github.com/JunkyRoach/GodotParticleLibrary
Пока всего два эффекта, ну я потерял приличную библиотеку своих поделок, теперь сразу буду делать здесь, коммитить, а потом уже в рабочие проекты свои переносить. Так что если кому надо пользуйтесь. Потихоньку буду наполнять.


Вот собственно пока и все. Спасибо за внимание.
Залетайте в чатик сообщества https://t.me/Godot_pikabu
Много нового узнать можно, мне хоть разъяснили разницу между _input() и _unhandled_input()
Ну и как оказалось, найти единомышленников, чтобы создавать крутые игры, а иначе зачем вся эта возня с Godot.

Показать полностью 1 2
11

Godot. Путь Алкаша.VisibilityNotifier2D

Всем привет, я буду сразу в заголовке указывать, чтобы было понятно, в какую сторону содержимое скатится)
Но тут прям и тематика подходит как раз, кода будет, самый минимум, все как я люблю)

Не помню писал про эту ноду или нет, но даже если и писал, повториться будет не зазорно. Очень удобная и утилитарная нода.
https://docs.godotengine.org/ru/stable/classes/class_visibil...

Разбирать буду сразу на примере реальной задачи, как делаю для себя. Без всяких там ужимок про хороший код и тд, для себя я знаю приблизительно конечную цель, чего мне лишний раз потеть.


У меня согласно диздоку, сверху должны падать всякие кирпичи, бутылки, огрызки, окурки, случайно дожившие эмо и тд.
Гиперкеж про дрона доставляющего посылки в район низкой социальной ответственности.

Godot. Путь Алкаша.VisibilityNotifier2D Godot, Godot Engine, Gamedev, Инди, Видео, Без звука, Длиннопост, Мат

Дом не бесконечен в высоту и имеет крышу, которую можно увидеть если долететь. Так что из воздуха падать ничего не должно. Можно конечно сделать анимацию, как из окна высовывается очередной негодяй и бросает мусор, но это дорого, одна анимация дороже всей игры получится. Можно уйти в дичь и запилить летающую тарелку или Байдена на вертолете, все и так знают, что они основной источник мусора под балконами.


Но можно сделать проще и спавнить объекты, только тогда, когда ещё не видно крыши и игрок не видит источник спавна, но его наличие там подразумевается. Так и в реальности обычно происходит, окурок падает, голову поднимешь, а там уже и нет никого.


Ну хватил лирики, начну делать.

Godot. Путь Алкаша.VisibilityNotifier2D Godot, Godot Engine, Gamedev, Инди, Видео, Без звука, Длиннопост, Мат

Теперь доработаем сцену до нужных кондиций и проверим.

Godot. Путь Алкаша.VisibilityNotifier2D Godot, Godot Engine, Gamedev, Инди, Видео, Без звука, Длиннопост, Мат

Переходим на закладку сигналы.

Godot. Путь Алкаша.VisibilityNotifier2D Godot, Godot Engine, Gamedev, Инди, Видео, Без звука, Длиннопост, Мат

Теперь подвяжем сигналы к скрипту.

Godot. Путь Алкаша.VisibilityNotifier2D Godot, Godot Engine, Gamedev, Инди, Видео, Без звука, Длиннопост, Мат

Так же делаем со вторым сигналом.

Godot. Путь Алкаша.VisibilityNotifier2D Godot, Godot Engine, Gamedev, Инди, Видео, Без звука, Длиннопост, Мат

Кода минимум, но это эталонная реализация паттерна Observer, ладно проверим, работает или нет.

Ну и максимально быстро тогда покажу код бутылки, не буду сейчас доделывать коллизии, просто пусть вниз падает.

Godot. Путь Алкаша.VisibilityNotifier2D Godot, Godot Engine, Gamedev, Инди, Видео, Без звука, Длиннопост, Мат

И код фабрики, тут будет с небольшим изъебом, это задел на следующий пост оставлю.

Godot. Путь Алкаша.VisibilityNotifier2D Godot, Godot Engine, Gamedev, Инди, Видео, Без звука, Длиннопост, Мат

Все у меня уже мысли путаются и на одной картинке сложно объяснить все что хотел, код тоже простой, таймер спавнит сигнал, если сейчас  видно фабрику, то ничего не спавнится, и наоборот.
Почему поставил ноду таймер, а не указал время спавна в export var?? Да просто так меньше кода. Ну и там в рандомном диапазоне выбирается позиция по x для бутылки, проще уже некуда казалось бы) Но на самом деле, пока писал, понял что можно ещё проще, просто по сигналу нотифаера стопать таймер, а потом снова включать, ещё меньше кода будет.

Я побольше акцентировал внимание на сигналах, да просто потому что это кайфовая тема, событийно-ориентированное программирование, на мой взгляд наилучшим образом подходит для геймдева, оно логичное и понятное, оно очень понятно даже далеким от программирования людям. Ну и я не использую никаких IDE, да просто потому что базовый редактор, он гораздо больше подходит для удобочитаемости кода. Да тут я кликнул два раз мышкой и вижу зеленые фитюльки, мне они нагляднее и понятнее чем self.connected(self.... и уж это гораздо понятнее новичкам. Засим прощаюсь, всем GODOT!!

Если есть вопросы, пожелания то велкам в чатик сообщества. https://t.me/Godot_pikabu
Впрочем сейчас он превращается в спонтанный чат разработки pve-coop_платформера в 3D на базе Godot, но там есть по настоящему умные люди, которые могут подсказать дельные вещи.

UPD. Вот алкашина-то, даже не залил видео с бутылками падающими)
ну а хуле у себя работает и нормас, чего о других думать, было бы грустно если бы не было так смешно))

Показать полностью 8 2
8

Ответ на пост «Помогите пожалуйста»

Всем привет, особенно @nazirmustafin773, в целом тебе ответили на вопрос, главная ошибка была в том что отступ не поставил.


Я когда начал изучать Python и впоследствии GDS, мне сложно было порой с этими отступами, да и сейчас бывает косячу, что поставлю неправильно, а у меня вся логика рушится вместе с этим.

Я использовал pass, как завершение условия или цикла, да оно не нужное, но я для личного удобства это ставил, просто чтобы самому не косячить и не ошибаться, а потом уже привык, да и не просто привык, а втянулся и оценил преимущество этого подхода на отступах))

Ответ на пост «Помогите пожалуйста» Godot, Картинка с текстом, Gamedev, Видео, Без звука, Ответ на пост, Длиннопост

Ну и немножечко к передвижению, добавлю вариант один, которым сам пользуюсь, да и в комментах тебе его предложили, но он там внизу вдруг не заметил)


собственно идея в чем, здесь ты именно вектор движения задаешь, а уже потом к нему применяешь скорость, гравитацию и прочее, этот способ удобен, что и с аналоговым контроллером, он будет работать сразу и хорошо, ну а для дискретного, как раз вектор и нормализуется, чтобы по диагонали не летел быстрее, чем по осям.

Ответ на пост «Помогите пожалуйста» Godot, Картинка с текстом, Gamedev, Видео, Без звука, Ответ на пост, Длиннопост

Вот собственно и все, для KinematicBody, суть та же самая, ну может попозже напишу и для него.

А в целом, как раз для таких вопросов и создали группу. https://t.me/Godot_pikabu
За 5 минут бы тебе ответили, не пришлось бы и заморачиваться с постом, опять же люди там поумнее меня имеются, просто не все готовы посты писать)
Но в целом, как тебе удобнее так и задавай вопросы, новичком быть не стыдно. Стыдно троллить новичков, пряча буллинг за псевдоюмором и сарказмом.

Показать полностью 2 1
21

ГЦ Свидетели Godot'овы. Нас 100 человек

Всем привет. Потихоньку, потихоньку, но нас любителей Godot'а набралось 100 человек в сообществе, я очень счастлив и даже нажрался по этому поводу, как всегда)) Люблю вас всех, просто за то, что вы любите Godot. И на радостях небольшой анонсик.

Не только в юнити и UE можно делать прикольные эффекты, Godot может делать все тоже самое, а в 4 версии которая нас ждет, будет ещё всего больше.
Ну и это 3D

ГЦ Свидетели Godot'овы. Нас 100 человек Godot, Godot Engine, Инди, Gamedev, Видео, Без звука, YouTube, Длиннопост, Мат

Не спорю, далеко от идеала, первая моя попытка в 3D партиклы, @xenofob, прям вытащил меня из пучины, в дальнейшем думаю посты по Gridmap будут от него или может от меня, короче он забрал в нашем проекте с меня кучу работы с ассетами, даже как-то дышать стало легче, посмотрел один видосик и за часик вот сразу собрал такой эффектик. Как красные карандаши в проекте заменю на эти пульки, так сразу же будет пост, как делать подобное.

Кому интересно прямо сейчас, этот чувак прям вообще хорошо основы рассказывает.
https://www.youtube.com/watch?v=DkJ2jYl-ESw&amp;ab_channel=G...
Но английский желателен или общее понимание работы партиклов, вообщем что-то не понятно будет, спрашивайте.
А по своему разумению, скоро напишу как делать подобные)

Всем Godot!!!


А вообще пишите, не сомневайтесь в себе, не думайте, что вы ничего не знаете и не умеете. Если вы умеете что-то делать, то запросто ещё 100 человек, не знают, как это сделать или вы покажете другой подход к общей проблеме. Надо менять это отношение к себе и другим, консерватизм не выход сейчас, англоязычные ресурсы заполнены Godot, он стремительно занимает позиции, дойдет и к нам, нет смысла стесняться, не в этом сообществе. Написав пост на любую тему, вы свои знания о ней двукратно увеличите. Это не байт и не для охвата, тут никогда не будет рекламы. Это для общего и саморазвития. Делится своим опытом, это не постыдно!
Тут не будет никогда, что за мнение о Godot, даже отличное от других вас осудят, всех токсиков сразу в бан. Это территория добра.

UPD:
Но это добро не для всех, это ультраправая территория Godot. Чатик все показал.
https://t.me/Godot_pikabu
Бухло, секcзизм(бля я не знаю как это слово правильно написать, оно всегда подчеркнуто остается), троллинг и пиздеж обо всем кроме Godot, но мы все выговорились, по сути каждый о своем наболевшем, поделились проектами, проблемами и о хуйне пообщались всякой, хз что будет дальше, но и о потенциальной помощи друг другу договорились ,за всех не скажу, я договорился)) Я буду помогать, когда-нибудь и мне понадобится, короче чатик норм получился, не думал что вообще кто-то зайдет. Уверен что эти парни помощи ещё дадут. Но вряд-ли получится найти халявного разработчика, каждый со своим проектом, хотя один всех пытался собрать в общее, так что дерзайте не разрабы, у нас там есть один ГД, правда он многих кодеров за пояс заткнет) Велкам блять)

Показать полностью 1 1
9

Godot. 2.5DPlatformer. GridMap и MeshLibrary

Всем привет. Последний раз у меня не получилось тихонечко попить пивка и покодить, всё это превратилось в трехдневную вакханалию, за малым в запой не ушел тотальный. Так что все, снова начинаю трезвый период жизни, художник начал рисовать, куча разрозненных механик написана, в целом всё есть, пора собирать играбельный прототип.


Арт у нас будет плана как на картинке ниже, поскольку игра формально двумерная, то лучше чем GridMap ничего и не подойдет для этого. Основа из него, а поверх уже и декор.

Первые наброски

Godot. 2.5DPlatformer. GridMap и MeshLibrary Gamedev, Инди, Godot, Godot Engine, Разработка, Видео, Без звука, Длиннопост

Экспериментировать я так и продолжу из базового шаблона, в целом там уже мало конечно что от него осталось, плюс первоначальную meshlibrary немножко дополнил, пока разбирался и экспериментировал.

Godot. 2.5DPlatformer. GridMap и MeshLibrary Gamedev, Инди, Godot, Godot Engine, Разработка, Видео, Без звука, Длиннопост

Но это фигня, сейчас создам новую библиотеку и немножко расскажу по мере сил, на самом деле много у меня у самого ещё вопросов, особенно с лестницами я замучался, ладно все по очереди, может кто подскажет заодно чего дельного.

Пока наш художник работает над лесной локацией, сделаю отдельную для подземелья, в процессе сформируется и список требований для моделек)
Использовать буду это бесплатный пак.
https://kaylousberg.itch.io/kaykit-dungeon

Godot. 2.5DPlatformer. GridMap и MeshLibrary Gamedev, Инди, Godot, Godot Engine, Разработка, Видео, Без звука, Длиннопост

Очень даже сгодится, модельки простые, но выглядит мило.

Качаем, распаковываем и охреневаем.

Godot. 2.5DPlatformer. GridMap и MeshLibrary Gamedev, Инди, Godot, Godot Engine, Разработка, Видео, Без звука, Длиннопост

Просто все в одной папке, кучей. Придется, все это перебирать по всей видимости ручками, потому что тут и стенки и пол и мечи с бочками, все вперемешку. По хорошему, сына бы надо посадить, пусть сортирует, в процессе и по библиотекам распихать. Ладно, глаза боятся, руки делают.

Я не знаю пока более оптимального способа, так что просто все запихал в одну папку, и оттуда буду потихоньку выдергивать что мне нужно. В паке много разных форматов, в Godot рекомендован glb, потому его и выбрал, можно обратить внимание, что используемые материалы, так же импортируются вместе с модельками, удобно).

Godot. 2.5DPlatformer. GridMap и MeshLibrary Gamedev, Инди, Godot, Godot Engine, Разработка, Видео, Без звука, Длиннопост

Создадим новый ресурс.

Godot. 2.5DPlatformer. GridMap и MeshLibrary Gamedev, Инди, Godot, Godot Engine, Разработка, Видео, Без звука, Длиннопост

Тип MeshLibrary

Godot. 2.5DPlatformer. GridMap и MeshLibrary Gamedev, Инди, Godot, Godot Engine, Разработка, Видео, Без звука, Длиннопост
Godot. 2.5DPlatformer. GridMap и MeshLibrary Gamedev, Инди, Godot, Godot Engine, Разработка, Видео, Без звука, Длиннопост

Надо начать хотя бы с пола, потому поищем какую-нибудь подходящую плитку.

Godot. 2.5DPlatformer. GridMap и MeshLibrary Gamedev, Инди, Godot, Godot Engine, Разработка, Видео, Без звука, Длиннопост
Godot. 2.5DPlatformer. GridMap и MeshLibrary Gamedev, Инди, Godot, Godot Engine, Разработка, Видео, Без звука, Длиннопост

А теперь надо её запихать в библиотеку которую создавали ранее.

Godot. 2.5DPlatformer. GridMap и MeshLibrary Gamedev, Инди, Godot, Godot Engine, Разработка, Видео, Без звука, Длиннопост
Godot. 2.5DPlatformer. GridMap и MeshLibrary Gamedev, Инди, Godot, Godot Engine, Разработка, Видео, Без звука, Длиннопост
Godot. 2.5DPlatformer. GridMap и MeshLibrary Gamedev, Инди, Godot, Godot Engine, Разработка, Видео, Без звука, Длиннопост

А сейчас пора удалить старую библиотеку в GridMap и начать использовать новую.

Godot. 2.5DPlatformer. GridMap и MeshLibrary Gamedev, Инди, Godot, Godot Engine, Разработка, Видео, Без звука, Длиннопост
Godot. 2.5DPlatformer. GridMap и MeshLibrary Gamedev, Инди, Godot, Godot Engine, Разработка, Видео, Без звука, Длиннопост
Godot. 2.5DPlatformer. GridMap и MeshLibrary Gamedev, Инди, Godot, Godot Engine, Разработка, Видео, Без звука, Длиннопост

Ну вот, все старые кубики заменились на новые плитки, правой кнопкой можно все это почистить и начать пилить новый уровень)

Godot. 2.5DPlatformer. GridMap и MeshLibrary Gamedev, Инди, Godot, Godot Engine, Разработка, Видео, Без звука, Длиннопост

Опытным путем, выяснилось что размер плитки 2*2*1м. Проекции переключаются хоткеями ZXC, смещать слой ближе дальше можно хоткеями Q и E

Godot. 2.5DPlatformer. GridMap и MeshLibrary Gamedev, Инди, Godot, Godot Engine, Разработка, Видео, Без звука, Длиннопост

Нарисовал пока такую штуку, самое время проверить что получилось, в целом довольно очевидно, что все будет плохо и игрок просто провалится вниз, потому что нигде не указали коллизии.

Коллизии можно указать минимум двумя способами, для простых фигур типа куба, можно сделать следующим образом.

Godot. 2.5DPlatformer. GridMap и MeshLibrary Gamedev, Инди, Godot, Godot Engine, Разработка, Видео, Без звука, Длиннопост
Godot. 2.5DPlatformer. GridMap и MeshLibrary Gamedev, Инди, Godot, Godot Engine, Разработка, Видео, Без звука, Длиннопост

И второй вариант. Для этого надо вернуться в ранее унаследованную сцену модельки.

Godot. 2.5DPlatformer. GridMap и MeshLibrary Gamedev, Инди, Godot, Godot Engine, Разработка, Видео, Без звука, Длиннопост
Godot. 2.5DPlatformer. GridMap и MeshLibrary Gamedev, Инди, Godot, Godot Engine, Разработка, Видео, Без звука, Длиннопост
Godot. 2.5DPlatformer. GridMap и MeshLibrary Gamedev, Инди, Godot, Godot Engine, Разработка, Видео, Без звука, Длиннопост

Ну и проверим, что все работает как надо.

Ну, вот все получилось как надо, даже лимит на картинки вышел в посте, пардон что так много получилось. В целом это пост для @xenofob, так что все неясности, полезные уточнения и замечания от него, будут в следующем посте, а может и он чего напишет, в конце концов, нам надо определится, как будем делать, чтобы максимально удобно и быстро было)

Ну а если не будет замечаний, то будет по лестницам значит, головоломная там конечно хрень, работает у меня все через жопу с ними. Даже есть мысль, вообще нафиг не использовать лестницы и не усложнять себе жизнь)

Всем спасибо за внимание, сейчас трезвый так писать возможно буду пореже, но и дичи поменьше будет)

Показать полностью 23 2
7

Godot. Путь Алкаша. Рейкасты. Продолжение

Всем добрый вечер. Наступают выходные, а значит я опять на кочерге и самое время продолжить
Godot. Путь Алкаша. Рейкасты

Пока шел домой с работы, столько мыслей было в голове, а сел за комп и пустота, зовущая в доту играть)

Ну лиха беда - начало. В прошлом посте, закончил на том, что враги определяют край платформы или стенки и при касании разворачиваются, теперь надо сделать чтобы они могли прыгать.

Изобретать ничего не буду, все согласно замечательному напутствию Godot Engine. Библиотека новичка
учимся работать с документацией.
https://docs.godotengine.org/en/stable/tutorials/physics/usi...

Godot. Путь Алкаша. Рейкасты. Продолжение Godot, Godot Engine, Gamedev, Инди, Алкоголизм, Видео, Без звука, Длиннопост

Так и сделаю, разве что условие для прыжка будет не Input, а столкновение с препятствием.

Godot. Путь Алкаша. Рейкасты. Продолжение Godot, Godot Engine, Gamedev, Инди, Алкоголизм, Видео, Без звука, Длиннопост

Ну проверим, что получилось.

Теперь быстренько подправим сцену вражины, самым наверное простым способом, чтобы определять, может он запрыгнуть или нет.

Godot. Путь Алкаша. Рейкасты. Продолжение Godot, Godot Engine, Gamedev, Инди, Алкоголизм, Видео, Без звука, Длиннопост
Godot. Путь Алкаша. Рейкасты. Продолжение Godot, Godot Engine, Gamedev, Инди, Алкоголизм, Видео, Без звука, Длиннопост
Godot. Путь Алкаша. Рейкасты. Продолжение Godot, Godot Engine, Gamedev, Инди, Алкоголизм, Видео, Без звука, Длиннопост

Теперь надо поменять условия для прыжка, сейчас сделаем только чтобы запрыгивал на допустимое препятствие, спускаться он и так уже умеет.

Godot. Путь Алкаша. Рейкасты. Продолжение Godot, Godot Engine, Gamedev, Инди, Алкоголизм, Видео, Без звука, Длиннопост

По идее сейчас бы самое хорошее время было написать блоксхему, как и что когда должно прыгать, но быстро меня укачало сегодня, так словами постараюсь) Хотя уже и словами тяжело.


Начнем с базы.
Если подошли к краю и не можем упасть, разворачиваемся.

Если подошли к стенке и не можем перепрыгнуть, разворачиваемся

Если подошли к краю и можем упасть, падаем.

Если подошли к стенке и можем перепрыгнуть, прыгаем.

И все это мы проверяем, если мы сейчас уже не в прыжке. Согласен сложная схема, но она зато очевидная, для скорости самое оно.

Godot. Путь Алкаша. Рейкасты. Продолжение Godot, Godot Engine, Gamedev, Инди, Алкоголизм, Видео, Без звука, Длиннопост

Блин я даже сделал, не так как описал, то есть я понимаю, что это не хорошо, сам не люблю множественные вложения If, но я прирожденный гавнокодер, я даже описать не могу, они такие конструкции сами складываются, особенно после полбутылочки водочки и 0.5 пива. Скорость прыжка тоже увеличил. Иначе малохольный краб не дотягивал по высоте)

Ну вот в целом все работает, тут огромный просто для улучшения, как минимум это выставление рейкаста для проверки возможности прыжка, по высоте прыжка для краба. Это прыжок с максимально возможной дистанции, чтобы не обтираться об стенку, прыжок на сложные конструкции с неквадратной формой. Возможность прыгать на двигающуюся платформу с упреждением и многое, многое другое. Для все этого, очень пригодятся рейкасты, как одно из наиболее простых средств, наколхозить конечно можно много всякого разного, но с ними, как видите все очень просто и кода, минимум.


Ещё раз тему рейкастов затрону в процессе доделки лазерного прицела, все остальное уже будет как сопуствующее, к обещанному опенсорсному шаблону платформера, ну возможно что-то напишу в процессе его разработки)

Спасибо всем за внимание, можете пинать, можете не пинать. Все одно что-нибудь ещё напишу.
Всем Godot.

UPD @xenofob, задал вопрос, мол кубик на который прыгает краб, выглядит словно через него можно пройти. Это мой косяк, как человека, вообще не способного к красивому или гармоничному, я просто выбрал любой квадратный тайл для примера) у него тоже есть область коллизии)

Godot. Путь Алкаша. Рейкасты. Продолжение Godot, Godot Engine, Gamedev, Инди, Алкоголизм, Видео, Без звука, Длиннопост

Визуально согласен, что это не читается)

Показать полностью 8 2
Отличная работа, все прочитано!