Gamedev


Ответить в тред Ответить в тред

Check this out!
<<
Назад | Вниз | Каталог | Обновить тред | Автообновление
57 8 15

Godot #17 Аноним # OP 23/05/20 Суб 11:36:27 6721081
.png (165Кб, 600x600)
600x600
С чего начать?
С изучения документации. Если не можешь в инглиш, и даже в гугл-переводчик, то продолжается перевод официальной документации: https://docs.godotengine.org/ru/latest/
Но вообще, будь мужиком и изучи английский: https://docs.godotengine.org/en/stable/

Вместе с движком обязательно смотри примеры, там есть всё - от платформера до чата. Примеры качаются прямо в движке через свой магазин.
Скачать движок: https://godotengine.org/download/ или http://store.steampowered.com/app/404790/Godot_Engine/
FAQ: https://docs.godotengine.org/ru/latest/about/faq.html
Игры, созданные глобальными кириллами: https://godotengine.org/showcase или https://steamcommunity.com/app/404790/discussions/0/412448792354265655/
Скажи "Годот круто!" https://github.com/Calinou/awesome-godot - подборка дополнений, модулей и минишоукейс от одного из авторов.

Годнота от анона:
Видос в шапку: https://www.youtube.com/watch?v=BAsVI-Yv928
Для приверженцев опенсорца существует возможность распрострянять проекты в незапакованном формате. Просто скачай темплейт с оф.сайта и положи экзешник/эльфешник в папку с проектом, этого достаточно. Дополнительно можешь вшить свою иконку в экзешник. После этого, запустившийся файл темплейта обнаружит рядом с собой файл project.godot и начнет грузить проект из него и из файлов, лежащих в распакованном виде в той же директории.
В версии 3.2 появилась возможность прикреплять pck к бинарнику. Бриллиант для любителей однофайлового продукта!
Редактор персонажей на основе makehuman: https://github.com/Lexpartizan/Go_MakeHuman_dot
Все языки в одном месте: https://vk.com/topic-70467171_35982467
Тест-бенчмарк:
Веб-версия - https://govdot.herokuapp.com
Вишмастер для винды - https://govdot.herokuapp.com/4Anon.rar

Предыдущий тонет там: >>658384 (OP)

