Дано: импортируется моделька из блендера с материалом.
Она превращается в отдельную сцену. Я хочу скопировать эту модельку и просто изменить цвет с помощью изменения материала, чтобы у меня потом была гридмап с двумя разноцветными одинаковыми модельками. Но просто так мне не дает это сделать, поэтому логично нажать на первую коробку make unique, так? И меня вторую потом. Но если сделать make unique почему-то вес проекта возрастает ебейшим образом. Просто чудовищным, вплоть до того что все начинает тормозить.
Как без уникальности перекрасить модельку? Вроде как можно сохранить их как две разные модельки, но тогда они все равно хранятся раздельно и занимают место.
Как не занимать лишнее место и нормально перекрасить модельку чтобы потом промышленно добавлять модельки разных цветов с помощью гридмапа?
>>919762 Тяжелый проект же становится скорее всего потому что вершины мешей становятся из бинарных текстовыми массивами в tscn. Это как то можно решить, либо сохранять scn в бинарном виде, либо выносить меши в отдельные ресурсы.
>>919830 >Youtube >Male 95 Конечно, туториалы на ютубе смотрю я, а потом все подготавливаю и объясняю жене, она уже там уровни рисует. А по блендеру наоборот.
>>919857 > нет отговорок не делать свои игры Для настоящего прокрастинатора всегда найдётся отговорка. Ты только погляди, какие крутые фичи нам готовят в 4.3 https://www.youtube.com/watch?v=R-oJzCGFnak Надо только подождать.
Может кто то сможет подсказать в чём проблема и как поправить. Суть: Немного кирильствую, пилю игру мечты и т.д. Делал модельки и для каждой запекал текстуры отдельно. И понял, что как то дохрена килобайтов получается и надо оптимизировать. Стал переделывать на текстурный атлас. Есть модель бочки, для неё сделано 2 UV-карты. Одна натянута на область с цветом, вторая натянута на область с ржавчиной + альфой. И сделан шейдер, где это всё миксуется. В блендере вроде получается результат, но когда импортирую в Годо - получаю только ржавчину.
Годо 4.1 и 4.2 пробовал, Блендер 3.6 и 4.0 - результат одинаков. Импорт через GLTF. Такое вообще реально в Годо импортировать ? Делал кто то так?
>>919921 > В блендере вроде получается результат, но когда импортирую в Годо - получаю только ржавчину. У тебя в блендере применены все трансформы и скейлы?
>>919921 ааа.... Разглядел ьаки скрины. У тебя в блендере шейлер смешивает два куска текстуры. Ты стало быть наваяй в годоте аналогичный шейдер на нодах.
Спасибо за ответ! Ну в общем Годо не умеет такое импортировать ? Придётся почитать про шейдеры в годо, сходу тяжело, что то - не вышло сейчас собрать. А "Запекать" атлас не хочется - ну есть синяя бочка, есть ржавая синяя бочка, сильно ржавая синяя бочка, есть грязная синяя бочка, есть синяя бочка, которую снегом припорошило ..... а теперь ещё хочется красную, зелёную и чёрную добавить ... А ещё та же история с ящиками, машинами, домиками .... атлас разрастётся сильно очень.
Ещё нашёл на ютубе пример с Vertex Color и поверх этого текстуру ржавчины накладывать и UV только 1 нужна (но там только про блендер)... Попробую ещё так завтра, может Годо переварит.
Я могу как-нибудь "раскрыть" вектор3 в 3 позиционных аргумента? В питоне есть , которое делает именно это. Например если функция принимает аргументы a,b,c я мог бы передать ей func_name(Vector3(1,2,3))
>>919958 Ты опяьь путаешь шейдер и материал. Ты можешь создать несколько материалов с одним шейдером. Материал это и есть "переменная", структура в которой хранятся настройки для инстанса. (Если подумать, то где то же должна быть переменная для каждого инстанса) Шейдер при этом может быть один (его можно получить из встроенного материала нажав кнопку в инспекторе)
>>919959 Ну, я профайлер и дебаг смотрел, на каждый материал генерируется и компилируется индивидуальный шейдер. Т.е. в рамках годота два независимых материала, даже если в него подцеплен код одного и того же шейдера, порождают две шейдерных программы. Увы, но это так.
Кроме того, материал хранит параметры не инстанса, а всей группы инстансов, т.е. целиком батч. Если будешь, например, вызывать дровколы инстансов раздельно друг за другом, меняя между ними некоторые параметры, то оно будет все дружно игнорить это и в итоге отрисует все инстансы с последним изменением параметров материала. Дров колы в годоте это всего лишь некое отложенное задание, оно не рисует инстанс прямо сейчас, а ждёт, пока там весь твой код исполнится, а потом берет последние параметры материала и бахает с ними все отложенные дровколы инстансов. Это довольно сильно напрягает, ведь ситуация такая, что даже нельзя какой нибудь индекс в конкретный инстанс через униформу отправить, чтобы хоть в шейдере самом что нибудь поменять. Хочешь тыщу цветов - придется ебать видеокарту тыщей материалов и тыщей шейдерных программ (не смотря на то что скрипт шейдера ты прицепил один м тот же, повторяю).
Ну, в 4 можно годоте появились инстанс униформы, и то с лимитами типа до 16 униформ, и нельзя текстуру отправить конкретному инстансу, только простые униформы типа fp и т.п. Но его же вроде как до сих пор под мобилки не поиспользовать нормально...
>>919931 > не умеет такое импортировать ? Меня тоже это огорчило много лет назад, что оказывается, нельзя экспортировать внутреннюю кухню приложения. Только результат. (Но есть и исключения, но не в этом случае)
Годаны, а что происходит? Сворачиваю окно редактора, разворачиваю. Переключаюсь в браузер, потом обратно в редактор. Вижу пикрелейтед. Это только у меня или у всех?
Вместо того, чтобы миксовать два куска одной текстуры - использовал Vertex Color + текстуру, Работает вроде. Что ж попробовал собрать шейдер из нод - вроде получилось. Только выглядит, как то .... более "пластмассово" - это надо с освещением играть или что то в шейдере пробовать менять ?
>>920005 Это в твоем проекте или в пустом тоже? Версия, аддоны, тулскипты есть? Так то написано в чем ошибка и что надо делать. Есть моменты когда add child неаозможно сделать и его надо откладывать deferred на следующий кадр
>>920006 >>920015 Обрати внимание, у тебя в блендере по дефолту есть освещение, в годоте по умолчанию освещения вообще нет, базовый енвайронмент без настройки, и то, только во вьюпорте редактора. Без глобального освещения, которое следует добавлять в сцену отдельно.
>>920042 Баги разные бывают, не значит что шиндошс пора переустанавливать
Самый странный баг, или даже не баг а хуй знает что, что я встретил в своих проектах - мой системник скрипел, когда в моей игре закрывались/открывались StaticBody двери. Рили. Дверь открывается 0.25 секунды, и скрип 0.25 секунды. Всегда. Каждый раз. При желании я мог бы этим морзянку выбить. И нет, я не шиз. И нет, я на тот момент еще не добавил звуки. И да, это похоже на кратковременное завывание кулера видюхи.
>>920051 В этот момент происходит какой-нибудь рассчет коллижнов, и допустим сложный полигон оказывается внутри другого и обсчитывается какая-нибудь глубокая рекурсия.
>>919821 Вообще-то не совсем так. В верхней половине углы отрицательные, в нижней положительные. По крайней мере, функции типа Vector2.angle, Vector2.angle_to_point так работают. Надо взять деления с картинки и проделать: wrapf(value, -PI, PI) для радианной шкалы, wrapf(value, -180, 180) для градусной шкалы. Тогда будет верно.
В последний раз вкачусь сюда с этой бочкой, проблема со светом - оказалась проблемой с нормалями. В шейдере, нормали, вместо Normal, я в Normal Map засунул. И проблемы с тенями оттуда же. Мало ли пригодится кому. В общем поправил стало похоже на Blender по картинке. Можно теперь нормальные текстуры делать.
Сообщу вам что банально добавив тайпхинты в самый интенсивный кусок кода я выжал десяток дополнительных фпс. Реддит меня не наебал. Переписать на плюсах было бы лучше, но у меня лапки.
>>920182 Ну да, а у нас тут ещё и праздники, правда у них там в основном рождество только, но всё равно, команда-то разноплановая. Могут чисто затащить и первую-две альфа-бетки выпустить ещё в этом году. Минимум одну должны по идее.
Не знаю куда обратиться с вопросиком, но хотел бы поинтересоваться у ребят в теме: Сколько получает разраб с одного бокового баннера, видеоролика с наградой и всплывающей рекламы на Яндекс играх? Я это выясню в ближайшую неделю на практике, но хотелось бы почитать спойлер мнение бывалых игроделов, чтобы сопоставить свой и Ваш результат. По моим расчётам-догадкам за баннер сбоку платят от 0.02Руб за ячейку до 0.5Руб.
>>920475 Понятия не имею, владею цифрами только на западный трафик от нескольких лет назад. В РФ сейчас наверное плоховат с CPM. Погугли. Или пояндекси. А потом еще свое в тред отрепорть.
>>920518 Навскидку варианты. 1. Это какой нибудь сяоми который режет фепесы оптимизаторами. Как их отключать надо гуглить, не факт что это можно сделать из игры. 2. Может быть ты не все выставил? Там где-то есть то ли target_fps, то ли frame_delay. То ли force_fps. Force_fps = 0 подразумевает максимально возможный. 3. Нативная или браузерка? Браузеры любят лочить всинк. 4. Ты тестишь release или debug версию? 5. Возможно это реальная производительность данной игры на телефоне. 400 это не такой большой запас, всего то раз в 6 Это пустая сцена или там уже с эффектами, поотключай всякие. Или наоборот добавь раза в 2 моделей пока не начнет снижаться. 6. В одном месте прочитал что у чувака в 3-ке gles2 не лочит, а gles3 лочит, звучит странно конечно, может быть связано с дровами и п.1
>>920519 Дебаг версию. Бинарный билд, загруженный в телефон напрямую из годота. Я тоже начитался странных репортов. На юнити-форумах пишут что андроид не позволяет всинк выключить, но иногда позволяет если включишь обновление экрана в 120гц (мой телефон в него умеет, включил - все еще 60 фпс). Игровой режим включил - все еще 60. Глесы тоже перещелкал - без эффекта. Нашел варианты с рутованием телефона и выключением всинка в системных настройках - с этим заморачиваться влом.
В целом я уже получил нужное через мониторинговые функции годота и как ты сказал сцены с разной нагрузкой. Просто странно что андроид такой ебучий.
А стандартная физика в Godot 3 считается нормальной, с ней можно просто из коробки делать какие-нибудь игры, завязанные на физике? Или лучше не надо? Вопрос и про 2д и про 3д.
>>920527 В тройке в 3д по дефолту буллет. В 2д - годот физикс. Буллет более взрослый и стабильный, но на самом деле оба они говно, и если ты хочешь завязать основной геймплей на физику, аля портал, - лучше не стоит. А для пинания бочек/собачек подойдет.
>>920528 Нормальная физика, просто чтобы строить вокруг нее игру, надо добавить своих костылей, которых к любой физике стоит добавить. Например лимит скоростей линейной и вращения, два слоя статик боди в стенах для выталкивания, свои импульсы в интегрейт форс и тд
>>920533 Не нормальная. Открой гитхаб и пробегись по тегу физикс, там банальный стек из 10 ригидбоди друг в друга как говно проваливается. Половина из подобных багов с бородатых годов висит, а чел, который пытался это разгрести, был украден Рокстарами. Танцевать с костылями можно, но это не для нюфага развлечение, да и не для каждого не-ньюфага. Так что я просто жду джолт в дефолтной сборке.
>>920535 Не для нюфага, да. Ну так игры на физике и не для нюфагов. Про стек помню, там написано что для стека надо настройки подбирать отличаюшиеся от дефолтных
Понадобилось мне тут для своей пиксельной игрули сделать линию (line2d) так, чтобы она шла строго под 45 градусов, но при этом выглядела так же пиксельно, как и вся игра. Ну то есть, как путь слона на шахматной доске. Её нельзя было нарисовать в виде спрайта, потому что она должна была динамически изменять свою длину, типа это лазер.
Для начала я нарисовал текстуру 2x2, где верхний правый и нижний левый пиксели закрашены, а верхний левый и нижний правый - прозрачные. Задал эту текстуру линии. А дальше стал вертеть шейдер так и эдак. В итоге получилось вот что. >const float cos_45 = 0.707107; >const vec2 sqrt2 = vec2(1.41421); Это предварительно подсчитанные косинус 45 градусов (он же у этого угла синус) и корень из двух. Дальше в void fragment: >vec2 uv = vec2(cos_45 UV.x - cos_45 UV.y, cos_45 UV.x + cos_45 UV.y); Это школьная формула поворота вектора на определённый угол, легко гуглится. >uv = uv / sqrt2; Без этого на линии в ширину будет помещаться полтора пикселя. А надо ровно один, чтоб уголки точно на краях линии. >uv = uv + vec2(0.25); А без этого линия будет начинаться не с уголка пикселя, а с середины. >COLOR = texture(TEXTURE, uv); Ну и окрашиваем итоговую картинку согласно полученным координатам. А, и ещё ширину линии надо выставить 1.41421 - корень из двух. Результат - пикрилейтед. Идеально совпадает со всеми прочими пикселями во всей остальной игре. Ну, то есть, почти идеально, всё-таки у шейдеров есть некоторая погрешность при работе с отдельными пикселями, но это практически не заметно, если не приглядываться. Например, на пикриле есть небольшой косяк.
И часто вижу игры с хуевой графикой но на них накручены всякие спецэфекты типа теней и AO, и проц грузят как ебанутые Куча 2д игр которые лагают, фризят в отличие от какой нибудь мафии 2, гта са
>>920586 Никакой. У тебя хотелки оторванные от реальности. Флаппи берд лучше сделай.
>>920547 А почему обычная лайн2д не подошла? Она же тоже пикселизируется в соответствии с твоим разрешением. Или пиксели в этом лайне должны быть больше игровых пикселей?
>>920586 Конечно же используй ECS! Используй Flecs или EnTT, это будет основной движок игры и с ним придётся попердолится с си или с си++ и примитивными технологиями. На этот движок ты будешь подключать какую-то свою либу рендера, например bgfx или голый opengl/вулкан. Можно даже годот четвёртый взять на место рендера, если будешь проводить соответствующие низкоуровневые оптимизации и использовать только низкоуровневые функции.
>>920533 > два слоя статик боди в стенах для выталкивания Где об этом почитать? Я тут на днях размышлял, как сделать гарантированное выталкивание из стен при глитчах.
>>920588 >Конечно же используй ECS! Используй Flecs или EnTT, это будет основной движок игры и с ним придётся попердолится с си или с си++ и примитивными технологиями. На этот движок ты будешь подключать какую-то свою либу рендера, например bgfx или голый opengl/вулкан. Можно даже годот четвёртый взять на место рендера, если будешь проводить соответствующие низкоуровневые оптимизации и использовать только низкоуровневые функции.
>>920590 Какие запросы такие и ответы. Ты хочешь улучшить производительность батлы второй, а она не самая требовательная игра так-то. Чтобы улучшить нужно быть лучше EA, иметь меньше абстракций чем у ЕА, иметь больше низкоуровневого кода чем у ЕА. Не уверен что даже используя Flecs и EnTT сможешь этого добиться значительного прироста производительности, максимум 20-30. Улучшить производительность на 40 и более процентов понадобится свой ECS движок, переписывания множества функций на ASM, очень тщательная проработка каждой геометрий и материала на локациях, множество уловок и хаков.
Но это всё не так страшно как кажется. Особенно использование сторонник ECS движков и рендеров, это уж точно не страшнее использования таких движков как юнити и годот. Добиться своими силами увеличения производительности минимум на 20-30% ты точно сможешь без написания своего движка. Заодно интеллект себе забустишь, пока будешь в этом во всём разбираться.
>>920587 >Она же тоже пикселизируется в соответствии с твоим разрешением Нет. Она при любом увеличении выглядит гладкой, так как представляет собой (внутри движка) 3Д объект. Если графон типа Селесты, где пиксель игры занимает 8 реальных пикселей экрана, линия будет визуально выбиваться.
>>920598 У меня не выбивается. Размер игрового поля - 128х64, размер окна (test width/height) - 512х256. Получается 1 пиксель игры занимает 4 реальных.
>>920729 > возможность менять построения Построения - это массив точек. К игроку/(или к любому другому нужному тебе пивоту) крепится само построение. В смысле, логически крепится, тебе не надо наследоваться от ноды, если чо. Просто высчитываешь: var bot[1].destination = formation[1] + destination_pos Далее, как ты заметил из кода выше, боты организуются в пул (массив) равный по размеру формации. Лишние переключаются на другие задачи. У ботов свой собственный расчёт траектории движения по навмешу. И у этой траектории есть назначение. Если бот включён в построение, он должен получить сообщение об этом и свой индекс в построении. И дальше уже он сам всё сделает. В общем ничего сложного. Просто садишься и делаешь.
>>920914 Я хочу делать игры, но анончики отказываются мне бесплатно арт в тред выкладывать. А сам я в арт не умею. А анончики не умеют в код. Так и сидим.
>>920937 Я иногда выкладываю нейроарт, правда если много его могут потереть. Можешь еще в этом треде поискать >>917100 (OP) Что то конкретное трудно получить, это скорее лутбокс где может выпасть брильянт
Да ну, минималистичный арт делается легко. Не охуевайте главное, не пилите сложные анимации, лучше вообще не делайте анимаций. Никаких ног-рук - это самый геморрой. Посмотрите, например, на римворлд или на battle brothers - всем похуй что там конечностей нет. Лучше прокачайте стиль, формы и возьмите готовую цветовую палитру.
>>920992 Неиронично все так. Но и один шаг от кубов - уже вин, причем не трудный. Но почему-то все сразу уровень хотят фуллрига с анимацией, потом жопу себе рвут и дропают геймдев.
>>920999 Базовый фуллриг с анимацией это не сложно, скачать модельку и миксамо анимации и вставить в animtree занимает день, ну допстим неделю-две разобраться если совсем с нуля.
>>921006 >>921004 >>920999 Вы все неправильно подходите к созданию игры. Не с того вы начинаете. Поэтому у вам и игр нет до конца доделанных!
А тем временем в 4 версии появилась подсказка, с чего следует начинать делать игру: если добавить скрипт чарактербоди, то там будет одна интересная строка: var gravity = ProjectSettings("gravity") Вот это оно. Это намёк на то, с чего должен начинаться предпродакшен игоры мечты.
Пока ты не открыл спойлер с ответом, можешь проверить себя и предположить сам, что я имею ввиду?
Итак. Ответ на обороте: Этой строкой в шаблоне чарактербоди показывает нам, что до того как мы начнём писать основную логику игры, нам следует позаботиться об организации хранилища данных будущей игры, сделать его настолько удобным для себя, как вот этот вызов ProjectSettings() для Хуана. И в дальнейшем это хранилище прекрасно заменит собой все магические числа в будущих скриптах. Ты машинально будешь писать, например, var bullets_amount = MyDB.get("default_bullets_amount", 10) вместо var bullets_amount = 10
Как я понял бабло пойдет на фуллтайм девелоперов Годота и на коммерческую инфраструктуру вокруг, типа сонсолей. И нет, W4 Games это не Godot Foundation.
дабы потом их использовать, это сильно повлияет на производительность\длительность загрузки уровня? Или стоит заморочиться и написать такую логику, чтобы грузить сцены только по необходимости, а не все сразу?
>>921079 Возьми и сам проверь, ёпта. У тебя уже весь код на руках просто загрузи 100500 инстансов в лоад и замерь время, а потом 100500 инстансов в прилоад и тоже замерь время. >>921102 Это шарп же.
>>921141 Что это на превьюшке? Женщина? В пизду, не могу бабтй голос терпеть пиздец, и чуство такое блять отвратительное когда тебе что то баба расказывает
>>921138 Оф документация текстом, кроме шуток. Прям начинаешь и все по порядку читаешь начиная с вводных и туториалов. Доки к нодам тоже, там не все конечно обязательно, но в корневых типа node, node2d/node3d canvasitem, physicalbody и тд много ценной инфы.
Сделал такой вот код для рандомного спавна деревьев (координаты рандомные в скрипте сцены дерева) Все работает, но я вот нихуя не пойму что делает "instantiate()" ? И почему это не появляется в подсказке окошка автозаполнения? Я сначала подумал у меня такой функции вообще нет, хотя годот свежий
Вроде нейронка обьяснила так: Instantiate просто создает экземпляр сцены а вот его уже надо крепить корнями как вековой дуб к другим нодам функцией add_child
>>921228 Вангую, что ты просто боишься оставить двач в истории браузера, потому что комп не твой. Ничего страшного. Просто юзай приватные вкладки! Я на работке так капчую. В случае чего - хуяк и комп чист.
>>921270 Пусть все арии записывают регистрацию клика по себе в один общий массив, тогда ты из массива берёшь первый элемент. Первым пришёл - первым ушёл.
>>921287 Насколько я понял вопрошающего анона, у него нет доступа к поддереву дерева в котором у него арии. Иначе бы и вопроса не возникло. Просто берёшь парент всех арий и хватаешь первого чайлда по списку, который принял сигнал.
>>921291 Я как-то переводил одну книжку на русский, потому что книжка редкая и существует только на инглише. К середине книги я понял, that I has no need to translation anymore.
>>921270 Официально рекомендуемый способ: 1. Принимать инпут через _unhandled_input 2. Хандлить инпут через Viewport.set_input_as_handled() >>921228 >тред искать лень Ленивая жопа. Точто так же тебе лень делать нормальный скрин, да? Подсказка. Заскринил, переслал себе в телегу ("избранное"). А ещё есть KDEConnect, с ним файлы с компа на телефон перекидывать ещё проще. Зато у анончиков глазки не бо-бо.
>>921301 Тогда мы возвращаемся к моему первому совету. Клик будет сталкиваться с ариями в том порядке, в каком они попадутся клику на экране, и далее клик будет передаваться следующему элементу. Если все арии будут записывать себя в некий общий массив, то мы получим, что первый элемент массива, это именно первая встреченная нами нода из искомых. Задача решена.
>>921291 Технический английский простой - выучишь. И остальные выучат. Будучи студентом я переводил документацию к библиотекам, и скажу что перевод крайне неблагодарное дело, а быть переводчиком хуже чем быть червем-пидором.
>>921331 Я сам раньше был хейтером этого, но теперь в эпоху нейросетей-переводчиков нет ни одной причины не читать источники на английском сразу, если они более полные. Смысла там теряется при автопереводе ну максимум процентов 10-15%, а в технической литературе и то, скорее всего меньше. Перевод нужен только если есть самоцель сделать нормальный перевод, но это самоцель уровня выкопать ровную шахту, вроде бы здорово, но сил потратишь ебанись.
Вот уже месяца три в режиме чилла сижу и до сих пор кажется, что я не понимаю ничего. Нет, ноды, синтаксис и методы gdscript, интерфейс, настройки проекта, инспектор и прочее - всё вроде знакомо в какой-то степени. Платформер могу сделать. Top down ходилку могу сделать. Текстовую игру на менюшках может быть могу сделать. Но как делать игры? И зачем?
>>921393 >Но как делать игры? На этот вопрос получишь ответ когда выложишь с десяток законченных игр. Хотя бы на итч. И чтобы в них люди играли. >И зачем? Как зачем сука? У нас Годетта за такие вопросы убивает нахуй!
>>921423 > как делать игры? Вилкой. Садись и делай! Делай! > И зачем? Внутри нод уже лежит твоя игра мечты. Тебе нужно всего лишь как скульптору высечь из нод свою игру. Проявить её в реальность.
Всем сладкой ночи. Не могу в реализацию простой идеи: подключил вот этот плагин диалога в свою жрпг. https://www.youtube.com/watch?v=DL79aS-dT7E&list=PLWEX_DQyaQyyquh1NHU2onWyYUsfQCI_3&index=8 Однако, при перелистывании вариантов диалога кнопками персонаж тоже начинает двигаться. Пытался поставить на паузу, а диалог вывести отдельно — не получается почему-то, диалог тоже встает на паузу, хотя не должен. Пытался в шину событий, тоже не получается. Я даун или с плагином что-то не так? (Я даун) Помогите(
>>921455 А что в шине событий не получается? Насколько я понимаю дизайн твоей шины в том чтобы ловить нажатие кнопки и отправлять от нее сигнал персонажу когда двигается при стейте "движение" и отправлять сигнал "листать фразы" когда он получает от диалога "начало диалога"?
>>921455 Стейт-машины спешат на помощь! Заводишь список стейтов enum control_states { ingame, indialog } И заводишь отдельную стейтмашину только для того, чтобы переключаться между стейтами из этого списка. Как-то так. В такой примитивной реализации тебе весь код контроллера придётся обернуть в дополнительный иф. А чтобы этого не происходило (оборачивания в дополнительный иф на каждый чих) нужно во-первых делать нормальную стейтмашину со стейт-объектами. Во вторых, надо заранее проектировать игру, чтобы ты не стопорился на таких очевидных подводных камнях как это "добавил в игру диалоги и теперь половину игры переделывать".
Стейт-машина со стейт-объектами хороша тем, что в ней нет ни портянки ифов, ни матча, что аналогично по сути. В ней логика делегирована в стейты. Если ты ходишь, у тебя стейт "ходьба" и в нём реализован инпут ходьбы, анимация ходьбы и т.п. При нажатии на прыжок, контроллер переключается на стейт прыжка/падения. Если это всё грамотно реализовать, то добавление диалогов в такой контроллер было бы для тебя написанием простенького стейта-адаптера диалогового аддона.
var state := "idle" func handleInput(): if state == "idle": var moveDirection = Input.get_vector("left","right","up","down") velocity = moveDirection*speed elif state == "talk": stay()
Где stay это просто пустышка с пасс. Я не понимаю, где менять переменную, потому что внутри диалоговой системы он ее не видит. Пишу ее и в скрипте персонажа, и в скрипте левела и в глобале, ни фига
>>921466 Я тут решил набросать тебе пример стейтмашины на классах, но пока набрасывал, до меня дошло, что можно ещё круче и проще. Стейт-машина на замыканиях (они же лямбды, они же Callable). Тебе не придётся кучу классов создавать, а удобство такое же (минимум if-ов)
Принцип тот же, что я выше описал. Состояние машины - это одна определённая функция, которая вызывается в один момент времени. При смене стейта, меняется вызываемая функция. Это охуеть как удобно. Неважно, каким образом обеспечивать смену функции, классами или лямбдами. Главное суть.
>>921485 Норм. В годоте 4 глес2 вообще выкинули ибо устарел, так что все экспортят с глес3. Только макоебы в пролете, у них яббл багами кишит который год.
>>921485 Для 2д бери глес2, навскидку не припомню причин брать глес3. Вот в 3д другое дело там спецэффекты не все будут, террейн придется искать другие аддоны или писать свой и тд. Но для 3д и так видяха помощнее надо а там глес3 скорее всего уже есть, это только минус всякие некросмартфоны
>>921510 В 3д с глесом2 еще косяков хватает. Пришлось на глес3 переползти в одном проекте, потому что глес2 на мобилках освещение портил. Впрочем, поддержка опенгл 3 уже на приемлемом уровне -> >>920596
>>921608 Слева лайтмапы, справа новый реалтайм. Подозрительно хорошо выглядит, рефлекшн пробы не нужны, странно, что кроме хуанна и ко никто не реализовал это, всё какие-то рейтрейсинги. Юнити до сих пор лайтмапы совершенствует, отчеты пишет. Кстати, чую скоро аддончики этого хуановского рендера на ассетсторе появятся
Как работает Area3D в 4.2? Есть CSGBox3D (коллизии включены), который расположен внутри Area3D (слои/маски не менялись). В _physics_process() печатается наличие коллизий. Проблема в том, что Area3D не видит куб. В 3.5 точно такая же сцена работает, как ожидается.
Ещё одна проблема. В блендере создаю куб с длиной стороны 2м. Скейлю куб по оси Z в 0.5 раз. Экспортирую в годот в формате glb. Получаю get_aabb().size этого меша. Печатается (2, 2, 2), хотя ожидается (2, 1, 2).
>>921745 >Проблема в том, что Area3D не видит куб. Не видит каким механизмом? >>921745 В блендере трансформы применены? Но вообще да, странно что размер не тот в любом случае.
Применил трансформы - помогло, спасибо. Касательно Area3D - в _physics_process() печаетеся area.get_overlapping_bodies(). В 4.2 печатается пустой массив, то есть внутри области ничего нет, хотя там расположен CSGBox3D. В 3.5 схожая сцена печатает необходимый куб.
>>921800 С 4-кой помочь не смогу. Включи в дебаге рисование коллайдеров, убедись что они реально есть в пространстве. Посмотри слои коллайдеров, а так хз.
Поможет ли опыт в Godot разобраться в других движках, например в Defold или в Construct 3? Это не движкосрач, все движки имеют свои инструменты и особенности.
>>921965 Если говорить о констракте. Мы это обсуждали мноооого тредов назад. Можно сделать констракт-аддон. Кстати, на четвёрке это еще проще сделать. Либо аддон, либо заготовить констракт-стайл-сцены из которых потом складывать "ивентщиты".
>>922047 В основном ты платишь Сони/МС/Нинтендо за их закрытые СДК и ключи, а не Хуану. Но полагаю W4 и свой процент берет тоже. Интересный момент - по правилам W4 ты можешь купить 800-баксов тир и на выбранной платформе публиковать неограниченное количество игор
Появляется ахуенная идея для игры, уже мысленно пишешь скрипты на свои мега-механики, а на следущий день она уже кажется какой то хуетой Что делать с этим?
>>922140 >а на следущий день она уже кажется какой то хуетой Значит сразу была хуета >Что делать с этим? Придумать истинно годную идею. Накидывай много, через несколько дней смотри какая из них не кажется хуетой, ту и реализовывай
>>921687 >>921608 Короче Хуан чутка подправил, кажется, что перспективы у этого ги огромные, реально производительность отличная, даже отражения есть. Пока не без недостатков, протечки, пятна, но он клянется доработать
>>922363 Это ты жалуешься, что четвёрка тормозит? Я тут начал портировать сапёра (постил скрины ИТТ) с трёшки на четвёрку. Так вот. Функция заполнения тайлмапа 100 на 100 (10к тайлов) в трёшке выполнялась с неприятным нюху протормаживанием в несколько секунд, а в четверке аналогичное действие выполняется в пределах фрейма. Ну это так, к слову, насчёт скоростей.
Я не пойму никак, в чем разница между Baked Lightmap и GI Probe? Оба запекают свет. По документацию вижу что GI Probe только на GLES3 работает. В чем еще отличия? Кто из них умеет освещать динамичные объекты, например Rigid Body?
>>922418 Лайтмапы это как текстура, на производительность почти не влияет, но там недостатков много, солнце вращать нельзя, а ги пробы вроде воксельные, доки читай
Мне кажется, что я ненавижу делать игры. Я делаю игру и понимаю, что выходит хуита. Чем дальше в разработку - чем хуже себя чувствую. И это в годоте, где за тебя 75% уже сделано, сиди просто ноды расставляй.
>>922520 Все программы уже сделаны до вас, а те которые ещё не сделаны до вас, невозможно создать в одиночку на слабом домашнем ПК. Тут нужна команда специалистов и несколько квантовых суперкомпьютеров, вот тогда получится программа которую точно не создавали до тебя другие люди.
>>922526 > создать в одиночку на слабом домашнем ПК Вот мы и добрались до сути. Иди денег заработай на нормальный комп, и не ной тут. Курьером иди. Пробздись.
>>922534 Двачую. Ладно в вебе может быть еще (чтобы сервера на ноде поднимать и селениумы гонять с автотестами, да и то можно просто писать разметку и пушить на сервак для сборки), но вот например для сишечки вполне достаточно некроноута с блокнотом. И можно делать кучу полезного софта. Я например участвую в разработке компилятора нового языка, да много в чем можно поучаствовать, кроме каких то тяжелых нейронок.
>>922551 > Это другой человек. Это тот же человек. Та же персона. >>922572 Да как же делать игры теперь? Я не могу решить одну важнейшую задачу: допустим игрок вместе с боссом убивают друг друга. Как обрабатывать такой случай?
>>922586 С точки зрения программирования, так не бывает. Они обрабатываются по очереди. Даже если ты запихиваешь урон в стак, а потом применяешь. То потом при проверке у кого ноль, в этот момент меняется состояние игры. Получается что убить друг друга они могут только если ты специально запрограммируешь условие if p.hp==0 and e.hp==0. Потому что иначе, у тебя уже сработало условие if p.hp==0: win() а там может быть условие if alreadylose: return #fuckyou Если же с точки зрения гейм дизайна. Если игрок убил босса, босс уже не может убить игрока, у него нет способности делать атаки. Игрока может задавить тушка босса, но это другое. Его может убить тик урона ядом или выпущенная раньше боссом ракета. Но вообще тут зависит, можно и уничтожить все источники урона от поверженного врага. А можно не уничтожать, если тебе такое нравится. Видел в играх, когда после победы надо еще секунд 5 постоять выжить, чтобы засчиталось.
>>922418 Лайтмап - освещение и ги запечены в текстуру, один раз запек и используешь.
Пробка - стоит камера, которая смотрит в 6 направлений, и каждый кадр рендерит со своей позиции все вокруг в 6 текстур, которые потом объединяет в одну и выдает на объект, которому прописано.
>>922418 Забудь о них GI слишком тормозное пока, нужна ракета чтобы работало Запекание же сломано, хотя его несколько раз переписывали, оно так и не заработало увы. Можешь issue чекнуть
То есть народ и партия едины, отщепенцы, льющие воду на мельницу буржуазного империализма, будут наказаны по принципам революционной законности! Ура, товарищи! Вперёд, к диктатуре сойетариата!
>>923168 Союз партийцев и беспартийных в едином порыве решительно выступает не только против правых, но и против левых уклонистов!
>>923362 Можно. В среднекрупных играх без animationtree с блендингом не обойтись В мелких, мб тебе и не надо их объединять. Если например айдл анимация анимирует тело и голову как объекты, а эмоции отдельно анимируются прямо в объекте лицо
Представь 2Д топ даун карту, и на ней спрайтовые объекты, деревья там, дома, вот такое вот.
Игрок может стоять перед объектом, и тогда он рисуется поверх объекта. Игрок может стоять позади объекта, и тогда он рисуется позади, так что торчит только голова а тело скрыто.
Для этого я могу включить Y сортировку нод, но этот способ годится только для простых форм. Я хочу понять как мне сделать универсальное решение такой задачи, которое не зависит от формы объекта.
>>923487 Я делал довольно плотную на спрайты 2д топ даун. Решал такими хаками: слои, множественные Y-sort ноды, большие спрайты резал на спрайты поменьше, старался избегать диагональных спрайтов. Итог не идеален, но неплох. Как я понял результата лучше можно добиться только с помощью 2д внутри 3д.
>>923484 Подвох в том, что это не топдаун. Хотя 99% игроков назовут это топдауном, с точки зрения разработчика это более специфичная вешь, не имеющая общепринятого названия - oblique, 3/4 angle, frontal, изометрия повернутая на 45 и т.д. А классический топдаун - это Хотлайн Майами. А в oblique ты действительно получаешь некоторые проблемы, схожие с изометрическими проблемами. Конкретно в твоем случае, вроде бы, достаточно разрезать Г на два прямоугольника. Скорее всего, это можно делать автоматически, наверняка есть алгоритм находящий в полигоне прямоугольники (и точно для годота есть ассет. который строит по спрайту полигон).
>>923484 Делай как деды в SS13 завещали, забей хуй и делай стены в топдаун, персонажей во фронталке, обьекты в 3/4. Мозг игрока прожует и адаптируется.
Графика такого уровня это скорее символы чем именно картинка. Все детали игрок будет додумывать и фантазировать сам.
Надеюсь что здесь не объявится личинка, что пыталась завербовать меня в годотство.
В общем сап годач, такие вопросы есть: 1. Можно ли в годе отключить динамическое освещение, и запекать его в статику? 2. Насколько хорошо будет использовать движок с сижарпом? Есть подводные? 3. Анонче, обьясни в трех словах общий принцип работы годота.
>>923686 >Можно ли в годе отключить динамическое освещение Оно и не включено изначально (для этого надо добавлять ноды типа GI, directional light ит д Ambient light конечно есть >и запекать его в статику? С этим насколько я помню были проблемы. Один из вариантов - запечь его еще в блендере в текстуры комнат >Насколько хорошо будет использовать движок с сижарпом? Нормально, но честно говоря смысла в этом мало. Гдскрипт простой язык для быстрой разработки, для вещей потяжелей всегда можно скомпилить что то на с++. Подводные есть, навскидку что-то там с производительостью тысяч рейкастов, и экспорт веб версии не поддерживает многопоточность и гднатив, это может быть важно. >Анонче, обьясни в трех словах общий принцип работы годота. В плане? Устройство двжика описано в доках, гитхабе и т.д. Пиши конкретней. https://godotengine.org/article/godot-3-renderer-design-explained/ >личинка, завербовать, годотство. Какой то шизонабор слов, так себе ты зашел, лол.
>>923561 Обновился. Стало чуть стабильнее, хотя на моем некролинуксе иногда редактор все равно зависает. При обновлении вылезает много страшных предупреждений о смене внутренного формата мешей. Требуют запускать конверсию. У меня в тестовом проекте вроде сконвертировалось все без проблем, по крайней мере косяков сразу не заметно (миксамо риг бегает, прыгает, плавает как раньше, домики набегают). Но вы делайте бекапы. Какие то плагины надо обновить, zylann hterrain сыпал ошибками, но уже сделанный работал, скорее всего опять синтакс гдскрипта или апи где то меняли, и в редакторе или тулскрипте какой то тип не совпал.
>>923776 >не собирать самому из сорцов через github actions >>923772 Там просто тестовый проект в духе cursed pantsu с накиданными ассетами Вряд ли в ближайший год будет время им заниматься
>>923787 Щас бы на венде что-то из сорцов собирать. Не ну мы-то с тобой соберём, не вопрос, а вот простой игродел не будет пердолиться, ему ещё игры делать.
>>923790 Ну во первых на винде то собирается легко, надо только пререквизиты установить, а потом можно запускать батник Во-вторых я же написал >github actions Конечно тут можно сказать что майкрософт может подлить зондов, но тут или доверять (они и на венде и студией подлить могут), или хотя бы собрать из стабильной ветки и сравнить совпадет ли с официальным бидлом.
>>923795 > Во-вторых я же написал > >github actions А я сходил и посмотрел. Нихуя не понял, но создалось впечатление, что там какие-то уже собранные левые билды висят. О чем речь вообще? О какой сборке?
>>923802 > и собирать на серверах MS Ну, сборка движка не так уж и часто нужна, можно потерпеть и 15 минут на своей днищепеке. Но в целом идею я понял. Спасибо за разъяснение.
На awesome godot есть ссылка на следующий проект. Это, так понимаю, шаблон для ММОРПГ. Меня в нем смутило то, что разработчику пришлось форкать годот, для внесения изменений, я так понимаю. github.com/Relintai/broken_seals
Собственно говоря, вопрос: Чтобы сделать что-то более менее серьезное, придется форкать движ и ваять на плюсах?
>>923825 Если для тебя форкать движ и ваять на плюсах это что-то сложное, то в ММО лучше не соваться. Но нет, не обязательно. На реддите видел ммо-проекты на gdscript. Но все равно. Не суйся в ММО. Оно тебя сожрет.
>>923825 Да не смущайся ты, тут все свои. Во-первых, не путай форкать и компиляцию модулей. Форкать обычно подразумевает вносить изменения в ядро самой программы. Модули же расширяют движок, хоть и требуют перекомпиляции. Емнип у автора там два модуля, один для генерации биомов террена, второй для игровой логики типа ECS для заклинаний Для первого с++ разумно, там наверняка надо больше скорости для генерации вершин. А второе вряд ли, возможно у автора просто уже были наработки и он захотел использовать годот как рендер, хз. Я тоже потихоньку пишу рогалик где логика на плюсах. Но необходимости в этом нет, у меня просто есть на нее планы использовать в серваке, в обучении нейронки, в обфускации от хакиров и т.д
А можно как-то _снизить_ качество освещения? Добавить полосы как на скрине слева? Годо называет убирание полос debanding, а мне, получается, нужен banding. Ничего нагуглить не могу. Куда копать?
Аноны, есть один бэкграунд(TextureRect), на нем есть области(отмечены желто-зелеными овалами) на которые юзер может нажимать (после нажатия появляется меню). Как это лучше реализлвать? Сейчас я это сделать просто отдельными спрайтами и задумка в том, что после нажатия на экран я буду проверять точку нажатия и сравнивать с координатами доступных областей. Звучит как рабочая схема. Но вылезла проблема при скейлинге(пик.2), области не привязаны к бэку и тянутся отдельно. Куда копать для решения данной проблемы?
>>923844 > Но вылезла проблема при скейлинге(пик.2), области не привязаны к бэку и тянутся отдельно. > Куда копать для решения данной проблемы? Хранить актуальный скейл и умножать на него при обновлении позиций оверлейных контролов.
Вопрос о перформансе. Отсматриваю ролики по годоту в раздумьях, не столкнусь ли я с теми же проблемами. Статеры замечаю частые. Взять того же miziziziz с его трехмерной игрулькой. Она натурально тормозит. Что вообще может в годе оказывать влияние на перформанс? Там профайлер есть?
>>923846 Делай тогда кооп на одном экране, локальный кооп. Он легко делается и хорошую нишу имеет - всегда хоть немного, но востребован. Но и сетевой можно.
>>923877 Профайлер есть. На перформанс оказывает влияние нечтение документации, где описаны все подводные камни.
>>923844 Как уже сказали - пихай в контрол нод, контрол нод ставь в layout full rect. >я буду проверять точку нажатия и сравнивать с координатами доступных областей Что, вручную? Почему бы тогда не заменить спрайты на texturebutton, у которых есть эвент pressed? Сразу жизнь себе упростишь.
>>923878 Двачую. Весь ноябрь пересматривал стримы по дарксолсам (а мог бы игры делать, да) и частенько подмечал и статтеры и грузящиеся перед ебалом лоды. Но об этом никто не говорит, всем тупо похуй. Потому что типичный игрок в дарксолсы видит не статтеры, и не прогрузку лодов, а видит он Лотрик и Нью-Лондон, взмахи меча и тайминги отпрыга.
>>923844 Ну как тебе уже написали для этого и изобретены Control ноды Работают они в связке с настройками окна (которые 2d, keep aspect, вот эти) и масштабируются вместе с окном Но никто не мешает конечно и самому масштабировать Проверять координаты в любом случае зачем? Кроме контролов есть Area2D с событиями мыши.
SubViewport.canvas_cull_mask and CanvasItem.visibilty_layer exist and do exactly what one would expect. It is possible to attach a canvas to multiple viewports, either using the low level RenderingServer.viewport_attach_canvas or the high-level SubViewport.world_2d and CanvasItem.get_world_2d()
Получается что у 2д есть такие же визуал слои как у 3д, просто они не показаны в инспекторе.
Не могу придумать как в top down игре сделать так, чтобы главный герой мог "сталкиваться" с врагами (и герой и враги kinematicbody2d, в 4 версии вроде уже по другому называются, не суть), но при этом, если те его окружают, то он их спокойно "расталкивает" и убегает. Что-то типа того, что в vampire survivors реализовано. В данный момент, после того враги облепили персонажа, выпутаться из этого невозможно, как победить не понимаю.
>>923952 собственно говоря, если надо, чтобы противник отталкивался от персонажа, то:
детектишь коллизию на строне противника. через какой-нибудь триггер, в годо это вроде area называется прокладываешь вектор от персонажа к врагу, нормализуешь его, множаешь на силу отталкивания толкаешь врага через ригидбади,
еще не забываешь о кулдауне, через который противник снова сможет отскакивать от персонажа. правда это юзается в платформерах, когда перс получает демедж, но яхз может и в твоих вампирах есть чет подобное
>>923953 Что-то типа того, что обычно реализуют в платформерах, когда движение написано через массу, g и прочее? Пока не совсем понимаю как такое реализовать для top down игры, но посмотрю. А может вообще неправильно тебя понял.
>>923976 Для врагов написал логику, когда они бегут на персонажа, но при этом оббегают друг друга и препятствия с помощью Navigation Agent. Попробовал переписать передвижение врагов под Rigid Body, но они начинают хуярить вокруг персонажа как спутник по орбите. Поигравшись с параметрами смог только успокоить их немного, но "оббегание" друг-друга работать перестало. Тоже наверное поковыряюсь еще.
>>924027 Вроде звучит не так сложно, но знаю, что с реализацией поебусь знатно.
Вообще, всем спасибо, аноны, попробую что-нибудь соорудить.
>>924191 Угу уже начал делать, игра войдет в историю, осталось только выбрать джем в который ее вбросить, но там какие то унылые скучные на 1 января выпадают.
>>924354 Никогда не понимал, чем людей привлекают эти ваши джемы. Добровольный кранч, дабы высрать недоигру, в которую поиграют полтора человека. При этом уровень конкуренции выше, чем если просто зарелизить игру. И даже денежного вознаграждения зачастую не бывает. Какой смысл? Что этими людьми движет?
>>924366 Уровень внимания выше. Твою игру реально рассматривают и рейтят другие участники джема и организаторы. Позволяет нащупать годные идеи, потом довести их до ума вне джема и выпустить интересную игру. Многие успешные инди так начинались.
Качественный, подробный и масштабный фидбек получить довольно сложно. А он нужен. Без него ты не поймешь что тратишь 3 года на хуевую идею.
У меня до сих пор очко сжимается, когда я вспоминаю Tail Quest, на который было потрачено, чего там, лет 8. Он долго висел на главной Годота, про него там новости писали, его пиарили все, включая Хуана. Наконец он вышел в стиме, а там пук кек 27 отзывов 5 из 10 и гроб гроб кладбище. Тейл Квест - мой ночной кошмар, нахуй.
>>924383 >Уровень внимания выше. Не знаю как про другие конкурсы, но на двачном было ровно наоборот. Ты обязан поиграть в 30 чужих игр и писать отзыв, 95% из которых заведомо позорное говно. Заранее получается обесценивание. Там по началу еще что-то пытаешься разбираться, потом просто наотъебись скипаешь по-быстрому. Тем более фидбек от других недоразрабов или просто критиков вообще бесполезен. Я вспоминаю историю как Джоан Роулинг своего Гарри по издателям носила, казалось бы это специалисты которые обязаны из кучи мусора годноту выискивать, это их хлеб, но хуй там.
>>924366 >кранч Так дедлайны и стимулируют что-то сделать, сделать в срок и закончить. А без дедлайнов ты сидишь и мечатешь об играх ничего не делая. Кроме того, у тебя появляется опыт релиза игры, ты получаешь опыт всех шагов по сборке релиза, оформлению странички, базовым навыкам раскрутки, срочного QA, обкатки движка на разных сборках и пользователях (ты узнаешь кучу вещей которые нужно подпирать костылями, например делать размер фулскрина = screen_height + 1, чтобы работал видеозахват OBS у стримера). В общем это тренировочный запуск настоящей,хоть и маленькой игры. Про уровень конкуренции выше чем в стиме или гуглплее кекнул конечно.
>>924388 Что подчеркивает насколько сложно получить фидбек. Всем на все похуй. Джемы не панацея, конечно, но лучше чем повторить судьбу Тейл Квеста. Плюс есть устоявшиеся джемы с активной аудиторией, но там и ожидания от тебя повыше. Самый топ - быть популярным стримером/ютубером. Эти охуевшие скоты аж анкеты заставляют заполнять и раздумывают потом, пустить тебя демо погонять или нахуй послать.
Про двачной джем ничего не знаю. Помню только абу чего-то стримил. Ну, неудивительно, учитывая аморфность среднего анонаса. Да и мало кто захочет шкварить серьезный проект об харкач.
>>924366 На джемах отлично генерируются идеи. Вот miziziz участвовал в таком со своей игрой про однорукого бандита, и получилась неплохая по геймплею игра. Потом на нее снял обзор популярный летсплеер, и продажи пошли на ура.
>>924460 без понятия, не считал. Кратно больше, скорее всего. Только это не причина не ходить на джем - джем это возможность с контекстом, а не единственный способ что-то годное. Сравнивать числа генерируемых идет не получился.
Меня от разработки отталкивает мысль об поиске музыки и звуков, вообше непредставляю где их брать и искать А на заказ просить сделать у меня шекелей не хватит с днозарплатки
>>924482 На саундклауде есть тег роялти фри копирайт фри сс0. Заодно порадуешь какого-нибудь анона, который до тебя 2 прослушивания имел. А для звуков фрисаунд.орг.
>>924486 Сможешь. Я саунд для своей игры чисто на фрисаунде собрал, только менял питч прямо в годоте. Недели две набирал. Мне потом на реддите писали "охуенный эмбиент, брух", кек.
Но возможно ты хочешь не саунд, а отмазки для своей прокрастинации. Это другое дело.
>>924482 Пиши сам, хороший совет на деле. На ютубе есть гайды на простейшую теорию музыки, а в интернете куча бесплатных инструментов, отталкиваясь от неё и своей фантазии творишь прекрасное. Берёшь какой-нибудь рипер за 60 долларов ну или пиратишь флку или что ты там надумал, хз какую ты будешь брать программу, скачиваешь пару саундфонтов и синтов, и хуяришь. Так и живём.
хуевый совет как для инди. инде нужно делать игру, и чем скорее, тем лучше, пока он не заибался и не сдох. помимо музыки у него же еще и модельки, и анимации, и код, и геймдизайн, и левелдизайн. пускай готовое берет, или глянет во вконтакте соответствующие паблосы - там денег зачастую берут немного, а если нашел один такой паблик - то через функцию „найти похожее“ найдет и еще.
еще я слышал что у японских гномов задешево можно музыку с артом оформить - в пределах 100-400¥, но не проверял
>>924605 Хз, лично мне больше нравится самому писать, особенно если я понимаю, что хочу от музыки. Мне вот музыка со стороны плохо подходит, так что пишу сам.
>>924366 > Никогда не понимал, чем людей привлекают эти ваши качалки. Добровольный кранч, дабы выбросить в мыщцы молочную кислоту, которая рассосётся через полтора часа. При этом уровень тестостерона выше, чем если просто закинуться колёсами. И даже абонементы зачастую недешёвые. > Какой смысл? Что этими людьми движет?
Прошу ответить максимально честно и не давать ложных надежд. Я в курсе про языки программирования, основы, логические элементы, операции, водил черепашку на бейсике. Но никогда не мог в код, сколько не пытался вкатываться в с++ или питон мне это не даётся, слишком туп для этого. Зато дался визуал и 3д графика.
Собственно вопрос, смогу ли я чисто на GDscript полноценно создать весь нужный функционал в игре? Где отправная точка для старта? Мне нужно читать документацию? Любые уроки ютуба на годоте начинаются с того что ты либо уже должен знать код, либо просто копипастить куски у автора туториала.
Чисто в теории для начала вся моя игра будет состоять из трёх сцен: Меню и две локации между которыми игрок может перемещаться по клику на статичную модельку. Сам игрок управляет по сути фигуркой которую можно двигать по карте мышью. Из доп функционала это возможность сейва, и вывод диалогового окна при клике на интерактивный объект.
P.s. >>924637 Мне не очень хочется смотреть в сторону юнити поскольку я считаю что у меня достаточно простая игра которая по сути будет простой настольной игрой с текстом и карточками. Конструкторы для 2д тоже не подходят потому что хочется дать ощущение объема и пространства.
>>924637 Нихуя там сложного В документации все для дебилов разжевано Разве что надо будет немного поизучать тему "векторов" ибо на этом дохуя чего стоит
>>924637 Смотря насколько ты туп в коде. Иногда у людей мозги вообще не поворачиваются в эту сторону. У меня был знакомый который банальщину вроде if-else осилить не мог, долго и упорно не мог, хотя явно старался. Если ты такой же - возможно тебе лучше не годот, а что-то с визуальным языком. ЕМНИП у GameMaker и GDevelop они неплохи. И то не факт что они тебя спасут. Может тебе лучше работать в команде с кодером?
Но если ты действительно черепашку на бейсике писал, и понял как она работает - не вижу проблем. Пройди официальный туториал годота, там где крипов делать. Поможет освоиться. Потом найди на ютубе туториал поближе к своей идее и вперед. Но, сука, не бездумно копируй, а лезь в документацию и читай что делает каждая строчка.
>>924637 > Но никогда не мог в код > дался визуал и 3д графика. Ну ты ж конструируешь шейдеры в блендере на нодах? Это же такой же кодинг, просто тебе надо это осознать. >>924638 > P.s. Мне не очень хочется смотреть в сторону юнити Ему видите ли не даётся кодинг на примитивном гдскрипте, но он видите-ли угрожает нам, что не будет поглядывать на более комплексный сишарп. Блять, жирняка покормил.
>>924641 Могу составлять логику в виде блок схем, но не могу перевести это на язык программирования потому что попросту не знаю синтаксис. Максимум что я делал это правил чужие скрипты в свитках
Так ну нет, все, годот это топ. Там ещё и система партиклей как в юнити без заморочек, и шейдер граф есть. Сейвы тоже не сказать что трудно реализуются
>>923952 Если кому-то не похуй, зачатки своего корявенького решения нашел на форуме godot, в вопросе "как одним кинематиком двигать другой кинематик".
Код на шарпе на пике, в gdscript еще проще, что-то типа: if (collision) collision.Collider.MoveAndSlide(Velocity);
Естественно, это еще нужно доработать, как минимум определять, что это за коллайдер такой и надо-ли его двигать вообще. Плюс поиграть с вектором, т.к. тупое толкание врага в том же направление, что и движется персонаж, выглядит странно. Ну и врагам что-то подобное надо писать, т.к. если они окружают игрока в два слоя, то уже так красиво не работает.. Короче, колхозить еще и колхозить.
>>924762 Имей в виду что move and collide не скользит вдоль стен, как move and slide, т.ч. тебе придется писать такую логику самому Я бы наверное такую логику на ригидах делао, с использованием >>909798 →
Сап анон. В проганье не шарю от слова совсем, но хочется научиться Lua. Да да, вы тут дохуя прогеры знаете всякие языки поэтому для вас фраза "Научиться луа" звучит как какое-то говно, но не для меня. Приличных материалов по этому языку пиздец мало, все делают своё говно то в обосранном гарис мод, то в обдристанном самп. Решил что буду брать по-немногу от всего и использовать это как-то в Godot. В общем я скачал и установил это https://github.com/gilzoide/godot-lua-pluginscript И собственно первый вопрос который бы я хотел задать: а где библиотека функций или еще чего-то? Ну или как эта хуйня называется, где ты открываешь каталог, ищешь нужную функцию и вписываешь ее в скрипт?
>>925056 > Не бейте сильно Да ну ты что? У нас тред любви и поддержки. Мы тебя любя ВЫЕБЕМ ПРЯМО В МОСК. > И собственно первый вопрос который бы я хотел задать: а где библиотека функций или еще чего-то? Вот здесь, например https://docs.godotengine.org/ru/4.x/index.html > ищешь нужную функцию и вписываешь ее в скрипт > В проганье не шарю от слова совсем Ты мне не поверишь, конечно сейчас, но я тебе скажу, не зная программирования, ты не сможешь узнать, какая функция тебе нужна, чтобы вставить. > Приличных материалов по этому языку пиздец мало Ну что же ты пиздишь, анончик? https://www.lua.org/manual/5.4/ > я скачал и установил это > Ещё нашел вот это Погоди, давай ещё раз уточним. Ты вообще не шаришь в кодинге, и вместо того, чтобы учить кодинг лезешь в геймдев, который считается вершиной айти? В котором самая простая игра сложнее самых сложных КРУДов ентерпрайза? И вместо того, чтобы пользоваться встроенными языковыми средствами годота, ты тянешь туда сторонние языки? Не зная ни одного языка? Ну и как тебя всерьёз воспринимать? Толстота же. Ну или шиза.
>>925064 >Ты мне не поверишь, конечно сейчас, но я тебе скажу, не зная программирования, ты не сможешь узнать, какая функция тебе нужна, чтобы вставить. Ичо =) ичо нахуй=)))))))))))) >>925064 >Ну что же ты пиздишь, анончик? Это всё для нормисов 100IQ+ >>925064 >Ты вообще не шаришь в кодинге, и вместо того, чтобы учить кодинг лезешь в геймдев, который считается вершиной айти? Схуяли считаю? Я пытался прогать на луа ещё давно, нихуя не выходило из-за отсутствия нормальных материалов обучающих. В каких-то роликах чел нормально объясняет, в каких-то совсем неочень, из-за этого собирать полную картину по этому языку довольно трудно. >>925064 >И вместо того, чтобы пользоваться встроенными языковыми средствами годота, ты тянешь туда сторонние языки? Потому что встроенный высер годота это хуйня полная. По ней ещё меньше обучающих материалов. А если ты про си шарп или еще чето, то блять, ну я хуй знает, ну иди пожуй травы там, или пососи хуй отчима, может догадаешься, что Lua я рассматриваю как самый простейший ЯП из живых. Офк я мог бы вкатиться в роблокс студио с такими запросами, но это я оставлю на потом. Пока что я получил буст энтузиазма изучать луа на годоте, через неделю, когда я в очередной раз убеждусь что это душная хуетень, я наверное ливну и вернусь через год-два, но сейчас я хочу узнать ответы на вопросы.
Так что я просто хочу услышать ответы на вопросы без высеров в стиле русских форумов 2012(а зачем вам хуй в жопе????? А У ВАС ДЕНЬГИ ТО НА НИГО ЕСТ?!?!?!!? А МОЖЕТ ЛУЧШЕ БУТЫЛКУ В ЖОПУ БУДЕТЕ ИСПОЛЬЗОВАТЬ?????????)
>>925068 В очередной раз убеждаюсь что тематика умерла, мда, хех.
Зашел просто задал вопросы, в ответ предъявы, обвинения, осуждения. Я сюда 2 раз в жизни захожу просто узнать ответы, где ты тут увидел движкосрач, уебище ты тупоголовое нахуй.
>>925056 Бери лучше https://love2d.org/ К нему есть неплохие туториалы, на гитхабе полно библиотек на все случаи жизни, активное комьюнити в дискорде. Сам в этом году успешно вкатился с нуля мимо
>>925069 Какая разница сколько раз ты заходишь, если ты развел движкосрач? Учи встроенеый язык, гдскрипт легчайший язык, по нему тонна обучающих материалов, луа недоязык который никому неинтересен, разбирайся с ним сам если тебе интересно, но это нерелевантно треду
>>925066 >нихуя не выходило из-за отсутствия нормальных материалов обучающих. В каких-то роликах чел нормально объясняет, в каких-то совсем неочень, из-за этого собирать полную картину по этому языку довольно трудно. Поиграл с твоего смешного поста, но вот этот момент все объясняет >В каких-то роликах чел Для обучения языкам программирования никакие ролики не нужны, и даже противопоказаны. Вся "полная картина" языка содержится в официальной документации к языку, обычно там же есть и вводная глава.
>>925069 Тебе все верно ответили, шизло. Ты залетел с нулем знаний, но уже с "железными аргументами" почему Х - говно, и его ты учить не будешь, а будешь учить только Y, который по факту никто не использует, а тебе давайте, обучайте меня. Твои аргументы - инвалид, но тебе это даже хуй объяснишь, потому что ты сам инвалид. Ну и чего с тобой делать?
>через неделю, когда я в очередной раз убеждусь что это душная хуетень, я наверное ливну Все всё побросали побежали спасать очередного дауненка с дефицитом внимания. Заспидрань свою новогоднюю мотивацию с недели до пары часов, и сразу приди к похмельному финалу.
>>925064 >В котором самая простая игра сложнее самых сложных КРУДов ентерпрайза?
Я другой анон, погодите, это реально? Ты хочешь сказать, что простая игра на Годоте типо тех же подпивасных клонов вампир сурвайворов или платформеров технически сложнее, чем то, чем занимаются в коммерческой работе? Я всегда думал что наоборот, в редакторе и с гдскриптом любой гоблин соберет простенькую игру, может даже не очень простенькую, а писать бекэнд на питоне условном могут только гении-олимпиадники, которые мыслят архитектурой и прочее.
>>925154 Все правильно он написал. После кучи лет работы в вебдеве могу подтвердить, игры гораздо сложнее, комплекснее, требуют опыта в дохуище дисциплин, и все это должно работать вместе, слажено, стильно и в реалтайме с 60+ фпс. Это не формы тяп-ляп.
>>925172 То значит что ты не даун-аутист, и шансы выше чем у среднего вкатуна из б. Остальное зависит от конкретных скиллов, а они не всегда пересекаются между областями айти.
Если у тебя есть некие заблуждения про геймдев, вебдев или любое другое айти, самый верный способ их развеять - написать код самому. Туториал по питону и джанге проходится примерно за столько же времени, что и годотовый. Результат и там и там - законченный мини-проект. Сходи и сравни.
>>925154 >Ты хочешь сказать, что простая игра на Годоте типо тех же подпивасных клонов вампир сурвайворов или платформеров технически сложнее, чем то, чем занимаются в коммерческой работе? Литерали да. Вебмакакинг проще чем ты думаешь. И платят больше кстати, ну где как.
Вообще мне кажется это индивидуально. Я вот 15 лет профессионально в геймдеве, а к вебу сколько раз подступался, ни разу не вкатился. Архитектура вечно непривычная, инструменты жуткие, раздутые. К тому же в геймдеве огромную часть может скрывать объектная модель. Ну серьезно, например в вершины моделей лазить приходится очень редко, при какой-нибудь генерации или хитрой анимации, а после того как сделал, обычно это инкапсулировано и забыл. В остальное время просто двигаешь объекты. В вебе же буквально любой чих сразу начинает требовать чуть ли не вручную прописывать тонны css чтобы работало, в основных 3-4 браузерах все равно все поедет, при этом надо лазить в бд по кд, еще бороться со всякими хакерами, смотреть чтобы авторизация и аутентификация правильно работала, чтобы по ссылке для чтения не удалялись аккаунты и данные, а главное, чужие аккаунты. Брр. Пытался один сервис игровой сделать, сколько же крови попортила простая попытка создать новый проект, со всеми этими вебпаками и нодежсами.
>>925154 >>925250 Хуй знает. По мне так веб вообще мало похож на программирование как таковое. Причем бэкенд еще меньше чем фронтенд, хотя обычно считается наоборот.
Анончики, поясните за доку для шарп версии. Хотел задать пресет контрола из кода, дока говорит что это делается через set_anchors_preset(Control.PRESET_FULL_RECT) в ГДСкрипте. Тут вопросов нет. Вопрос возникает какого хрена в шарп версии совершенно другая переменная: SetAnchorsPreset(Control.LayoutPreset.FullRect); про которую в доке ни слова? Есть где-нибудь таблицы соответствия или надо всегда гуглить, в надежде что кто-то уже задался таким вопросом?
>>925250 >Я вот 15 лет профессионально в геймдеве Расскажи как вкотился и хоть примерно на каких условиях работаешь. А то я уже года два работаю на мелких кабанов с мемными проектами говна и думаю, куда мне дальше.
>>925268 В доках по другому написано, void set_anchors_preset ( LayoutPreset preset, bool keep_margins=false ) Может быть дело в том, что enum находится в Control? Лень разбираться.
>>925286 Так уже реализовано https://www.youtube.com/watch?v=3GzGq-__CxM Не забывай что игрок все равно сможет смотреть только в 3д (через 2д экран), для 3д существа 4д объект выглядит как изменение 3д объектов (иногда довольно произвольное). Проще всего это можно понять на примере 3д объекта глазами 2д существа - для него это будет просто из ниоткуда появляющиеся и меняющие форму 2д объекты, например как при прохождении пальцев овал вдруг расширился и распался на 5 кругов.
>>925303 Хз, не могу найти. По 3-ке был чей то сторонний сайт с апи. Вообще C# API создается во время компиляции на основе api.json, я давно в этом копался. Может быть где-то есть правило типа регекспа, которое вырезает повторяющуюся часть названия, если оно такое же (...Preset.PRESET...) Если собирать движок самому, то там где-то создается папочка GodotSharp/Generated, ну или смотреть уже dll всякими инспекторами.
>>925322 Сложно сказать, это какой то готовый контроллер или туториал? Во-1, проверь в свойствах проекта, в input map, что у тебя есть действие shoot_Main и написано именно так и ему назначена кнопка Во-2, RayCast должен с чем-то столкнуться. То есть у цели должен быть коллайдер, они с рейкастом должны быть в одном слое. Если там просто текстура стены то ничего не произойдет. Может быть еще что то, но пока это проверь.
>>925333 А коллижн шейпы не считаются за то что может хитнуть рейкаст? Или просто огромный мэш который собственно и является уровнем, например, тоже не считается тем что может хитнуть луч?
>>925335 >коллижн шейпы Считаются, но они должны быть поддетьми StaticBody или какого-то другого body (Character) >просто огромный мэш Сам по себе меш нет, если только ты для него не сделаешь коллайдер (в годоте есть пункт меню Mesh с разными вариантами) Ну вообще считается что огромный меш лучше не делать коллайдером, потому что тогда рейкаст может тормозить (ему надо перебрать все возможные грани и пересечения)
>>925293 4д существо видело бы полную развёртку 3д существ вместе со всеми потрохами, вместе со всем содержимым кишок и сосудов. Эдакий взгляд изнутри.
>>925320 > чтобы при старте сцены в лейбле обновлялось количество патронов в магазине, которое в свою очередь при старте сцены считается? А теперь внимание, правильный ответ. 1 (в лоб): обновлять значение в сеттере, сделать сеттер внутреннему числовому значению в котором будет торчать ссылка на интерфейсную ноду. 2 (солидное): Сделать сеттер внутреннему значению, в нём испускать сигнал значение_апдейт(значение), интерфейсом подписаться на сигнал.
Хотя наверное все эти игры про 4д пространство ограничены тем что мы не можем смоделировать объект в четырехмерном пространстве, а все остальное будет примитивами которые можно будет увидеть только в разрезе.
В таком случае может быть есть игра где играются с 2д переходящим в 3д либо наоборот? Нечто похожее на суперлиминал
Привет анончики, посмотрел пару ваших тредов... А вы что-то кроме 2д пиксель говна делаете? Годен ли движок для чего то кроме изучения основ программирования для начальных классов?
>>925491 Все делаем. Иронично, но как раз пиксельной игры я еще не делал, в основном 3д, некоторые с замашкой на опенворлд, но иногда и 2д в обычном арте делал. Годен для практически всех жанров, кроме прям совсем ААА игр (но для соло разработки это и не имеет значения).
>>925492 > кроме прям совсем ААА игр Да и тут я бы посомневался. Если бы какая-то гипотетическая студия не экономила на кодерах-сишниках, они бы могли, юзая исходники годота, запилить свой внутренний корпоративный форк с реализацией любых проприетарных штук, типа физики havok (правда нахуй она не нужна в 2к24), рейтрейсинга, и т.п.
Ведь крупные студии предпочитают анрил/юнити не потому что они "лучше", а потому что там кодеры-системщики вынесены в аутсорц, ты получаешь готовое ядро продукта с техподдержкой и гарантиями. Маркетологам гораздо проще посчитать расходы в таком раскладе. Чисто бизнес, никакой технологии.
Я уот планирую сделать карточную игру в 3д. Но не такую какую обычно вы себе представляете, а с сюжетом и одним материком. Естественно есть небольшой подвох, графика на самих карточках будет отрисована вручную. Как и на диалогах/встречах
Проблема пока в реализации боевой системы. Потому что по моей задумке она должна быть ближе к кингс баунти. Но вместо отрядов у меня будет активная колода
>>925500 Я говорил в рамках того что можно делать изкоробки (грубо говоря, на движке, даже если с использованием аддонов, шейдеров и т.д, но не переписывая сами кишочки на с++) Плюс был официальный пост Хуана на этот счет.
>>925562 > Я говорил в рамках того что можно делать изкоробки Да я это понял. А я напротив говорил о том, что при крупномасштабной разработке (пресловутое ААА) не обойтись без исходников и их правок вручную.
>>924844 Благодарю. С группами еще особо работать не приходилось, т.к. в самом начале пути, обязательно посмотрю как там что
>>924851 И тебе спасибо. У меня top down, скольжение вдоль стен не особо нужно. Но об этой разнице между методами я тоже почитаю. С риджидами там у меня не пошло дело, ибо >>924080
>>925573 > обязательно посмотрю как там что > С группами В документации об этом не говорится, но попробуй работать с группами как с контрактом: добавление в группу гарантирует наличие свойств и методов, предоставляемых контрактом группы.
Вопрос по внешним либам. Можно ли как-то в проект импортировать готовые библиотеки, типа .so, которые я напишу на другом языке? Или без пересборки всей ide никак?
В чём суть? Знаю go, в планах на нём описывать тяжёлую логику, добавлять в проект. Думал можно прямо в проект импортировать, но не нахожу. Чёт лениво пересобирать ради своих модулей godot каждый раз. Ну и от плюсов отвык как-то.
>>925589 Можно, gdextension 4 / gdnative 3 Я описывал как я делаю с плюсами. У меня есть либа (so/dll) игровой логики, она ничего не знает о годоте, и есть либа (so/dll) враппер, которая знает о годоте и выглядит для него как скрипт и может вызываться из гдскрипта, в свою очередь дергает нужные функции мира в игровой либе. Гуй на гдскрипте.
>>925879 Блять! Бляяяяяять! У меня уже скрипты ... Бляяяять сукааа.
Ищу погроммиста на годоте
Аноним05/01/24 Птн 13:27:45№925912460
Хочу сделать простую игрушку десижн мейкинг стратеджи на большой карте, с элементами визуальной новеллы (типо six ages lights going out, игр Kremlin Games или Long Live the Queen) . Есть художник и потенциальный композитор, если кто шарит в движке или уже игрушки разрабатывал пишите в телегу urukay13 . Если никого не найду буду сам изучать, просто это дольше получится.
>>925911 Ой да там 15 минут делов, скрипты на спрайт переделать. Сделай один раз и кайфуй.
В темы нужно лезть когда нужен комплексный подход к "темированию", типа, когда нужна система псвдоокон для эрпогэ. Тогда темы рулят. В остальных случаях ебашь без задней мысли всё на спрайтах вложенных друг в друга.
>>925962 А хули тут еще посоветовать? Открываешь файл и записываешь в него все переменные, которые хочешь. Что может тут быть непонятного? Задавай вопрос конкретнее.
>>925975 У меня годот фактически только для графики, вся логика на шарпе, затык начинается когда я думаю как сохранять отношение объектов, в которых есть ссылки на объекты.
>>926005 Оно же не совсем про то, а про сцены. У меня на сценах только спрайты, с ними вроде как всё очевидно. Давай приведу пример. У меня есть зелье в инвентаре. У него есть общее для всех предметов в инвентаре свойство "в кармашке у", которое ссылается на персонажа, у которого оно собсно в кармашке. Конечно можно пойти по лёгкому пути и смотреть от обратного, мол вот список предметов у персонажа, они все типовые, при загрузке создаём их объекты с нуля, но мне хочется подход, который сработает и для нетиповых объектов, типа "труп белого орка по имени Патрик, с ранами в районе живота, и отсутствующей ногой"
>>926009 >У меня на сценах только спрайты А остальное где, если не в сценах? Ты можешь сохранить сцену всего инвентаря, например, со всеми зельями, рекурсивно. Даже если она создана динамично из кода. И орка. И всю игру. Я у себя всю игру так сохраняю. Но тут есть тонкости. Во-первых ты должен проставить owner'ов, про это в доках к пакедсцене есть. Во-вторых, если ты хочешь чтобы сохранилась переменная, определенная в скрипте, эта переменная должна быть объявлена с export var ..., по крайней мере так было в тройке.
Никаких других хитрых хаков про сохранения я не знаю. Все остальное - долгая муторная ручная работа. Но можешь в ассет сторе поискать готовые решения. Я как-то разбирался с thoth, он был неплох.
>>926001 Подозреваю что в 99% случаев именно ссылки на конкретные объекты сохранять не нужно Есть разные стратегии, я бы рассмотрел по порядку возрастания сложности 1. Не сохранять ничего, кроме чекпоинтов/номера текущего уровня. Довольно ограниченно. 2. В случае например инвентаря, может быть достаточно количественного или бинарного состояния. Тебе неважно что это ссылка на объект гибочки, главное что их 99. И что подобран синий ключ. 3. В каких то более сложных случаях, например дерева объектов, должен работать просто словарь значений. Опять же неважно что за объект колес машины, важно только что куплены два зимних и два летних, а в данных о колесах может указываться, что они проапгрейжены украшениями со светодиодами. 4. Еще более сложные случаи могут решаться уникальными ID объектов. Сложно придумать пример, ну пусть будет цепочка что "Город1" производит танк, "Город2" производит ракету, и у обоих есть правило "отправить построенный юнит в Город3", тут важно что это один и тот же город. В целом при десереализации во время загрузки, твой код должен инстанциировать нужные объекты, добавлять их в нужные части дерева, в т.ч. сцены, подписывать на нужные события, ну и вот таким образом подставлять везде ссылки - в Город1 ссылку на Город3 в нужной команде.
>>926009 >У него есть общее для всех предметов в инвентаре свойство "в кармашке у", Никогда не слышал о таком дизайне. Но ничто не мешает динамически добавлять предмету такое свойство, когда его добавляют в инвентарь >"труп белого орка по имени Патрик, с ранами в районе живота, и отсутствующей ногой" Не понятно в чем тут сложность и где тут собственно ссылки. { type: corpse, name: Patrick, creature: white_orc, wounds: [stomach], legs: { left }}
>>926020 Да, я тоже думал о варианте три, присваивать айди объекту при сериализации и выставлять нормальную ссылку при десериализации. >>926022 Так я не уверен именно в сохранениях, я уже добавляю такое свойство. > где тут собственно ссылки Я имел ввиду, что этот труп в инвентаре должен быть трупом исторической личности, а не генерик трупом орка.
>>926001 > сохранять отношение объектов, в которых есть ссылки на объекты Это всё не нужно делать. Это только навредит. Когда у серьёзных студий в их обновлениях игор отваливаются сохранения - это как раз из-за того, что они в файл сохранений записывали сложные многоуровневые игровые состояния.
Самый бестпрактис для сохранений: сохранять ассоциативный список ключ-значение, то есть, словарь. Этот словарь у тебя должен висеть в памяти, созданный статическим конструктором, всё время существования игровой сессии. Это одна из редчайших ситуаций, когда синглтон - не является антипаттерном. Ключи - уникальные для каждой игровой сущности, например хэш статического пути ноды в дереве сцены, если путь может динамически меняться, то от него нужно отрезать всю динамическую часть, плюс соль в виде уникального имени самого инстанса объекта, который может быть задан ему только один раз.
В таком случае тебе неважно, какие там между объектами отношения, неважно, кто на что ссылается. При своей загрузке, объекты просто открывают ассоциативный словарь-синглтон, описывающий состояние игровой сессии (мира), если находят там свои ключи, значит они раньше существовали, значит они читают эти ключи и меняют своё внутреннее состояние, если нет, то значит - они родились! Как тот лунтик.
Сохранение и загрузка в этом случае сводятся к сериализации/десериализации глобального словаря-синглтона. Достаются за полсекунды, в руке лежат как влитые, и далее по тексту.
Кроме того, в документации предлагается вредный совет (ИМХО) безвусловно выгружать текущую сцену при активации загрузки сохранения. Ящитаю, здесь ты дожен грамотно подходить к процессу. Если в сохранении указано, что куррен-сцена это СценаА, и у тебя реально загружена СценаА, то менеджер загрузки может не перезагружать её, особенно если загрузка всех её ресурсов будет длиться некомфортно долго, а вместо этого, испустить сигнал "загружен сейв файл", после чего все подписанные на этот сигнал объекты принудительно сходят в глобальный словарь и обновят своё состояние.
Сразу же давай рассмотрим ситуацию, при которой на сцене "/root/world/location1" в сейв-файле есть данные по объекту "/root/world/location1/enemies/enemy1050", который был убит и удалён из дерева на момент загрузки сейва. Казалось бы, объекта нет, хоть испускай сигнал, хоть не испускай, никто не воскреснет, система сломана, разраб соснул. Но погоди, как минимум сама сцена тоже будет объектом-читателем, при испускании сигнала она так же восстановит своё состояние, в том числе, загрузит "/root/world/location1/enemies/enemy1050" и этот механизм ты должен также заложить в систему.
Короче говоря, загрузка сейва должна идти по дереву сверху вниз, в отличие от порядка вызова колбэков типа _ready которые идут снизу вверх, и корень дерева готов только когда готовы все его потомки. У тебя же наоборот, сначала загрузился корень, корень уже загружен - пропускаем этап, затем загрузились непосредственные потомки корня, П1, П2, П3, П2 уже загружен? - пропускаем, потом рекурсивно, если есть, грузятся недостающие потомки П1, П2, П3. И далее, пока рекурсивная функция менеджера загрузки не вернёт нулль, символизируя, что всё дерево восстановлено, после чего испускается наконец сигнал и все, кому надо перетасовываются. Враги становятся в позу с замахнувшимся над игроком мечом, и т.д.
И да, это всё делается во время паузы, я полагаю, когда вся загрузка окончена, пауза отключается и рубилово возобновляется.
>>926065 При этом, вышеописанная система максимально гибкая. С её помощью ты можешь реализовать любой стиль сохранения. Хочешь быстрые сейвы по Ф5 Ф9? Чтобы игрок мог судорожно сохраниться за секунду до смерти и визжать как сучка, швыряя клавиатуру в монитор? Без проблем, биндишь функции сейва и лоада на Ф-клавиши. Хочешь сейвы у костров и только когда вокруг костра нет агрящихся бомжей? - Пожалуйста, биндишь функцию сейва к функции "посидеть у костра". Хочешь быстрые чекпойнты? - без проблем, заводишь в глобальном скрипте локаций локальную переменную "чекпоинт", в которую скидываешь, когда тебе надо, копию глобального словаря-состояния и если игрока убил босс, проигрываешь экран геймовера и копируешь локальный чекпойнт обратно в глобальный словарь и вызываешь сигнал обновления, как описано выше, при этом никакого взаимодействия с файловой системой не происходит, всё сидит в оперативке. Игрок перешёл в новую локацию, чекпойнт исчез вместе со старой локацией. Несколько локальных чекпойнтов на локации? Тоже не проблема. Неужели и это объяснять нужно? Прибиваешь копию глобального словаря к ноде-чекпойнту с визуальным флажком и бочкой или что там тебе нравится.
>>926067 Погоди, есть ещё один важный момент, об который можно обжечься. Когда будешь делать такой вариант, сразу закладывай возможность блокировки чтения и блокировки записи в вышеописанный глобальный словарь. При активации загрузки - ты должен запретить запись в него, а при активации сохранения, наоборот - запретить чтение. Поскольку предполагается, что объекты будут постоянно по своему желанию ходить в него и читать-писать, им нужно уметь это ограничивать. Иначе можно опять же, получить испорченный сейвфайл, если в нем будут меняться данные в момент его выгрузки на диск.