Архивы:
1 https://arhivach.ng/thread/207802/
2 https://arhivach.ng/thread/388500/
3 https://arhivach.ng/thread/388501/
4 https://arhivach.ng/thread/388502/
5 https://arhivach.ng/thread/388503/
6 https://arhivach.ng/thread/432708/
7 https://arhivach.ng/thread/433902/
8 https://arhivach.ng/thread/436355/
9 https://arhivach.ng/thread/455461/
10 https://arhivach.ng/thread/479963/
11 https://arhivach.ng/thread/489815/
12 https://arhivach.ng/thread/494513/
13 https://arhivach.ng/thread/515567/
14 https://arhivach.ng/thread/533171/
15 https://arhivach.ng/thread/555441/
Аноним 23/05/20 Суб 13:08:39 6721212
Аноним 23/05/20 Суб 16:31:03 6721753
Качаю в очередной раз в попытке пройти базовый туториал "dodge game", поддержите меня.
Аноним 23/05/20 Суб 16:56:01 6721784
>>672175
Что может быть сложного в реализации доджгейм, что тебе нужны туториалы? Давай я текстом обесню. Задавай свои ответы, пока кочается.
Аноним 23/05/20 Суб 19:06:48 6722015
Аноним 23/05/20 Суб 19:30:14 6722076
>>672178
>Что может быть сложного в реализации доджгейм, что тебе нужны туториалы?
>базовый туториал "dodge game"
Он про это - https://docs.godotengine.org/en/stable/getting_started/step_by_step/your_first_game.html
Этот туториал по факту нужен не для "реализации доджгейм", а для знакомства с интерфейсом движка и стандартным воркфлоу. Текстом ты ему никак нормально не объяснишь, там в туториале картиночками показано что куда тыкать и чего что означает. Это для вкатывающихся в движок, очевидно же.
А сложного... наверное, ему мотивации не хватает пройти туториал до конца)
Аноним 23/05/20 Суб 20:14:58 6722187
>>672207
Ну тогда поддерживаю, хуле.
Аноним 23/05/20 Суб 22:54:12 6722628
Аноним 24/05/20 Вск 05:05:14 6722979
Аноним 24/05/20 Вск 10:19:13 67231610
>>672262
Некоторые просто не могут смириться с тем, что некоторые языки протухают со временем.
Аноним 24/05/20 Вск 11:25:45 67232711
>>672074 →
> Массивы вседа по ссылке
Я перепутал Array который по ссылке и PoolIntArray который по значению. И в тот раз и в этот.
Аноним 24/05/20 Вск 11:48:33 67233012
>>672108 (OP)
Заходил в годот-тред год назад. Хотел платформер прыгалку на годоте пилить для ведра, но были проблемы с оптимизацией и отрисовкой сплайнов вроде. Проблема схоронилась?
Аноним 24/05/20 Вск 11:52:43 67233313
>>672330
Вроде? То есть ты не уверен?
Аноним 24/05/20 Вск 11:53:37 67233414
>>672333
Тайлмапы тормозили
Аноним 24/05/20 Вск 11:59:01 67233615
>>672330
Сплайны всегда шли без тормозов. Чему там тормозить? Я два года назад видал туториал по созданию в годо гоночной игры, в котором дорога генерировалась по сплайну.
Аноним 24/05/20 Вск 12:52:12 67234916
>>672330
>>672334
>Тайлмапы тормозили
Не знаю насчет сплайнов, но если использовать бету 3.2.2 с батчингом, то с тайлмапами стало значительно лучше применительно к пиксельным 2Д проектам.
Количество drawcall-ов упало значительно, если без батчинга их было где-то 300-500 и более для одного тайлмапа, то с батчингом для той же карты получается менее 30.
На винде показывает стабильные 60FPS даже если напихать туда кучу параллаксов и всяких динамических шейдеров (вроде воды или тумана).
На Html5 тоже спокойно вывозит 60FPS, правда при условии если сделать целочисленное масштабирование картинки (придется повозиться с шаблоном экспорта для fixed_size). Тормоза только первые секунд 5 при после загрузки проекта.
На андроиде при стретчинге Viewport то же идет в 60FPS с редкими проседаниями на несколько кадров, при 2Д-стретчинге, похуже где-то 50-55FPS.
Но в принципе можно выставить target fps в 30 и будет все стабильно и без рывков.
Честно говоря я в принципе не уверен, что на андроиде можно достичь стабильных 60FPS, т.к. еще ни разу не видел игрухи в которой они были. Либо все залочено до 30-40 кадров, либо плавает в районе 50-60. Возможно это особенность андроида я хз. Я не нашел пока подробной информации по тому как устроен рендер на андроиде (да и не искал особо, т.к. не в приоритете)
-----
Это я все на своих устройствах тестировал.
И плюс еще я переписал весь код с GDScript'а на C#
Аноним 24/05/20 Вск 13:08:40 67235417
>>672349
Спасибо, скачаю бету попробую
Аноним 24/05/20 Вск 13:34:13 67236618
>>672354
>Спасибо, скачаю бету попробую
Только будь готов к небольшим багам. Ничего критичного, но при переходе со стабильной 3.2 пару раз пришлось в конфиг проекта руками залезть и поправить параметры вручную, чтобы убрать ворнинги.

>>672349
>И плюс еще я переписал весь код с GDScript'а на C#
Добавлю, что после месяца работы с C# хрен я теперь вернусь на GDScript. Надеюсь в будущем разрабы годота, откажутся от этого питухоноподобного языка и сделают решетки основным.
Аноним 24/05/20 Вск 13:42:15 67236819
>>672366
> Надеюсь в будущем разрабы годота, откажутся от этого питухоноподобного языка и сделают решетки основным.
И вот бы ещё компиляцию в нативный бинарник завезли бы, наподобие il2cpp.
Аноним 24/05/20 Вск 14:47:17 67238120
godot-aot.png (73Кб, 908x725)
908x725
>>672368
>If you want to use AOT, then you have to build the AOT Compiler yourself:
Тащем-та поддержка AOT в годоте уже есть, только не работает из коробки, надо самому компилятор собирать. Собственно это была одна из задач которую запросили Майкрософт, когда спонсировали чувака который поддержку C# в годот пилит. Я так понимаю сначала доделают экспорт на обмылки, а потом уже займутся плотно AOT-компиляцией.

Я все думаю как-нибудь собрать, только лень. Не горит и есть более интересные задачи.
Аноним 24/05/20 Вск 15:27:31 67239521
>>672381
Обоже! Изумительно!
Аноним 24/05/20 Вск 18:50:07 67244422
godot-2020-05-2[...].gif (720Кб, 506x300)
506x300
>>672349
>Количество drawcall-ов упало значительно, если без батчинга их было где-то 300-500 и более для одного тайлмапа, то с батчингом для той же карты получается менее 30.
Небольшое уточнение. Сейчас попробовал еще раз на этом же проекте.
При включенном батчинге приблизительно 30 дровколов.
Когда отключил батчинг, то получил где-то 2500 дровколов с небольшими проседаниями FPS. Сначала не мог понять, что за фигня, а потом допер. Я сделал себе анимированную текстурку воды спрайтом 32x32 и растягивал ее методом tile.
Получается когда батчинг включен, то она вся рисуется одним дровколом и все ок. При отключенном батчинге, на каждый участок этой текстуры будет отдельный вызов рисовки, т.к. она будет считаться не единой текстурой, а кучей отдельных спрайтов.
Вот как-то так. Юзайте бету с батчингом.
Аноним 24/05/20 Вск 22:17:19 67248323
1590347830738.mp4 (895Кб, 1280x720, 00:00:04)
1280x720
Аноним 25/05/20 Пнд 14:40:04 67259624
Аноним 26/05/20 Втр 16:42:08 67280425
1590500525324.png (331Кб, 726x520)
726x520
Как хуёво быть тупым.
Сделал зеркало по гайду: https://www.youtube.com/watch?v=xXUVP6sN-tQ
Но оно не показывает тени. Про тени в гайде ничего не говорят, а сам я не знаю как сделать.
А ещё я добавил обрезку виртуальной камере, чтобы зеркала не захватывали объекты позади себя:
> fake_cam.near = fake_cam.global_transform.origin.distance_to(global_transform.origin)
Однако есть один нюанс. Он отображён на пикче. Near рассчитан для центра поверхности и не учитывает углы.
А ещё я пытался поставить два зеркала друг против друга, чтобы увидеть эффект бесконечного туннеля, но увидел только хуй.
Неужели без рейтрейсинга не удастся сделоть игру мечты?
Памахити!
Аноним 26/05/20 Втр 16:45:04 67280626
>>672804
Анон ну какие зеркала тебе, это продвинутые техники которые даже в ааа играх не делают.
Аноним 26/05/20 Втр 16:51:31 67280827
1590501088242.png (256Кб, 657x524)
657x524
>>672806
Ну почему в 90х могли в зеркала, а щас продвинутые техники?
Я согласен на упрощённый шейдинг, ладно, но как насчёт переотражений?
Вот с этой точки должен быть виден бесконечный туннель. Но мы видим, что на втором переотражении эффект зеркала обрывается. Потому что нет никакого переотражения, ахаха (мем с бородой). Потому что зеркало это вьюпорт-текстура. Получается, мне нужно вручную рассчитывать ход лучей, то есть выполнить программный рейтрейсинг?
Переотражения нужны для геймплея.
Аноним 26/05/20 Втр 17:17:53 67281628
>>672808
Это в какой такой игре "в 90х" были зеркала?
Аноним 26/05/20 Втр 17:19:49 67281829
>>672808
Ну какие еще переотражения в 90-х, чел
Аноним 26/05/20 Втр 17:20:06 67281930
Аноним 26/05/20 Втр 17:23:42 67282131
>>672808
Так это вроде просто рекурсией делается. Просто рисуешь вьюпорт во вьюпорт.
Аноним 26/05/20 Втр 17:28:29 67282332
>>672819
А там точно зеркало, а не ещё одна комната с синхронно двигающимся персонажем за прозрачной стеной?
Аноним 26/05/20 Втр 17:33:57 67282633
>>672823
Бинго. И тем более никаких теней, даже в версии 2011 года.
Аноним 26/05/20 Втр 17:36:28 67282734
>>672819
Там просто копии комнат были в которых клон игрока бегает. Плюс там вообще все враги и гг спрайтами рисовались.
Аноним 26/05/20 Втр 17:41:48 67282835
Аноним 26/05/20 Втр 19:50:52 67288236
Пацаны, я в глаза долблюсь? Годот упорно игнорирует ноду Collider. Это буквально весь код. Там есть ещё пара функций, но они эту конструкцию никак не затрагивают, они про открытие-закрытие двери. В консоль говорит, что ноды Collider не существует; это если в редакторе крутить, а в игре сразу после запуска пытается сделать Set_Dir и вываливается. Если убрать tool, ничего не поменяется, просто в редакторе перестанет срать в консоль.
tool
extends AnimatedSprite
class_name door

onready var Collider = $Collider #это статикбоди, блокирующий проход
export(bool) var Open_To_the_left setget Set_Dir

func Set_Dir(dir: bool):
_ Open_To_The_Left = dir
_ flip_h = dir
_ if dir: Collider.position.x = 70 # пишет в консоли: Invalid get index 'position' (on base: 'Nil').
_ else: Collider.position.x = -70 # пишет в консоли: Invalid get index 'position' (on base: 'Nil').
Аноним 26/05/20 Втр 20:15:07 67288637
Аноним 26/05/20 Втр 21:02:53 67289438
Аноним 26/05/20 Втр 21:39:27 67290139
>>672882
Косяки капитализации букв здесь есть, но они возникли при переписывании текста для поста. В коде все имена верные, заглавные и строчные буквы на своих местах.
Аноним 26/05/20 Втр 22:29:36 67290440
>>672882
$Collider в дереве нод - ребенок твоего спрайта?
Аноним 26/05/20 Втр 23:13:35 67290641
>>672904
Кэп, ты?

В общем, проблема более-менее ясна. На момент срабатывания сетгета дети ещё не инициализированы. То же самое происходит в режиме редактора. Значит надо работать с ними уже после ready.
Как при этом их изменять (да хотя бы двигать) в режиме tool - чёт не понимаю.
Аноним 26/05/20 Втр 23:55:15 67291242
>>672906
Для тул-режима в гдскрипте есть специальные флаги. Не помню какие, гугли. В общем и целом логика такова:
иф тулмод:
_ код тулмода
ельз:
_ код рантайма
Аноним 27/05/20 Срд 00:49:58 67292243
>>672912
И как это поможет работать с не инициализировавшимися потомками?
Аноним 27/05/20 Срд 02:10:24 67293544
>>672894
Это такие нулевые, что ещё девяностые.
Аноним 27/05/20 Срд 14:00:40 67297545
>>672922
Если ты чего-то не понимаешь - иди в гугл и учи матчасть, пока не поймёшь. Мне за твоё образование твоя мамка не платила.
Аноним 27/05/20 Срд 14:04:36 67297746
>>672922
Никак, анон. Не слушай этого >>672975 дауна. Действительно, в годоте ready идет в прямом порядке, а не обратном.
Аноним 27/05/20 Срд 14:13:41 67298547
>>672977
Сам ты даун, пидрблять, шавка.
Аноним 27/05/20 Срд 16:17:27 67301648
>>672444
и вот эту мастхэв фигню они запихнут только в следующей версии? офигеть.. не ну я за развитие годо, но надеюсь подобные штуки будут в приоритете
Аноним 27/05/20 Срд 17:34:36 67303049
>>673016
Я сначала, собственно и дропнул годот из-за отсутствия батчинга, т.к. производительность по итогу была в жопе. Когда вышел 3.2.2 бета с батчингом, решил сделать второй заход. Пока полет нормальный.
Аноним 28/05/20 Чтв 01:16:12 67317850
>>672975
>прочитал вопрос жопой
>ответил тараканам в своей голове
>ТЫ НЕ ПОНИМАЕШЬ УЧИ МАТЧАСТЬ
Классика.

Тащемта решение нашлось. Вот это:
onready var foo = $foo
func bar():
print(foo)

выдаст null, если функция вызывается до готовности или в режиме tool. Зато вот это:
func bar():
print($foo)

работает всегда. Видимо, для большей стабильности в идеале надо делать как-то так:
var foo
func bar():
foo = $foo
if foo != null:
print(foo)

Это, с одной стороны, даст какую-то страховку от непредсказуемых ситуаций, а с другой всё же позволит работать в режиме tool и влиять на потомков до готовности.
И всё же я вот чего не понимаю. Если потомки всё же доступны, то почему в годот вшито требование, чтобы переменные, которые сразу принимают ссылку на них в качестве значения, были обязательно onready? Защита от "выстрела в ногу"? Потому что как-то костыльно приходится её обходить, когда это нужно.
Аноним 28/05/20 Чтв 01:43:47 67318051
>>673178
> И всё же я вот чего не понимаю.
Пиздец. Просто нахуй иди.
Аноним 28/05/20 Чтв 03:43:32 67318552
А у вас тут можно проги в трей сворачивать?
Аноним 28/05/20 Чтв 10:46:00 67319653
>>673185
Через сишарп только если. Мне через сишарп удавалось даже внешние окна выводить. Трей там тоже не проблема.
Аноним 28/05/20 Чтв 13:53:14 67320754
>>673178
>И всё же я вот чего не понимаю

И все же чекай мануалы:
>https://docs.godotengine.org/en/stable/getting_started/step_by_step/scripting.html
>The _ready() function is called when the node, and all its children, enters the active scene.

Если на пальцах, то _ready() выполняется только 1 раз когда ты открываешь сцену, либо когда кидаешь ноду со скриптом в текущую сцену.
Все остальное время _ready, а так же _enter_tree не выполняется.
Выходов у тебя несколько:
1) После каждого изменения tool скрипта, закрывать и открывать сцену (это еще лайтово, в версии 2 приходилось весь редактор перезагружать)
2) В tool скрипте где нибудь в _process, написать следующее:
_ if Engine.editor_hint:
_ _ if Input.is_action_pressed("ui_cancel"):
_ _ _ _ready()

и после каждого изменения скрипта и сохранения нажимешь Esc и у тебя будет напрямую вызываться функция _ready где переменные уже будут правильно инициализироваться (к сожалению подвесить можно только дефолтные ui action'ы, новые почему-то не цепляются)
3) Твой способ. Инициализировать их по факту по необходимости в _process
------
Народ в свое время уже просил в трекере сделать горячую перезагрузку tool скриптов, но видать до сих пор не сделали.
Аноним 28/05/20 Чтв 14:08:51 67320955
>>673207
О, спасибо, анон. Ты говорил не про то, чего я не понял, но случайно задел другой важный момент. Для меня было не вполне очевидно, когда именно вызывается ready в режиме редактора и когда обновляются ноды. И этого в мануалах как раз не уточняется. Про режим запуска всё понятно, но про режим tool там совсем скудно написано, не раскрываются такие вот важные детали. Я эту статейку уже почти наизусть выучил.
Аноним 28/05/20 Чтв 18:29:41 67323156
В прошлом треде я писал про отличный способ работы с лестницами. Он прекрасно работал до тех пор, пока я не попытался перейти с move_and_slide на move_and_slide_with_snap. Просто лестницы порождали неприятный эффект: персонаж с разгона подпрыгивал на них, как на трамплине. Но со снапом внезапно оказалось, что посреди лестницы (а то и в самом её верху) персонажа иногда выстреливает по направлению нормали поверхности. Это выстреливание происходит с одинаковой скоростью как на бегу, так и при движении медленным шагом; но срабатывает не всегда.
Проблема, похоже, уже людям встречалась, решения так и не нашли: https://github.com/godotengine/godot/issues/34098 - аноны костылили юпитерианскую гравитацию, чтобы обмануть баг.
Мой костыль: небольшие зоны, запрещающие движение вверх, если персонаж в воздухе и не нажат прыжок. Пришлось дополнительно добавить галку, чтобы разделить направление влево и вправо. Теперь у меня персонаж поднимается по лестницам нормально, а спускается как школьник, прыгая с верхней ступеньки.
Аноним 28/05/20 Чтв 20:52:40 67325357
godot-2020-05-2[...].gif (922Кб, 506x300)
506x300
>>673231
Хе-хе.
Я вот когда переходил на годот с движка в котором были пиксельные коллизии, сильно поразился насколько геморойно делается кинематика в движках с полигональными коллизиями (по сравнению с пикселями)
С учетом многодневного дрочева со всякими move_and_slide, with_snap, collision_shapes и т.д. Я уяснил для себя такую вещь:
Нахуй все виды коллижен шейпов, кроме AABB. Вот серьезно, все остальное вроде капсул, рейшепов и т.д. - говно без задач. Максимум что можно еще использовать это круг, для каких-нибудь мячиков, но и для них тоже часто можно использовать прямоугольник.
С дедовским прямоугольником большинство замороченных случаев решается легко и быстро. Для остального можно добавить рейкастов в нужных местах и поиграться со скоростями (old/current). Ну и естественно геометрию уровня нужно лепить продуманно, чтобы не было мест, неучтенных для кинематики.
------
(все вышенаписанное относится к 2Д, но сколько я не смотрел туториалов где пилили кинематику в 3Д, проблемы там часто те же самые и сдается мне, что решить их можно теми же способами)
-------
Аноним 28/05/20 Чтв 21:03:20 67325558
godot-2020-05-2[...].gif (1268Кб, 506x300)
506x300
>>673253
Забыл визуализатор скорости включить.
Настройки X
Ответить в тред X
15000 [S]
Макс объем: 40Mб, макс кол-во файлов: 4
Кликни/брось файл/ctrl-v
Стикеры X
Избранное / Топ тредов