Шапка: https://hipolink.me/godothread
Предыдущий: >>914638 (OP)
Архивный: >>910890 (OP)
Оп пытался смешно выбнуться своими знаниями, а оказалось что немного опозорился. Ну простим ему.
Она превращается в отдельную сцену. Я хочу скопировать эту модельку и просто изменить цвет с помощью изменения материала, чтобы у меня потом была гридмап с двумя разноцветными одинаковыми модельками. Но просто так мне не дает это сделать, поэтому логично нажать на первую коробку make unique, так? И меня вторую потом. Но если сделать make unique почему-то вес проекта возрастает ебейшим образом. Просто чудовищным, вплоть до того что все начинает тормозить.
Как без уникальности перекрасить модельку? Вроде как можно сохранить их как две разные модельки, но тогда они все равно хранятся раздельно и занимают место.
Как не занимать лишнее место и нормально перекрасить модельку чтобы потом промышленно добавлять модельки разных цветов с помощью гридмапа?
А причина этого вот в чем.
При импорте есть вкладка где можно указать чтобы именно материалы сохранились в отдельные файлы.
Тяжелый проект же становится скорее всего потому что вершины мешей становятся из бинарных текстовыми массивами в tscn. Это как то можно решить, либо сохранять scn в бинарном виде, либо выносить меши в отдельные ресурсы.
Сколько же у тебя там вертексов, что все тормозить начинает?
https://docs.google.com/forms/d/e/1FAIpQLSeXRE1nF64PUilO6fA7Pevh2lWukJtpdBvc2_A3fGfuciy-gQ/viewanalytics
А это результаты опроса 2023.
Потому что другой аналитики у них нет.
>Youtube
>Male 95
Конечно, туториалы на ютубе смотрю я, а потом все подготавливаю и объясняю жене, она уже там уровни рисует. А по блендеру наоборот.
Сюжетные, да. Очень глубокие сюжетные игры в которых чем меньше сюжета и диалогов, тем лучше.
Ладно.
Вот это реально полезная пикча. Схоронил!
Есть.Бесмысленость занятия
> нет отговорок не делать свои игры
Для настоящего прокрастинатора всегда найдётся отговорка.
Ты только погляди, какие крутые фичи нам готовят в 4.3 https://www.youtube.com/watch?v=R-oJzCGFnak
Надо только подождать.
Суть: Немного кирильствую, пилю игру мечты и т.д. Делал модельки и для каждой запекал текстуры отдельно. И понял, что как то дохрена килобайтов получается и надо оптимизировать.
Стал переделывать на текстурный атлас.
Есть модель бочки, для неё сделано 2 UV-карты. Одна натянута на область с цветом, вторая натянута на область с ржавчиной + альфой. И сделан шейдер, где это всё миксуется. В блендере вроде получается результат, но когда импортирую в Годо - получаю только ржавчину.
Годо 4.1 и 4.2 пробовал, Блендер 3.6 и 4.0 - результат одинаков. Импорт через GLTF.
Такое вообще реально в Годо импортировать ? Делал кто то так?
> В блендере вроде получается результат, но когда импортирую в Годо - получаю только ржавчину.
У тебя в блендере применены все трансформы и скейлы?
ааа....
Разглядел ьаки скрины.
У тебя в блендере шейлер смешивает два куска текстуры. Ты стало быть наваяй в годоте аналогичный шейдер на нодах.
>>19927
Спасибо за ответ!
Ну в общем Годо не умеет такое импортировать ?
Придётся почитать про шейдеры в годо, сходу тяжело, что то - не вышло сейчас собрать.
А "Запекать" атлас не хочется - ну есть синяя бочка, есть ржавая синяя бочка, сильно ржавая синяя бочка, есть грязная синяя бочка, есть синяя бочка, которую снегом припорошило ..... а теперь ещё хочется красную, зелёную и чёрную добавить ... А ещё та же история с ящиками, машинами, домиками .... атлас разрастётся сильно очень.
Ещё нашёл на ютубе пример с Vertex Color и поверх этого текстуру ржавчины накладывать и UV только 1 нужна (но там только про блендер)... Попробую ещё так завтра, может Годо переварит.
Ну такое.
Запекать удобнее.
Но миксовый шейдер тоже можно.
А так годот туповатый, да, нельзя один шейдер сделать и теребить параметры и униформы уникально (в 4 можно инстанс униформы задать)
Ты опяьь путаешь шейдер и материал.
Ты можешь создать несколько материалов с одним шейдером.
Материал это и есть "переменная", структура в которой хранятся настройки для инстанса.
(Если подумать, то где то же должна быть переменная для каждого инстанса)
Шейдер при этом может быть один (его можно получить из встроенного материала нажав кнопку в инспекторе)
Ну, я профайлер и дебаг смотрел, на каждый материал генерируется и компилируется индивидуальный шейдер. Т.е. в рамках годота два независимых материала, даже если в него подцеплен код одного и того же шейдера, порождают две шейдерных программы. Увы, но это так.
Кроме того, материал хранит параметры не инстанса, а всей группы инстансов, т.е. целиком батч. Если будешь, например, вызывать дровколы инстансов раздельно друг за другом, меняя между ними некоторые параметры, то оно будет все дружно игнорить это и в итоге отрисует все инстансы с последним изменением параметров материала. Дров колы в годоте это всего лишь некое отложенное задание, оно не рисует инстанс прямо сейчас, а ждёт, пока там весь твой код исполнится, а потом берет последние параметры материала и бахает с ними все отложенные дровколы инстансов. Это довольно сильно напрягает, ведь ситуация такая, что даже нельзя какой нибудь индекс в конкретный инстанс через униформу отправить, чтобы хоть в шейдере самом что нибудь поменять. Хочешь тыщу цветов - придется ебать видеокарту тыщей материалов и тыщей шейдерных программ (не смотря на то что скрипт шейдера ты прицепил один м тот же, повторяю).
Ну, в 4 можно годоте появились инстанс униформы, и то с лимитами типа до 16 униформ, и нельзя текстуру отправить конкретному инстансу, только простые униформы типа fp и т.п. Но его же вроде как до сих пор под мобилки не поиспользовать нормально...
> не умеет такое импортировать ?
Меня тоже это огорчило много лет назад, что оказывается, нельзя экспортировать внутреннюю кухню приложения. Только результат. (Но есть и исключения, но не в этом случае)
>>19931
>>19958
>>20000
Вместо того, чтобы миксовать два куска одной текстуры - использовал Vertex Color + текстуру, Работает вроде.
Что ж попробовал собрать шейдер из нод - вроде получилось.
Только выглядит, как то .... более "пластмассово" - это надо с освещением играть или что то в шейдере пробовать менять ?
Это в твоем проекте или в пустом тоже? Версия, аддоны, тулскипты есть? Так то написано в чем ошибка и что надо делать. Есть моменты когда add child неаозможно сделать и его надо откладывать deferred на следующий кадр
> в пустом тоже
Создаю пустой проект.
Создаю сцену (Node)
Назначаю скрипт.
Сохраняю.
Запускаю.
Проверьте все. У кого ещё так?
Запустил вместо тебя. Ну что? Где свет?
В 3.5 все работает.
Вот у кого то на одном компе такое есть в моно, а на другом нет. Напиши им там что у тебя так и в гдскрипт версии. https://github.com/godotengine/godot/issues/85479
Баги разные бывают, не значит что шиндошс пора переустанавливать
Самый странный баг, или даже не баг а хуй знает что, что я встретил в своих проектах - мой системник скрипел, когда в моей игре закрывались/открывались StaticBody двери. Рили. Дверь открывается 0.25 секунды, и скрип 0.25 секунды. Всегда. Каждый раз. При желании я мог бы этим морзянку выбить. И нет, я не шиз. И нет, я на тот момент еще не добавил звуки. И да, это похоже на кратковременное завывание кулера видюхи.
В этот момент происходит какой-нибудь рассчет коллижнов, и допустим сложный полигон оказывается внутри другого и обсчитывается какая-нибудь глубокая рекурсия.
Вообще-то не совсем так. В верхней половине углы отрицательные, в нижней положительные. По крайней мере, функции типа Vector2.angle, Vector2.angle_to_point так работают.
Надо взять деления с картинки и проделать:
wrapf(value, -PI, PI) для радианной шкалы,
wrapf(value, -180, 180) для градусной шкалы.
Тогда будет верно.
Не хочу трогать, он зимой от сухого воздуха статикой стреляет.
Добавил как есть в игру, расставил источники цвета, покрутил туда-сюда, как то смотрится всё равно хуже блендера. Придётся ещё пояндексить ...
Ого, круто, реальный скрин реального аноньего проекта.
>>20098
В последний раз вкачусь сюда с этой бочкой, проблема со светом - оказалась проблемой с нормалями.
В шейдере, нормали, вместо Normal, я в Normal Map засунул.
И проблемы с тенями оттуда же. Мало ли пригодится кому.
В общем поправил стало похоже на Blender по картинке. Можно теперь нормальные текстуры делать.
Теперь ты умеешь делать бочку.
544x846, 0:24
Из нее получился бы хороший персональный раб.
4.3 по идее в первом квартале 2024, если они выдержат новый ускоренный график.
учитесь, сынки, чел не сдался при трудностях и сделал бочку(литерали), ещё и решение в тред запостил
Ну да, а у нас тут ещё и праздники, правда у них там в основном рождество только, но всё равно, команда-то разноплановая. Могут чисто затащить и первую-две альфа-бетки выпустить ещё в этом году. Минимум одну должны по идее.
Какое-то дилдо серое на подставке, или что это?
Вжух и ты заряжен.
Поддерживаю. Делал управление от первого лица, персонаж дергался. Долго не мог понять в чем дело. Перешел на Jolt и прошло
Сколько получает разраб с одного бокового баннера, видеоролика с наградой и всплывающей рекламы на Яндекс играх? Я это выясню в ближайшую неделю на практике, но хотелось бы почитать спойлер мнение бывалых игроделов, чтобы сопоставить свой и Ваш результат. По моим расчётам-догадкам за баннер сбоку платят от 0.02Руб за ячейку до 0.5Руб.
Понятия не имею, владею цифрами только на западный трафик от нескольких лет назад. В РФ сейчас наверное плоховат с CPM. Погугли. Или пояндекси. А потом еще свое в тред отрепорть.
> Не знаю куда обратиться с вопросиком
>>644645 (OP)
> Ньюфаготред. Если вы не знаете куда вам - вам сюда.
Если ты про "Историю на миллион долларов" то она у меня уже есть.
Выглядит как типикал шутер нулевых
Навскидку варианты.
1. Это какой нибудь сяоми который режет фепесы оптимизаторами. Как их отключать надо гуглить, не факт что это можно сделать из игры.
2. Может быть ты не все выставил? Там где-то есть то ли target_fps, то ли frame_delay. То ли force_fps. Force_fps = 0 подразумевает максимально возможный.
3. Нативная или браузерка? Браузеры любят лочить всинк.
4. Ты тестишь release или debug версию?
5. Возможно это реальная производительность данной игры на телефоне. 400 это не такой большой запас, всего то раз в 6
Это пустая сцена или там уже с эффектами, поотключай всякие. Или наоборот добавь раза в 2 моделей пока не начнет снижаться.
6. В одном месте прочитал что у чувака в 3-ке gles2 не лочит, а gles3 лочит, звучит странно конечно, может быть связано с дровами и п.1
Дебаг версию. Бинарный билд, загруженный в телефон напрямую из годота. Я тоже начитался странных репортов. На юнити-форумах пишут что андроид не позволяет всинк выключить, но иногда позволяет если включишь обновление экрана в 120гц (мой телефон в него умеет, включил - все еще 60 фпс). Игровой режим включил - все еще 60. Глесы тоже перещелкал - без эффекта. Нашел варианты с рутованием телефона и выключением всинка в системных настройках - с этим заморачиваться влом.
В целом я уже получил нужное через мониторинговые функции годота и как ты сказал сцены с разной нагрузкой. Просто странно что андроид такой ебучий.
Кривыми руками добавил на картинку квадратно-гнездовое мышление. Не благодари.
Слышь не ломай. Делой.
В тройке в 3д по дефолту буллет. В 2д - годот физикс. Буллет более взрослый и стабильный, но на самом деле оба они говно, и если ты хочешь завязать основной геймплей на физику, аля портал, - лучше не стоит. А для пинания бочек/собачек подойдет.
В 4 джолт говорят норм.
Так вот что называется ноги от ушей.
Нормальная физика, просто чтобы строить вокруг нее игру, надо добавить своих костылей, которых к любой физике стоит добавить. Например лимит скоростей линейной и вращения, два слоя статик боди в стенах для выталкивания, свои импульсы в интегрейт форс и тд
Не нормальная. Открой гитхаб и пробегись по тегу физикс, там банальный стек из 10 ригидбоди друг в друга как говно проваливается. Половина из подобных багов с бородатых годов висит, а чел, который пытался это разгрести, был украден Рокстарами. Танцевать с костылями можно, но это не для нюфага развлечение, да и не для каждого не-ньюфага. Так что я просто жду джолт в дефолтной сборке.
Не для нюфага, да. Ну так игры на физике и не для нюфагов.
Про стек помню, там написано что для стека надо настройки подбирать отличаюшиеся от дефолтных
Понадобилось мне тут для своей пиксельной игрули сделать линию (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 - корень из двух.
Результат - пикрилейтед. Идеально совпадает со всеми прочими пикселями во всей остальной игре. Ну, то есть, почти идеально, всё-таки у шейдеров есть некоторая погрешность при работе с отдельными пикселями, но это практически не заметно, если не приглядываться. Например, на пикриле есть небольшой косяк.
сцуко, в который раз уже забываю про съедающиеся макабой звёздочки.
У меня двухьядерный ноут и тот же равенфилд лагает, хочу сделать шутер для таких же нищуков как я + поддержку модов
Куча 2д игр которые лагают, фризят в отличие от какой нибудь мафии 2, гта са
Учитывая что ты можешь в любой момент подправить движок под твои нужды - реально всё, вопрос в трудозатратах
>> с лучшей производительностью?
>Нет, такого не получится, это же годот.
>Если хочешь чтобы не лагало придётся переписать весь движок, а значит твой движок уже не будет годотом.
Что там в том движке будет жрать производительность если я сделаю мегаоцталый графон?
Пиздец, а какой двигун тогда взять чтобы свою батлу сделать для некропеки? Голдсорс какойнибудь?
Конечно же используй ECS! Используй Flecs или EnTT, это будет основной движок игры и с ним придётся попердолится с си или с си++ и примитивными технологиями. На этот движок ты будешь подключать какую-то свою либу рендера, например bgfx или голый opengl/вулкан. Можно даже годот четвёртый взять на место рендера, если будешь проводить соответствующие низкоуровневые оптимизации и использовать только низкоуровневые функции.
> два слоя статик боди в стенах для выталкивания
Где об этом почитать?
Я тут на днях размышлял, как сделать гарантированное выталкивание из стен при глитчах.
442x360, 0:04
>Конечно же используй ECS! Используй Flecs или EnTT, это будет основной движок игры и с ним придётся попердолится с си или с си++ и примитивными технологиями. На этот движок ты будешь подключать какую-то свою либу рендера, например bgfx или голый opengl/вулкан. Можно даже годот четвёртый взять на место рендера, если будешь проводить соответствующие низкоуровневые оптимизации и использовать только низкоуровневые функции.
Какие запросы такие и ответы. Ты хочешь улучшить производительность батлы второй, а она не самая требовательная игра так-то. Чтобы улучшить нужно быть лучше EA, иметь меньше абстракций чем у ЕА, иметь больше низкоуровневого кода чем у ЕА. Не уверен что даже используя Flecs и EnTT сможешь этого добиться значительного прироста производительности, максимум 20-30. Улучшить производительность на 40 и более процентов понадобится свой ECS движок, переписывания множества функций на ASM, очень тщательная проработка каждой геометрий и материала на локациях, множество уловок и хаков.
Но это всё не так страшно как кажется. Особенно использование сторонник ECS движков и рендеров, это уж точно не страшнее использования таких движков как юнити и годот. Добиться своими силами увеличения производительности минимум на 20-30% ты точно сможешь без написания своего движка. Заодно интеллект себе забустишь, пока будешь в этом во всём разбираться.
>Она же тоже пикселизируется в соответствии с твоим разрешением
Нет. Она при любом увеличении выглядит гладкой, так как представляет собой (внутри движка) 3Д объект. Если графон типа Селесты, где пиксель игры занимает 8 реальных пикселей экрана, линия будет визуально выбиваться.
У меня не выбивается. Размер игрового поля - 128х64, размер окна (test width/height) - 512х256. Получается 1 пиксель игры занимает 4 реальных.
Собирать уровень в другой программе и импортировать в годот? Жуть какая
Не будет там вдвое медленнее, лол. Тебя посетил ецс-шизик, просто репорти его за движкосрач.
А сколько у тебя есть?
Как сделать чтобы за игроком следовали боты, типо как в "overlord" ? При этом была возможность менять построения
2д игра с видом сверху
> возможность менять построения
Построения - это массив точек. К игроку/(или к любому другому нужному тебе пивоту) крепится само построение. В смысле, логически крепится, тебе не надо наследоваться от ноды, если чо. Просто высчитываешь: var bot[1].destination = formation[1] + destination_pos
Далее, как ты заметил из кода выше, боты организуются в пул (массив) равный по размеру формации. Лишние переключаются на другие задачи. У ботов свой собственный расчёт траектории движения по навмешу. И у этой траектории есть назначение. Если бот включён в построение, он должен получить сообщение об этом и свой индекс в построении. И дальше уже он сам всё сделает.
В общем ничего сложного. Просто садишься и делаешь.
https://youtu.be/bNdFXooM1MQ
На новогодних каникулах постараюсь довести до играбельного прототипа!
Я хочу делать игры, но анончики отказываются мне бесплатно арт в тред выкладывать. А сам я в арт не умею. А анончики не умеют в код. Так и сидим.
Лет 7 уже, но у меня специфические задачи всегда были, навроде твоих, всякий рендер делал для лоу-энд устройств. получается очень хуёво
С чего ты решил что программировать умеешь? Умел бы программировать сумел бы и арт найти.
Я иногда выкладываю нейроарт, правда если много его могут потереть. Можешь еще в этом треде поискать >>917100 (OP)
Что то конкретное трудно получить, это скорее лутбокс где может выпасть брильянт
Запрограммируй процедурную генерацию арта.
Двачую.
Неиронично все так. Но и один шаг от кубов - уже вин, причем не трудный. Но почему-то все сразу уровень хотят фуллрига с анимацией, потом жопу себе рвут и дропают геймдев.
Базовый фуллриг с анимацией это не сложно, скачать модельку и миксамо анимации и вставить в animtree занимает день, ну допстим неделю-две разобраться если совсем с нуля.
Вот только у тебя вся игра должна соответствовать такому уровню, а не один лишь ГГ.
>>21004
>>20999
Вы все неправильно подходите к созданию игры. Не с того вы начинаете. Поэтому у вам и игр нет до конца доделанных!
А тем временем в 4 версии появилась подсказка, с чего следует начинать делать игру: если добавить скрипт чарактербоди, то там будет одна интересная строка: var gravity = ProjectSettings("gravity")
Вот это оно. Это намёк на то, с чего должен начинаться предпродакшен игоры мечты.
Пока ты не открыл спойлер с ответом, можешь проверить себя и предположить сам, что я имею ввиду?
Итак.
Ответ на обороте:
Этой строкой в шаблоне чарактербоди показывает нам, что до того как мы начнём писать основную логику игры, нам следует позаботиться об организации хранилища данных будущей игры, сделать его настолько удобным для себя, как вот этот вызов ProjectSettings() для Хуана. И в дальнейшем это хранилище прекрасно заменит собой все магические числа в будущих скриптах. Ты машинально будешь писать, например, var bullets_amount = MyDB.get("default_bullets_amount", 10) вместо var bullets_amount = 10
W4 Games raises $15M to drive video game development inflection with Godot Engine
https://w4games.com/2023/12/07/w4-games-raises-15m-to-drive-video-game-development-inflection-with-godot-engine/
Как я понял бабло пойдет на фуллтайм девелоперов Годота и на коммерческую инфраструктуру вокруг, типа сонсолей. И нет, W4 Games это не Godot Foundation.
И че это значит для нас, работников завода? Годот будут быстрее и лучше допиливать?
типа чем отличается:
var id
var name
func _ready():
id = 1
name = "pivo"
и
var id
var name
func _init():
id = 1
name = "pivo"
?
Читай документацию
init вызываются в прямом порядке по дереву, ready в обратном.
NodeParent
-NodeChild
Parent.init()
Child.init()
Child.ready()
Parent.ready()
К моменту ready его дети уже гарантировано тоже ready
Scene1 = GD.Load<PackedScene>("res://Scene1.tscn");
...
Scene30 = GD.Load<PackedScene>("res://Scene30.tscn");
дабы потом их использовать, это сильно повлияет на производительность\длительность загрузки уровня? Или стоит заморочиться и написать такую логику, чтобы грузить сцены только по необходимости, а не все сразу?
https://www.youtube.com/watch?v=SAidZnL0bhM
Хз что такое GD.Load. Делай прелоад как все нормальные люди - оно загрузится так рано, как возможно. Вероятно еще на этапе запуска игры.
Сейчас смотрю на ютубе mr.D и он прямо дохуя моментов не объясняет а пропускает и кладет хуй
Приходится дрочить нейронку вопросами
360x640, 0:30
Что это на превьюшке? Женщина? В пизду, не могу бабтй голос терпеть пиздец, и чуство такое блять отвратительное когда тебе что то баба расказывает
Подрочи и сможешь полчаса слушать даже бабу. Такой тебе лайфхак.
Оф документация текстом, кроме шуток. Прям начинаешь и все по порядку читаешь начиная с вводных и туториалов. Доки к нодам тоже, там не все конечно обязательно, но в корневых типа node, node2d/node3d canvasitem, physicalbody и тд много ценной инфы.
Так статические пропсы проще чем ригнутые анимации делать.
Все работает, но я вот нихуя не пойму что делает "instantiate()" ? И почему это не появляется в подсказке окошка автозаполнения? Я сначала подумал у меня такой функции вообще нет, хотя годот свежий
Instantiate просто создает экземпляр сцены а вот его уже надо крепить корнями как вековой дуб к другим нодам функцией add_child
Да, создает новый экземпляр класса/сцены.
https://docs.godotengine.org/en/stable/tutorials/scripting/nodes_and_scene_instances.html
https://docs.godotengine.org/en/stable/classes/class_packedscene.html#class-packedscene-method-instantiate
Читай документацию. В самом годоте ее же можно получить по ф1.
Вангую, что ты просто боишься оставить двач в истории браузера, потому что комп не твой. Ничего страшного. Просто юзай приватные вкладки! Я на работке так капчую. В случае чего - хуяк и комп чист.
https://youtu.be/RM_ExxV-0Qo
Чел, если ты стыдишься тут сидеть это не значит что и все стыдятся
Я тебе написал как есть, нехуй выдумывать
Как мне сделать так, чтобы клик регистрировался только по одной ("верхней?") Area 2D, когда они накладываются друг на друга?
Пусть все арии записывают регистрацию клика по себе в один общий массив, тогда ты из массива берёшь первый элемент. Первым пришёл - первым ушёл.
Первый элемент не обязательно будет самым верхним, он просто будет самым первым в дереве нод.
Насколько я понял вопрошающего анона, у него нет доступа к поддереву дерева в котором у него арии. Иначе бы и вопроса не возникло. Просто берёшь парент всех арий и хватаешь первого чайлда по списку, который принял сигнал.
>и хватаешь первого чайлда по списку, который принял сигнал
Ты не понял что ли? Первый чайлд не обязан быть самым первым на экране.
Я как-то переводил одну книжку на русский, потому что книжка редкая и существует только на инглише. К середине книги я понял, that I has no need to translation anymore.
На каких скринах? Что ты несешь? Элементы в дереве не обязаны располагаться так же как на экране, ты понимаешь это или слишком сложно?
Официально рекомендуемый способ:
1. Принимать инпут через _unhandled_input
2. Хандлить инпут через Viewport.set_input_as_handled()
>>21228
>тред искать лень
Ленивая жопа. Точто так же тебе лень делать нормальный скрин, да?
Подсказка. Заскринил, переслал себе в телегу ("избранное"). А ещё есть KDEConnect, с ним файлы с компа на телефон перекидывать ещё проще. Зато у анончиков глазки не бо-бо.
Тогда мы возвращаемся к моему первому совету. Клик будет сталкиваться с ариями в том порядке, в каком они попадутся клику на экране, и далее клик будет передаваться следующему элементу. Если все арии будут записывать себя в некий общий массив, то мы получим, что первый элемент массива, это именно первая встреченная нами нода из искомых. Задача решена.
... и как заметил анон выше, это всё следует делать в анхандледе.
Технический английский простой - выучишь. И остальные выучат. Будучи студентом я переводил документацию к библиотекам, и скажу что перевод крайне неблагодарное дело, а быть переводчиком хуже чем быть червем-пидором.
Я сам раньше был хейтером этого, но теперь в эпоху нейросетей-переводчиков нет ни одной причины не читать источники на английском сразу, если они более полные. Смысла там теряется при автопереводе ну максимум процентов 10-15%, а в технической литературе и то, скорее всего меньше. Перевод нужен только если есть самоцель сделать нормальный перевод, но это самоцель уровня выкопать ровную шахту, вроде бы здорово, но сил потратишь ебанись.
>Но как делать игры?
На этот вопрос получишь ответ когда выложишь с десяток законченных игр. Хотя бы на итч. И чтобы в них люди играли.
>И зачем?
Как зачем сука? У нас Годетта за такие вопросы убивает нахуй!
> как делать игры?
Вилкой. Садись и делай! Делай!
> И зачем?
Внутри нод уже лежит твоя игра мечты. Тебе нужно всего лишь как скульптору высечь из нод свою игру. Проявить её в реальность.
https://www.youtube.com/watch?v=DL79aS-dT7E&list=PLWEX_DQyaQyyquh1NHU2onWyYUsfQCI_3&index=8
Однако, при перелистывании вариантов диалога кнопками персонаж тоже начинает двигаться. Пытался поставить на паузу, а диалог вывести отдельно — не получается почему-то, диалог тоже встает на паузу, хотя не должен. Пытался в шину событий, тоже не получается. Я даун или с плагином что-то не так? (Я даун)
Помогите(
А что в шине событий не получается? Насколько я понимаю дизайн твоей шины в том чтобы ловить нажатие кнопки и отправлять от нее сигнал персонажу когда двигается при стейте "движение" и отправлять сигнал "листать фразы" когда он получает от диалога "начало диалога"?
Стейт-машины спешат на помощь!
Заводишь список стейтов 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 это просто пустышка с пасс. Я не понимаю, где менять переменную, потому что внутри диалоговой системы он ее не видит. Пишу ее и в скрипте персонажа, и в скрипте левела и в глобале, ни фига
Я тут решил набросать тебе пример стейтмашины на классах, но пока набрасывал, до меня дошло, что можно ещё круче и проще. Стейт-машина на замыканиях (они же лямбды, они же Callable). Тебе не придётся кучу классов создавать, а удобство такое же (минимум if-ов)
Держи https://pastebin.com/yGF2JfS0
Принцип тот же, что я выше описал. Состояние машины - это одна определённая функция, которая вызывается в один момент времени. При смене стейта, меняется вызываемая функция. Это охуеть как удобно. Неважно, каким образом обеспечивать смену функции, классами или лямбдами. Главное суть.
Так а если во втором варианте инпут гет вектор делоть, а велосити равно не делоть?
Норм. В годоте 4 глес2 вообще выкинули ибо устарел, так что все экспортят с глес3. Только макоебы в пролете, у них яббл багами кишит который год.
Тут вроде, в 4.3 обещаю пофиксить эту херню, наконец, насколько я понимаю.
https://github.com/godotengine/godot/issues/85938
Для 2д бери глес2, навскидку не припомню причин брать глес3. Вот в 3д другое дело там спецэффекты не все будут, террейн придется искать другие аддоны или писать свой и тд. Но для 3д и так видяха помощнее надо а там глес3 скорее всего уже есть, это только минус всякие некросмартфоны
Пора делать игру мечты на 4ке
Слева лайтмапы, справа новый реалтайм. Подозрительно хорошо выглядит, рефлекшн пробы не нужны, странно, что кроме хуанна и ко никто не реализовал это, всё какие-то рейтрейсинги. Юнити до сих пор лайтмапы совершенствует, отчеты пишет. Кстати, чую скоро аддончики этого хуановского рендера на ассетсторе появятся
Там допиливать еще дофига, главное, что база правильная, пишут что производительность заебись
Ебани 9000 фильтров чтоб как в PS2 и готово. Сейчас такие игры отлично продаются.
Есть CSGBox3D (коллизии включены), который расположен внутри Area3D (слои/маски не менялись). В _physics_process() печатается наличие коллизий. Проблема в том, что Area3D не видит куб.
В 3.5 точно такая же сцена работает, как ожидается.
В блендере создаю куб с длиной стороны 2м. Скейлю куб по оси Z в 0.5 раз. Экспортирую в годот в формате glb. Получаю get_aabb().size этого меша. Печатается (2, 2, 2), хотя ожидается (2, 1, 2).
С 4-кой помочь не смогу. Включи в дебаге рисование коллайдеров, убедись что они реально есть в пространстве. Посмотри слои коллайдеров, а так хз.
> Применил трансформы - помогло, спасибо.
Ну анон, ну это база же. Ну в каждом туториале по блендеру, же, ёпт! Ну как так-то?
Покажи на своём примере. Мотивируй.
Поможет, он сложнее, но если освоишь более сложное, уже не будет смысла переходить на простое, оно более ограниченное
Мне не помог. Я совался в тот же Дефолд, так и не смог, мне там не хватало всяких нужных штук.
Не очень понятно как ты их сравниваешь.
Омнилайт не подсвечивает воздух вокруг же. Или ты про туман?
Вообще включи и сам измерь.
Как ты себе представляешь использование инструмента из C3 в разработке игры на годоте?
Если говорить о констракте.
Мы это обсуждали мноооого тредов назад. Можно сделать констракт-аддон. Кстати, на четвёрке это еще проще сделать. Либо аддон, либо заготовить констракт-стайл-сцены из которых потом складывать "ивентщиты".
https://w4games.com/2023/12/11/w4-games-announces-pricing-model-for-console-ports/
А твой дон хуан это кто? Владелец нинтендо? Или может владелец плейстейшон?
В основном ты платишь Сони/МС/Нинтендо за их закрытые СДК и ключи, а не Хуану. Но полагаю W4 и свой процент берет тоже. Интересный момент - по правилам W4 ты можешь купить 800-баксов тир и на выбранной платформе публиковать неограниченное количество игор
Что делать с этим?
>а на следущий день она уже кажется какой то хуетой
Значит сразу была хуета
>Что делать с этим?
Придумать истинно годную идею. Накидывай много, через несколько дней смотри какая из них не кажется хуетой, ту и реализовывай
В тройку уже ничего серьезного не бекпортируют. Когда-нибудь выйдет долгожданный 3.6 с минорными фиксами-патчами, а дальше все, приехали.
Ну так то туда много чего бекпортировали, вопрос сугубо про ГИ, я им никогда не пользовался и не знаю че почем.
https://github.com/wareya/MirageVN
Это ты жалуешься, что четвёрка тормозит?
Я тут начал портировать сапёра (постил скрины ИТТ) с трёшки на четвёрку. Так вот. Функция заполнения тайлмапа 100 на 100 (10к тайлов) в трёшке выполнялась с неприятным нюху протормаживанием в несколько секунд, а в четверке аналогичное действие выполняется в пределах фрейма. Ну это так, к слову, насчёт скоростей.
Чувак вроде любит все в публичный доступ под CC0 выкладывать, так что да
Лицензия стоит СС0, паблик домейн. Можешь хоть продать как есть.
Лайтмапы это как текстура, на производительность почти не влияет, но там недостатков много, солнце вращать нельзя, а ги пробы вроде воксельные, доки читай
Гугл вкатывается в Годот. А кто такие The Forge?
Снижай, как говорится, скоп. Делай игры меньше, идеи оригинальней, прокачивай визуальный стиль.
Все программы уже сделаны до вас, а те которые ещё не сделаны до вас, невозможно создать в одиночку на слабом домашнем ПК. Тут нужна команда специалистов и несколько квантовых суперкомпьютеров, вот тогда получится программа которую точно не создавали до тебя другие люди.
> создать в одиночку на слабом домашнем ПК
Вот мы и добрались до сути. Иди денег заработай на нормальный комп, и не ной тут. Курьером иди. Пробздись.
Двачую. Ладно в вебе может быть еще (чтобы сервера на ноде поднимать и селениумы гонять с автотестами, да и то можно просто писать разметку и пушить на сервак для сборки), но вот например для сишечки вполне достаточно некроноута с блокнотом. И можно делать кучу полезного софта. Я например участвую в разработке компилятора нового языка, да много в чем можно поучаствовать, кроме каких то тяжелых нейронок.
>Это тот же человек. Та же персона.
Но личность-то разная.
>важнейшую задачу
Если ты казул - засчитывай ситуацию в пользу игрока. Если хардкорщик - в пользу босса.
С точки зрения программирования, так не бывает. Они обрабатываются по очереди. Даже если ты запихиваешь урон в стак, а потом применяешь. То потом при проверке у кого ноль, в этот момент меняется состояние игры. Получается что убить друг друга они могут только если ты специально запрограммируешь условие if p.hp==0 and e.hp==0. Потому что иначе, у тебя уже сработало условие if p.hp==0: win() а там может быть условие if alreadylose: return #fuckyou
Если же с точки зрения гейм дизайна. Если игрок убил босса, босс уже не может убить игрока, у него нет способности делать атаки. Игрока может задавить тушка босса, но это другое. Его может убить тик урона ядом или выпущенная раньше боссом ракета. Но вообще тут зависит, можно и уничтожить все источники урона от поверженного врага. А можно не уничтожать, если тебе такое нравится. Видел в играх, когда после победы надо еще секунд 5 постоять выжить, чтобы засчиталось.
Лайтмап - освещение и ги запечены в текстуру, один раз запек и используешь.
Пробка - стоит камера, которая смотрит в 6 направлений, и каждый кадр рендерит со своей позиции все вокруг в 6 текстур, которые потом объединяет в одну и выдает на объект, которому прописано.
Забудь о них
GI слишком тормозное пока, нужна ракета чтобы работало
Запекание же сломано, хотя его несколько раз переписывали, оно так и не заработало увы. Можешь issue чекнуть
Спасибо.
>>22627
>Можешь issue чекнуть
Нашел, да. Вот это самое потешное: https://github.com/godotengine/godot/issues/71162
Как тогда минимально требовательное динамичное освещение делать? Расставлять редкие омнилайты без теней?
Но ты не учёл накладываемые эффекты, которые твином постепенно уменьшают хп. И пока идёт анимация вин, перс может помереть.
Учел, читай 3-е предложение с конца.
Вот такое нашел
https://godotforums.org/d/30799-35-i-solved-lightbaking-issues
https://github.com/godotengine/godot/pull/64908
Жаль его пока не мержнули
Может после НГ еще поиграюсь с лайтмаппером
В прошлый раз неделю на него убил и так ничего толком не вышло
Уже не помню в чем там подводные были
Выглядит круче зилановского плагина.
https://godotengine.org/article/communications-update-2023/
Это тема для движкосрач треда. Если вкратце, то весь софт сегодня левый. Праваков в айти уже не осталось. За подробностями - в движкосрач.
То есть народ и партия едины, отщепенцы, льющие воду на мельницу буржуазного империализма, будут наказаны по принципам революционной законности! Ура, товарищи! Вперёд, к диктатуре сойетариата!
>>23168
Союз партийцев и беспартийных в едином порыве решительно выступает не только против правых, но и против левых уклонистов!
Я из-за этого его и выбрал вместо юнити.
Первая тянучька на сосисочном фесте годота. Не то что у вас тут.
Можно.
В среднекрупных играх без animationtree с блендингом не обойтись
В мелких, мб тебе и не надо их объединять. Если например айдл анимация анимирует тело и голову как объекты, а эмоции отдельно анимируются прямо в объекте лицо
Черное - некий домик (спрайт и коллизжен бокс), а розовое, очевидно, игрок.
Если включить Y сортировку, то получается только 1 и 3, что очевидно.
неужели нужно вручную в каждом кадре сравнивать координаты всех объектов и игрока с кучей if условий?
Хочется иметь универсальное решение какое-то.
Ну то есть в данном конкретном случае я могу Y offset поставить посредине спрайта, там где уголок, и тогда будет работать.
Но это годится только для прямоугольных и угловых домиков.
Короче скажите что-нибудь, я чувствую что не туда копаю
Хорошо, сейчас попробую.
Представь 2Д топ даун карту, и на ней спрайтовые объекты, деревья там, дома, вот такое вот.
Игрок может стоять перед объектом, и тогда он рисуется поверх объекта.
Игрок может стоять позади объекта, и тогда он рисуется позади, так что торчит только голова а тело скрыто.
Для этого я могу включить Y сортировку нод, но этот способ годится только для простых форм. Я хочу понять как мне сделать универсальное решение такой задачи, которое не зависит от формы объекта.
Где то в инспекторе толи персонажа, толи тайлмапы есть менюшка "слои" или "уровни"
Может там сделать можно
Куча уроков на ютубе и документация с гайдом как сделать простенькую игру
Я делал довольно плотную на спрайты 2д топ даун. Решал такими хаками: слои, множественные Y-sort ноды, большие спрайты резал на спрайты поменьше, старался избегать диагональных спрайтов. Итог не идеален, но неплох. Как я понял результата лучше можно добиться только с помощью 2д внутри 3д.
А ты кто?
Не спать. Делать игры. 4.3 на подходе, биг импрувментс.
Подвох в том, что это не топдаун. Хотя 99% игроков назовут это топдауном, с точки зрения разработчика это более специфичная вешь, не имеющая общепринятого названия - oblique, 3/4 angle, frontal, изометрия повернутая на 45 и т.д. А классический топдаун - это Хотлайн Майами. А в oblique ты действительно получаешь некоторые проблемы, схожие с изометрическими проблемами. Конкретно в твоем случае, вроде бы, достаточно разрезать Г на два прямоугольника. Скорее всего, это можно делать автоматически, наверняка есть алгоритм находящий в полигоне прямоугольники (и точно для годота есть ассет. который строит по спрайту полигон).
Слишком сложный костыль, такое точно делать не буду.
А если игрок пускает луч вниз, и если там прямо рядом что-то есть, то понижает свой z индекс?
Звучит как универсальная рабочая схема?
Костыль нужен только если у тебя сотни домов которые лень разрезать вручную
Делай как деды в SS13 завещали, забей хуй и делай стены в топдаун, персонажей во фронталке, обьекты в 3/4. Мозг игрока прожует и адаптируется.
Графика такого уровня это скорее символы чем именно картинка. Все детали игрок будет додумывать и фантазировать сам.
Не говоря уже про то, что сейчас целый новый жанр от больших дядек образуется - HD2D, а вы все сидите-пердите костылями из жопы.
Просто отключи возможность заходить как на 3. Это же неудобно для игрока.
Вообще говоря можно и 1 и 2 отключить.
Потому что уродливо выходит. Ты б ещё предложил делать спрайты из 3д моделек и шакалить их
В общем сап годач, такие вопросы есть:
1. Можно ли в годе отключить динамическое освещение, и запекать его в статику?
2. Насколько хорошо будет использовать движок с сижарпом? Есть подводные?
3. Анонче, обьясни в трех словах общий принцип работы годота.
Всем спасибо и тричая
>Можно ли в годе отключить динамическое освещение
Оно и не включено изначально (для этого надо добавлять ноды типа GI, directional light ит д
Ambient light конечно есть
>и запекать его в статику?
С этим насколько я помню были проблемы. Один из вариантов - запечь его еще в блендере в текстуры комнат
>Насколько хорошо будет использовать движок с сижарпом?
Нормально, но честно говоря смысла в этом мало. Гдскрипт простой язык для быстрой разработки, для вещей потяжелей всегда можно скомпилить что то на с++.
Подводные есть, навскидку что-то там с производительостью тысяч рейкастов, и экспорт веб версии не поддерживает многопоточность и гднатив, это может быть важно.
>Анонче, обьясни в трех словах общий принцип работы годота.
В плане? Устройство двжика описано в доках, гитхабе и т.д. Пиши конкретней.
https://godotengine.org/article/godot-3-renderer-design-explained/
>личинка, завербовать, годотство.
Какой то шизонабор слов, так себе ты зашел, лол.
Иди нахуй, шиз. Тебя тут с ложечки кормить должны? Говна поешь, вот тебе ложечка.
Спасибо анон, стало понятнее. Два чаю теье
Обновился. Стало чуть стабильнее, хотя на моем некролинуксе иногда редактор все равно зависает.
При обновлении вылезает много страшных предупреждений о смене внутренного формата мешей. Требуют запускать конверсию.
У меня в тестовом проекте вроде сконвертировалось все без проблем, по крайней мере косяков сразу не заметно (миксамо риг бегает, прыгает, плавает как раньше, домики набегают).
Но вы делайте бекапы.
Какие то плагины надо обновить, zylann hterrain сыпал ошибками, но уже сделанный работал, скорее всего опять синтакс гдскрипта или апи где то меняли, и в редакторе или тулскрипте какой то тип не совпал.
Щас бы на венде что-то из сорцов собирать.
Не ну мы-то с тобой соберём, не вопрос, а вот простой игродел не будет пердолиться, ему ещё игры делать.
Ну во первых на винде то собирается легко, надо только пререквизиты установить, а потом можно запускать батник
Во-вторых я же написал
>github actions
Конечно тут можно сказать что майкрософт может подлить зондов, но тут или доверять (они и на венде и студией подлить могут), или хотя бы собрать из стабильной ветки и сравнить совпадет ли с официальным бидлом.
> Во-вторых я же написал
> >github actions
А я сходил и посмотрел. Нихуя не понял, но создалось впечатление, что там какие-то уже собранные левые билды висят. О чем речь вообще? О какой сборке?
> собрать из стабильной ветки и сравнить совпадет ли с официальным бидлом
Не совпадёт.
Стабильные билды подписаны, твой - нет.
Github action буквально по скрипту пересобирает, по умолчанию на каждый пуш новых исходников.
Вот этот скрипт https://github.com/godotengine/godot/blob/master/.github/workflows/runner.yml
Дергает скипты платформ
https://github.com/godotengine/godot/blob/master/.github/workflows/windows_builds.yml
Там бывает указана матрица билдов (напр дебаг/релиз и для каждого 32/64 бит вариант и т.д) Там же можно указать свои флаги например чтобы собрать только 2д темплейт без 3д
Потом он дергает скрипт сборки https://github.com/godotengine/godot/blob/master/.github/actions/godot-build/action.yml
По сути можно скопировать себе на акк репозиторий, закомментить ненужные тебе билды и собирать на серверах MS
>>23800
Справедливо, к тому же у них я смотрю не все сборки делаются, которые в релиз идут. Наверное потом манагер собирает на какой то своей машине (виртуалке?) и подписывает.
> и собирать на серверах MS
Ну, сборка движка не так уж и часто нужна, можно потерпеть и 15 минут на своей днищепеке. Но в целом идею я понял. Спасибо за разъяснение.
github.com/Relintai/broken_seals
Собственно говоря, вопрос: Чтобы сделать что-то более менее серьезное, придется форкать движ и ваять на плюсах?
Если для тебя форкать движ и ваять на плюсах это что-то сложное, то в ММО лучше не соваться. Но нет, не обязательно. На реддите видел ммо-проекты на gdscript. Но все равно. Не суйся в ММО. Оно тебя сожрет.
Да не смущайся ты, тут все свои.
Во-первых, не путай форкать и компиляцию модулей.
Форкать обычно подразумевает вносить изменения в ядро самой программы. Модули же расширяют движок, хоть и требуют перекомпиляции.
Емнип у автора там два модуля, один для генерации биомов террена, второй для игровой логики типа ECS для заклинаний
Для первого с++ разумно, там наверняка надо больше скорости для генерации вершин. А второе вряд ли, возможно у автора просто уже были наработки и он захотел использовать годот как рендер, хз.
Я тоже потихоньку пишу рогалик где логика на плюсах. Но необходимости в этом нет, у меня просто есть на нее планы использовать в серваке, в обучении нейронки, в обфускации от хакиров и т.д
5%: сам исправил какой то баг
5%: перестааил кнопочку в редакторе как захотел
90%: мержил изменения из мастера
Ну хобби такое у чувака видимо
https://github.com/Relintai/pandemonium_engine/blob/master/CHANGELOG.md
Или он слишком буквально воспринял фразу "замораживайте версию движка когда работаете"
Забыл добавить, у меня 3д и спотлайт.
Как это лучше реализлвать?
Сейчас я это сделать просто отдельными спрайтами и задумка в том, что после нажатия на экран я буду проверять точку нажатия и сравнивать с координатами доступных областей. Звучит как рабочая схема.
Но вылезла проблема при скейлинге(пик.2), области не привязаны к бэку и тянутся отдельно.
Куда копать для решения данной проблемы?
Тю, я и не обезумел, ммо ваять. Скорее по механикам хочу нечто подобное с фермингом мобов, но максимум рассчитанное на кооператив.
Попробуй засунуть все в контрол нод.
Я в экстазе
Эм... Купи дешёвый монитор. Там бандинг из коробки. Без возможности дебандинга.
> Но вылезла проблема при скейлинге(пик.2), области не привязаны к бэку и тянутся отдельно.
> Куда копать для решения данной проблемы?
Хранить актуальный скейл и умножать на него при обновлении позиций оверлейных контролов.
Отсматриваю ролики по годоту в раздумьях, не столкнусь ли я с теми же проблемами.
Статеры замечаю частые. Взять того же miziziziz с его трехмерной игрулькой. Она натурально тормозит.
Что вообще может в годе оказывать влияние на перформанс? Там профайлер есть?
Делай тогда кооп на одном экране, локальный кооп. Он легко делается и хорошую нишу имеет - всегда хоть немного, но востребован. Но и сетевой можно.
Делай игру года 9/10, там всем будет похуй на статтеры, если игра интересная. Это везде работает кста.
Профайлер есть. На перформанс оказывает влияние нечтение документации, где описаны все подводные камни.
>>23844
Как уже сказали - пихай в контрол нод, контрол нод ставь в layout full rect.
>я буду проверять точку нажатия и сравнивать с координатами доступных областей
Что, вручную? Почему бы тогда не заменить спрайты на texturebutton, у которых есть эвент pressed? Сразу жизнь себе упростишь.
Двачую. Весь ноябрь пересматривал стримы по дарксолсам (а мог бы игры делать, да) и частенько подмечал и статтеры и грузящиеся перед ебалом лоды. Но об этом никто не говорит, всем тупо похуй. Потому что типичный игрок в дарксолсы видит не статтеры, и не прогрузку лодов, а видит он Лотрик и Нью-Лондон, взмахи меча и тайминги отпрыга.
Ну как тебе уже написали для этого и изобретены Control ноды
Работают они в связке с настройками окна (которые 2d, keep aspect, вот эти) и масштабируются вместе с окном
Но никто не мешает конечно и самому масштабировать
Проверять координаты в любом случае зачем? Кроме контролов есть Area2D с событиями мыши.
> спрайты на texturebutton
Спасибо антош, так и сделал, почему-то забыл о них.
Теперь все скейлится как надо, еще и кнопки есть.
Получается что у 2д есть такие же визуал слои как у 3д, просто они не показаны в инспекторе.
Да.
Ну, шейдерами, например.
> Квест
Нет, жанр около симулятора-коллекционки.
> Откуда арт
Один из бэкграундов игры, которую делаю.
Сделать управление и героем и врагами с помощью приложения сил. У героя масса и сила будет больше, у врагов меньше.
собственно говоря, если надо, чтобы
противник отталкивался от персонажа, то:
детектишь коллизию на строне противника. через какой-нибудь триггер, в годо это вроде area называется
прокладываешь вектор от персонажа к врагу, нормализуешь его, множаешь на силу отталкивания
толкаешь врага через ригидбади,
еще не забываешь о кулдауне, через который противник снова сможет отскакивать от персонажа. правда это юзается в платформерах, когда перс получает демедж, но яхз может и в твоих вампирах есть чет подобное
так они и должны быть кинематиком реализованы, там полноценно нехуй обсчитывать
Что-то типа того, что обычно реализуют в платформерах, когда движение написано через массу, g и прочее? Пока не совсем понимаю как такое реализовать для top down игры, но посмотрю. А может вообще неправильно тебя понял.
>>23976
Для врагов написал логику, когда они бегут на персонажа, но при этом оббегают друг друга и препятствия с помощью Navigation Agent. Попробовал переписать передвижение врагов под Rigid Body, но они начинают хуярить вокруг персонажа как спутник по орбите. Поигравшись с параметрами смог только успокоить их немного, но "оббегание" друг-друга работать перестало. Тоже наверное поковыряюсь еще.
>>24027
Вроде звучит не так сложно, но знаю, что с реализацией поебусь знатно.
Вообще, всем спасибо, аноны, попробую что-нибудь соорудить.
ну ты не стесняйся задавать вопросы есчо
>vampire survivors
>Your First 2D GAME From Zero with GODOT 4! Vampire Survivor Style
https://www.youtube.com/watch?v=GwCiGixlqiU
Специально для тебя, анон.
Угу уже начал делать, игра войдет в историю, осталось только выбрать джем в который ее вбросить, но там какие то унылые скучные на 1 января выпадают.
>осталось только выбрать джем
А как вы их ищите, куда публикуете? Поведайте как в джемы влезать.
Ага, спасибо, гляну.
Никогда не понимал, чем людей привлекают эти ваши джемы. Добровольный кранч, дабы высрать недоигру, в которую поиграют полтора человека. При этом уровень конкуренции выше, чем если просто зарелизить игру. И даже денежного вознаграждения зачастую не бывает.
Какой смысл? Что этими людьми движет?
Уровень внимания выше. Твою игру реально рассматривают и рейтят другие участники джема и организаторы. Позволяет нащупать годные идеи, потом довести их до ума вне джема и выпустить интересную игру. Многие успешные инди так начинались.
Качественный, подробный и масштабный фидбек получить довольно сложно. А он нужен. Без него ты не поймешь что тратишь 3 года на хуевую идею.
У меня до сих пор очко сжимается, когда я вспоминаю Tail Quest, на который было потрачено, чего там, лет 8. Он долго висел на главной Годота, про него там новости писали, его пиарили все, включая Хуана. Наконец он вышел в стиме, а там пук кек 27 отзывов 5 из 10 и гроб гроб кладбище. Тейл Квест - мой ночной кошмар, нахуй.
>Уровень внимания выше.
Не знаю как про другие конкурсы, но на двачном было ровно наоборот. Ты обязан поиграть в 30 чужих игр и писать отзыв, 95% из которых заведомо позорное говно. Заранее получается обесценивание. Там по началу еще что-то пытаешься разбираться, потом просто наотъебись скипаешь по-быстрому. Тем более фидбек от других недоразрабов или просто критиков вообще бесполезен. Я вспоминаю историю как Джоан Роулинг своего Гарри по издателям носила, казалось бы это специалисты которые обязаны из кучи мусора годноту выискивать, это их хлеб, но хуй там.
>кранч
Так дедлайны и стимулируют что-то сделать, сделать в срок и закончить. А без дедлайнов ты сидишь и мечатешь об играх ничего не делая.
Кроме того, у тебя появляется опыт релиза игры, ты получаешь опыт всех шагов по сборке релиза, оформлению странички, базовым навыкам раскрутки, срочного QA, обкатки движка на разных сборках и пользователях (ты узнаешь кучу вещей которые нужно подпирать костылями, например делать размер фулскрина = screen_height + 1, чтобы работал видеозахват OBS у стримера).
В общем это тренировочный запуск настоящей,хоть и маленькой игры.
Про уровень конкуренции выше чем в стиме или гуглплее кекнул конечно.
Что подчеркивает насколько сложно получить фидбек. Всем на все похуй. Джемы не панацея, конечно, но лучше чем повторить судьбу Тейл Квеста. Плюс есть устоявшиеся джемы с активной аудиторией, но там и ожидания от тебя повыше. Самый топ - быть популярным стримером/ютубером. Эти охуевшие скоты аж анкеты заставляют заполнять и раздумывают потом, пустить тебя демо погонять или нахуй послать.
Про двачной джем ничего не знаю. Помню только абу чего-то стримил. Ну, неудивительно, учитывая аморфность среднего анонаса. Да и мало кто захочет шкварить серьезный проект об харкач.
На джемах отлично генерируются идеи. Вот miziziz участвовал в таком со своей игрой про однорукого бандита, и получилась неплохая по геймплею игра.
Потом на нее снял обзор популярный летсплеер, и продажи пошли на ура.
без понятия, не считал. Кратно больше, скорее всего. Только это не причина не ходить на джем - джем это возможность с контекстом, а не единственный способ что-то годное. Сравнивать числа генерируемых идет не получился.
А на заказ просить сделать у меня шекелей не хватит с днозарплатки
На саундклауде есть тег роялти фри копирайт фри сс0. Заодно порадуешь какого-нибудь анона, который до тебя 2 прослушивания имел. А для звуков фрисаунд.орг.
Теперь делой.
Но разве я там смогу найти что то подходящее? Для своей драгоценной игры любое говно мне кажется нк подойдет
Сможешь. Я саунд для своей игры чисто на фрисаунде собрал, только менял питч прямо в годоте. Недели две набирал. Мне потом на реддите писали "охуенный эмбиент, брух", кек.
Но возможно ты хочешь не саунд, а отмазки для своей прокрастинации. Это другое дело.
Пиши сам, хороший совет на деле. На ютубе есть гайды на простейшую теорию музыки, а в интернете куча бесплатных инструментов, отталкиваясь от неё и своей фантазии творишь прекрасное. Берёшь какой-нибудь рипер за 60 долларов ну или пиратишь флку или что ты там надумал, хз какую ты будешь брать программу, скачиваешь пару саундфонтов и синтов, и хуяришь. Так и живём.
>>24492
хуевый совет как для инди. инде нужно делать игру, и чем скорее, тем лучше, пока он не заибался и не сдох.
помимо музыки у него же еще и модельки, и анимации, и код, и геймдизайн, и левелдизайн.
пускай готовое берет, или глянет во вконтакте соответствующие паблосы - там денег зачастую берут немного, а если нашел один такой паблик - то через функцию „найти похожее“ найдет и еще.
еще я слышал что у японских гномов задешево можно музыку с артом оформить - в пределах 100-400¥, но не проверял
Хз, лично мне больше нравится самому писать, особенно если я понимаю, что хочу от музыки. Мне вот музыка со стороны плохо подходит, так что пишу сам.
> Никогда не понимал, чем людей привлекают эти ваши качалки. Добровольный кранч, дабы выбросить в мыщцы молочную кислоту, которая рассосётся через полтора часа. При этом уровень тестостерона выше, чем если просто закинуться колёсами. И даже абонементы зачастую недешёвые.
> Какой смысл? Что этими людьми движет?
Я в курсе про языки программирования, основы, логические элементы, операции, водил черепашку на бейсике. Но никогда не мог в код, сколько не пытался вкатываться в с++ или питон мне это не даётся, слишком туп для этого. Зато дался визуал и 3д графика.
Собственно вопрос, смогу ли я чисто на GDscript полноценно создать весь нужный функционал в игре? Где отправная точка для старта? Мне нужно читать документацию? Любые уроки ютуба на годоте начинаются с того что ты либо уже должен знать код, либо просто копипастить куски у автора туториала.
Чисто в теории для начала вся моя игра будет состоять из трёх сцен:
Меню и две локации между которыми игрок может перемещаться по клику на статичную модельку. Сам игрок управляет по сути фигуркой которую можно двигать по карте мышью.
Из доп функционала это возможность сейва, и вывод диалогового окна при клике на интерактивный объект.
Мне не очень хочется смотреть в сторону юнити поскольку я считаю что у меня достаточно простая игра которая по сути будет простой настольной игрой с текстом и карточками.
Конструкторы для 2д тоже не подходят потому что хочется дать ощущение объема и пространства.
Нихуя там сложного
В документации все для дебилов разжевано
Разве что надо будет немного поизучать тему "векторов" ибо на этом дохуя чего стоит
Смотря насколько ты туп в коде. Иногда у людей мозги вообще не поворачиваются в эту сторону. У меня был знакомый который банальщину вроде if-else осилить не мог, долго и упорно не мог, хотя явно старался. Если ты такой же - возможно тебе лучше не годот, а что-то с визуальным языком. ЕМНИП у GameMaker и GDevelop они неплохи. И то не факт что они тебя спасут. Может тебе лучше работать в команде с кодером?
Но если ты действительно черепашку на бейсике писал, и понял как она работает - не вижу проблем. Пройди официальный туториал годота, там где крипов делать. Поможет освоиться. Потом найди на ютубе туториал поближе к своей идее и вперед. Но, сука, не бездумно копируй, а лезь в документацию и читай что делает каждая строчка.
> Но никогда не мог в код
> дался визуал и 3д графика.
Ну ты ж конструируешь шейдеры в блендере на нодах? Это же такой же кодинг, просто тебе надо это осознать.
>>24638
> P.s. Мне не очень хочется смотреть в сторону юнити
Ему видите ли не даётся кодинг на примитивном гдскрипте, но он видите-ли угрожает нам, что не будет поглядывать на более комплексный сишарп.
Блять, жирняка покормил.
Без задней мысли подошел, взял за руку, сказал "пойдем, разрабатывать тебя буду", и повел за собой.
У меня ноды в майе, они простые, там даже десятилетний ребенок разберется
Могу составлять логику в виде блок схем, но не могу перевести это на язык программирования потому что попросту не знаю синтаксис. Максимум что я делал это правил чужие скрипты в свитках
Ну норм тогда. У gdscript'а синтаксис простой, гораздо проще того же Питона. За пару вечеров осилишь.
> правил чужие скрипты в свитках
По сравнению с хтоническим скриптингом в свитках гдскрипт - просто детский конструктор.
Если кому-то не похуй, зачатки своего корявенького решения нашел на форуме godot, в вопросе "как одним кинематиком двигать другой кинематик".
Код на шарпе на пике, в gdscript еще проще, что-то типа:
if (collision)
collision.Collider.MoveAndSlide(Velocity);
Естественно, это еще нужно доработать, как минимум определять, что это за коллайдер такой и надо-ли его двигать вообще. Плюс поиграть с вектором, т.к. тупое толкание врага в том же направление, что и движется персонаж, выглядит странно. Ну и врагам что-то подобное надо писать, т.к. если они окружают игрока в два слоя, то уже так красиво не работает.. Короче, колхозить еще и колхозить.
> как минимум определять, что это за коллайдер такой и надо-ли его двигать вообще
Рассмотри вариант с группами.
Имей в виду что move and collide не скользит вдоль стен, как move and slide, т.ч. тебе придется писать такую логику самому
Я бы наверное такую логику на ригидах делао, с использованием
>>909798 →
Приличных материалов по этому языку пиздец мало, все делают своё говно то в обосранном гарис мод, то в обдристанном самп. Решил что буду брать по-немногу от всего и использовать это как-то в Godot.
В общем я скачал и установил это https://github.com/gilzoide/godot-lua-pluginscript
И собственно первый вопрос который бы я хотел задать: а где библиотека функций или еще чего-то? Ну или как эта хуйня называется, где ты открываешь каталог, ищешь нужную функцию и вписываешь ее в скрипт?
Ещё нашел вот это https://github.com/perbone/luascript но я пробовал установить нихуя не работает. В чем отличия луа от жилзоиде и пербоне?
Не бейте сильно я зелёный пиздец.
> Не бейте сильно
Да ну ты что? У нас тред любви и поддержки. Мы тебя любя ВЫЕБЕМ ПРЯМО В МОСК.
> И собственно первый вопрос который бы я хотел задать: а где библиотека функций или еще чего-то?
Вот здесь, например https://docs.godotengine.org/ru/4.x/index.html
> ищешь нужную функцию и вписываешь ее в скрипт
> В проганье не шарю от слова совсем
Ты мне не поверишь, конечно сейчас, но я тебе скажу, не зная программирования, ты не сможешь узнать, какая функция тебе нужна, чтобы вставить.
> Приличных материалов по этому языку пиздец мало
Ну что же ты пиздишь, анончик? https://www.lua.org/manual/5.4/
> я скачал и установил это
> Ещё нашел вот это
Погоди, давай ещё раз уточним. Ты вообще не шаришь в кодинге, и вместо того, чтобы учить кодинг лезешь в геймдев, который считается вершиной айти? В котором самая простая игра сложнее самых сложных КРУДов ентерпрайза? И вместо того, чтобы пользоваться встроенными языковыми средствами годота, ты тянешь туда сторонние языки? Не зная ни одного языка?
Ну и как тебя всерьёз воспринимать? Толстота же. Ну или шиза.
>Ты мне не поверишь, конечно сейчас, но я тебе скажу, не зная программирования, ты не сможешь узнать, какая функция тебе нужна, чтобы вставить.
Ичо =) ичо нахуй=))))))))))))
>>25064
>Ну что же ты пиздишь, анончик?
Это всё для нормисов 100IQ+
>>25064
>Ты вообще не шаришь в кодинге, и вместо того, чтобы учить кодинг лезешь в геймдев, который считается вершиной айти?
Схуяли считаю?
Я пытался прогать на луа ещё давно, нихуя не выходило из-за отсутствия нормальных материалов обучающих. В каких-то роликах чел нормально объясняет, в каких-то совсем неочень, из-за этого собирать полную картину по этому языку довольно трудно.
>>25064
>И вместо того, чтобы пользоваться встроенными языковыми средствами годота, ты тянешь туда сторонние языки?
Потому что встроенный высер годота это хуйня полная. По ней ещё меньше обучающих материалов. А если ты про си шарп или еще чето, то блять, ну я хуй знает, ну иди пожуй травы там, или пососи хуй отчима, может догадаешься, что Lua я рассматриваю как самый простейший ЯП из живых.
Офк я мог бы вкатиться в роблокс студио с такими запросами, но это я оставлю на потом. Пока что я получил буст энтузиазма изучать луа на годоте, через неделю, когда я в очередной раз убеждусь что это душная хуетень, я наверное ливну и вернусь через год-два, но сейчас я хочу узнать ответы на вопросы.
Так что я просто хочу услышать ответы на вопросы без высеров в стиле русских форумов 2012(а зачем вам хуй в жопе????? А У ВАС ДЕНЬГИ ТО НА НИГО ЕСТ?!?!?!!? А МОЖЕТ ЛУЧШЕ БУТЫЛКУ В ЖОПУ БУДЕТЕ ИСПОЛЬЗОВАТЬ?????????)
В очередной раз убеждаюсь что тематика умерла, мда, хех.
Зашел просто задал вопросы, в ответ предъявы, обвинения, осуждения. Я сюда 2 раз в жизни захожу просто узнать ответы, где ты тут увидел движкосрач, уебище ты тупоголовое нахуй.
Бери лучше https://love2d.org/ К нему есть неплохие туториалы, на гитхабе полно библиотек на все случаи жизни, активное комьюнити в дискорде. Сам в этом году успешно вкатился с нуля
мимо
Какая разница сколько раз ты заходишь, если ты развел движкосрач? Учи встроенеый язык, гдскрипт легчайший язык, по нему тонна обучающих материалов, луа недоязык который никому неинтересен, разбирайся с ним сам если тебе интересно, но это нерелевантно треду
>нихуя не выходило из-за отсутствия нормальных материалов обучающих. В каких-то роликах чел нормально объясняет, в каких-то совсем неочень, из-за этого собирать полную картину по этому языку довольно трудно.
Поиграл с твоего смешного поста, но вот этот момент все объясняет
>В каких-то роликах чел
Для обучения языкам программирования никакие ролики не нужны, и даже противопоказаны.
Вся "полная картина" языка содержится в официальной документации к языку, обычно там же есть и вводная глава.
Тебе все верно ответили, шизло. Ты залетел с нулем знаний, но уже с "железными аргументами" почему Х - говно, и его ты учить не будешь, а будешь учить только Y, который по факту никто не использует, а тебе давайте, обучайте меня. Твои аргументы - инвалид, но тебе это даже хуй объяснишь, потому что ты сам инвалид. Ну и чего с тобой делать?
>через неделю, когда я в очередной раз убеждусь что это душная хуетень, я наверное ливну
Все всё побросали побежали спасать очередного дауненка с дефицитом внимания. Заспидрань свою новогоднюю мотивацию с недели до пары часов, и сразу приди к похмельному финалу.
Жиза брух. Сейчас бы игры делать, а не вот это вот все. Я уже 3 дня нормально делать игры не могу.
>В котором самая простая игра сложнее самых сложных КРУДов ентерпрайза?
Я другой анон, погодите, это реально? Ты хочешь сказать, что простая игра на Годоте типо тех же подпивасных клонов вампир сурвайворов или платформеров технически сложнее, чем то, чем занимаются в коммерческой работе? Я всегда думал что наоборот, в редакторе и с гдскриптом любой гоблин соберет простенькую игру, может даже не очень простенькую, а писать бекэнд на питоне условном могут только гении-олимпиадники, которые мыслят архитектурой и прочее.
Все правильно он написал. После кучи лет работы в вебдеве могу подтвердить, игры гораздо сложнее, комплекснее, требуют опыта в дохуище дисциплин, и все это должно работать вместе, слажено, стильно и в реалтайме с 60+ фпс. Это не формы тяп-ляп.
Так что, если я сделал простую игру, то значит у меня есть шансы вкатиться в айти по-нормальному с реальной зарплатой?
То значит что ты не даун-аутист, и шансы выше чем у среднего вкатуна из б. Остальное зависит от конкретных скиллов, а они не всегда пересекаются между областями айти.
Если у тебя есть некие заблуждения про геймдев, вебдев или любое другое айти, самый верный способ их развеять - написать код самому. Туториал по питону и джанге проходится примерно за столько же времени, что и годотовый. Результат и там и там - законченный мини-проект. Сходи и сравни.
А вообще оффтоп. Пойдем лучше игры делать.
>Ты хочешь сказать, что простая игра на Годоте типо тех же подпивасных клонов вампир сурвайворов или платформеров технически сложнее, чем то, чем занимаются в коммерческой работе?
Литерали да. Вебмакакинг проще чем ты думаешь. И платят больше кстати, ну где как.
>Я вот 15 лет профессионально в геймдеве
Расскажи как вкотился и хоть примерно на каких условиях работаешь. А то я уже года два работаю на мелких кабанов с мемными проектами говна и думаю, куда мне дальше.
Чисто теоретический ответ - могут.
В доках по другому написано, void set_anchors_preset ( LayoutPreset preset, bool keep_margins=false )
Может быть дело в том, что enum находится в Control? Лень разбираться.
480x360, 0:10
Так уже реализовано
https://www.youtube.com/watch?v=3GzGq-__CxM
Не забывай что игрок все равно сможет смотреть только в 3д (через 2д экран), для 3д существа 4д объект выглядит как изменение 3д объектов (иногда довольно произвольное). Проще всего это можно понять на примере 3д объекта глазами 2д существа - для него это будет просто из ниоткуда появляющиеся и меняющие форму 2д объекты, например как при прохождении пальцев овал вдруг расширился и распался на 5 кругов.
Хз, не могу найти.
По 3-ке был чей то сторонний сайт с апи.
Вообще C# API создается во время компиляции на основе api.json, я давно в этом копался. Может быть где-то есть правило типа регекспа, которое вырезает повторяющуюся часть названия, если оно такое же (...Preset.PRESET...)
Если собирать движок самому, то там где-то создается папочка GodotSharp/Generated, ну или смотреть уже dll всякими инспекторами.
Т.е. чтобы вот в этой штуке на HUD появился нормальный текст, значение цифровое ну блфять вы поняли счётчик патронов надо мне.
И ещё вопрос. ЧТо неверно во второй половине скрина? Почему оно не воспроизводится?
Спасибо.
Сложно сказать, это какой то готовый контроллер или туториал?
Во-1, проверь в свойствах проекта, в input map, что у тебя есть действие shoot_Main и написано именно так и ему назначена кнопка
Во-2, RayCast должен с чем-то столкнуться. То есть у цели должен быть коллайдер, они с рейкастом должны быть в одном слое. Если там просто текстура стены то ничего не произойдет.
Может быть еще что то, но пока это проверь.
А коллижн шейпы не считаются за то что может хитнуть рейкаст? Или просто огромный мэш который собственно и является уровнем, например, тоже не считается тем что может хитнуть луч?
>коллижн шейпы
Считаются, но они должны быть поддетьми StaticBody или какого-то другого body (Character)
>просто огромный мэш
Сам по себе меш нет, если только ты для него не сделаешь коллайдер (в годоте есть пункт меню Mesh с разными вариантами)
Ну вообще считается что огромный меш лучше не делать коллайдером, потому что тогда рейкаст может тормозить (ему надо перебрать все возможные грани и пересечения)
4д существо видело бы полную развёртку 3д существ вместе со всеми потрохами, вместе со всем содержимым кишок и сосудов. Эдакий взгляд изнутри.
> чтобы при старте сцены в лейбле обновлялось количество патронов в магазине, которое в свою очередь при старте сцены считается?
А теперь внимание, правильный ответ.
1 (в лоб): обновлять значение в сеттере, сделать сеттер внутреннему числовому значению в котором будет торчать ссылка на интерфейсную ноду.
2 (солидное): Сделать сеттер внутреннему значению, в нём испускать сигнал значение_апдейт(значение), интерфейсом подписаться на сигнал.
О, значит я на новый год был 4д существом.
О, про апи.жсон не знал, посмотрю, спасибо
В таком случае может быть есть игра где играются с 2д переходящим в 3д либо наоборот? Нечто похожее на суперлиминал
Есть, правда челик под это дело свой движок сделал.
https://www.youtube.com/watch?v=kEB11PQ9Eo8 а оттуда на канал переходи и смотри остальное.
480x488, 0:24
А вы что-то кроме 2д пиксель говна делаете? Годен ли движок для чего то кроме изучения основ программирования для начальных классов?
Все делаем. Иронично, но как раз пиксельной игры я еще не делал, в основном 3д, некоторые с замашкой на опенворлд, но иногда и 2д в обычном арте делал.
Годен для практически всех жанров, кроме прям совсем ААА игр (но для соло разработки это и не имеет значения).
> кроме прям совсем ААА игр
Да и тут я бы посомневался. Если бы какая-то гипотетическая студия не экономила на кодерах-сишниках, они бы могли, юзая исходники годота, запилить свой внутренний корпоративный форк с реализацией любых проприетарных штук, типа физики havok (правда нахуй она не нужна в 2к24), рейтрейсинга, и т.п.
Ведь крупные студии предпочитают анрил/юнити не потому что они "лучше", а потому что там кодеры-системщики вынесены в аутсорц, ты получаешь готовое ядро продукта с техподдержкой и гарантиями. Маркетологам гораздо проще посчитать расходы в таком раскладе. Чисто бизнес, никакой технологии.
Естественно есть небольшой подвох, графика на самих карточках будет отрисована вручную. Как и на диалогах/встречах
Проблема пока в реализации боевой системы. Потому что по моей задумке она должна быть ближе к кингс баунти. Но вместо отрядов у меня будет активная колода
Я говорил в рамках того что можно делать изкоробки (грубо говоря, на движке, даже если с использованием аддонов, шейдеров и т.д, но не переписывая сами кишочки на с++) Плюс был официальный пост Хуана на этот счет.
> Я говорил в рамках того что можно делать изкоробки
Да я это понял.
А я напротив говорил о том, что при крупномасштабной разработке (пресловутое ААА) не обойтись без исходников и их правок вручную.
Мерси
>>24844
Благодарю. С группами еще особо работать не приходилось, т.к. в самом начале пути, обязательно посмотрю как там что
>>24851
И тебе спасибо. У меня top down, скольжение вдоль стен не особо нужно. Но об этой разнице между методами я тоже почитаю.
С риджидами там у меня не пошло дело, ибо >>24080
> обязательно посмотрю как там что
> С группами
В документации об этом не говорится, но попробуй работать с группами как с контрактом: добавление в группу гарантирует наличие свойств и методов, предоставляемых контрактом группы.
В чём суть? Знаю go, в планах на нём описывать тяжёлую логику, добавлять в проект. Думал можно прямо в проект импортировать, но не нахожу. Чёт лениво пересобирать ради своих модулей godot каждый раз. Ну и от плюсов отвык как-то.
Можно, gdextension 4 / gdnative 3
Я описывал как я делаю с плюсами. У меня есть либа (so/dll) игровой логики, она ничего не знает о годоте, и есть либа (so/dll) враппер, которая знает о годоте и выглядит для него как скрипт и может вызываться из гдскрипта, в свою очередь дергает нужные функции мира в игровой либе. Гуй на гдскрипте.
P.s. соответственно игровая либа может инклюдить и линковаться с любыми готовыми либами на с/с++, например продвинутый a-star и тд
Я в новом году уже дае новых начал делать
Не используй панель, очевидно. Используй спрайт. Да, вместо панели. Да, будет работать. Да, так можно было.
Ой да там 15 минут делов, скрипты на спрайт переделать. Сделай один раз и кайфуй.
В темы нужно лезть когда нужен комплексный подход к "темированию", типа, когда нужна система псвдоокон для эрпогэ. Тогда темы рулят. В остальных случаях ебашь без задней мысли всё на спрайтах вложенных друг в друга.
Да, принимается исправление.
А хули тут еще посоветовать? Открываешь файл и записываешь в него все переменные, которые хочешь. Что может тут быть непонятного? Задавай вопрос конкретнее.
Смахивает на классическое "делаю игру, нужен програмист и художник, а я расскажу, как это должно выглядеть. И вобще я командовать буду".
спасибо!
Как земля.
Только если за свою. Чужие только за идею вместе с оплатой могу
Для VS codium был плагин, не знаю насколько он лучше-хуже. Я в 3 годоте сижу, там редактор удобный.
У меня годот фактически только для графики, вся логика на шарпе, затык начинается когда я думаю как сохранять отношение объектов, в которых есть ссылки на объекты.
Я ЕБАЛВ РО Т ГУГЛЛИТЬ СУКА Я ЕБАЛ В РОТ ПРОСТО ГНУГЛИТЬ НАХУЙ ГУГЛИТЬ ЕБАААЛ В РОТ
1920x1080, 0:05
Полистал тред и не увидел от него скринов.
Как у него дела?
Эй, бесконечномашинщик, как дела с твоим проектом?
Мог бы спасибо сказать что за тебя погуглили, немощь ебаная.
Оно же не совсем про то, а про сцены. У меня на сценах только спрайты, с ними вроде как всё очевидно. Давай приведу пример. У меня есть зелье в инвентаре. У него есть общее для всех предметов в инвентаре свойство "в кармашке у", которое ссылается на персонажа, у которого оно собсно в кармашке. Конечно можно пойти по лёгкому пути и смотреть от обратного, мол вот список предметов у персонажа, они все типовые, при загрузке создаём их объекты с нуля, но мне хочется подход, который сработает и для нетиповых объектов, типа "труп белого орка по имени Патрик, с ранами в районе живота, и отсутствующей ногой"
этов дальнейших планах.
>У меня на сценах только спрайты
А остальное где, если не в сценах? Ты можешь сохранить сцену всего инвентаря, например, со всеми зельями, рекурсивно. Даже если она создана динамично из кода. И орка. И всю игру. Я у себя всю игру так сохраняю. Но тут есть тонкости. Во-первых ты должен проставить owner'ов, про это в доках к пакедсцене есть. Во-вторых, если ты хочешь чтобы сохранилась переменная, определенная в скрипте, эта переменная должна быть объявлена с export var ..., по крайней мере так было в тройке.
Никаких других хитрых хаков про сохранения я не знаю. Все остальное - долгая муторная ручная работа. Но можешь в ассет сторе поискать готовые решения. Я как-то разбирался с thoth, он был неплох.
Технически наверно всё таки на сцене, но да, наверно надо разбираться и смотреть на средства сериализации самого шарпа
Подозреваю что в 99% случаев именно ссылки на конкретные объекты сохранять не нужно
Есть разные стратегии, я бы рассмотрел по порядку возрастания сложности
1. Не сохранять ничего, кроме чекпоинтов/номера текущего уровня. Довольно ограниченно.
2. В случае например инвентаря, может быть достаточно количественного или бинарного состояния. Тебе неважно что это ссылка на объект гибочки, главное что их 99. И что подобран синий ключ.
3. В каких то более сложных случаях, например дерева объектов, должен работать просто словарь значений. Опять же неважно что за объект колес машины, важно только что куплены два зимних и два летних, а в данных о колесах может указываться, что они проапгрейжены украшениями со светодиодами.
4. Еще более сложные случаи могут решаться уникальными ID объектов. Сложно придумать пример, ну пусть будет цепочка что "Город1" производит танк, "Город2" производит ракету, и у обоих есть правило "отправить построенный юнит в Город3", тут важно что это один и тот же город.
В целом при десереализации во время загрузки, твой код должен инстанциировать нужные объекты, добавлять их в нужные части дерева, в т.ч. сцены, подписывать на нужные события, ну и вот таким образом подставлять везде ссылки - в Город1 ссылку на Город3 в нужной команде.
Найти панель в редакторе темы ты тоже ебал? Понимаю.
>У него есть общее для всех предметов в инвентаре свойство "в кармашке у",
Никогда не слышал о таком дизайне. Но ничто не мешает динамически добавлять предмету такое свойство, когда его добавляют в инвентарь
>"труп белого орка по имени Патрик, с ранами в районе живота, и отсутствующей ногой"
Не понятно в чем тут сложность и где тут собственно ссылки.
{ type: corpse, name: Patrick, creature: white_orc, wounds: [stomach], legs: { left }}
Ты кто вообще?
Да, я тоже думал о варианте три, присваивать айди объекту при сериализации и выставлять нормальную ссылку при десериализации.
>>26022
Так я не уверен именно в сохранениях, я уже добавляю такое свойство.
> где тут собственно ссылки
Я имел ввиду, что этот труп в инвентаре должен быть трупом исторической личности, а не генерик трупом орка.
https://habr.com/ru/articles/781022/
Использую SQLite для хранения данных(стейт юзера, инвентарь, вещи в магазине и прочее). Есть какие минусы у данного метода?
Мимодругойанон
Связи сделал через связи между таблицами в БД(o2o, m2m и т.д.), но их тут мало.
> сохранять отношение объектов, в которых есть ссылки на объекты
Это всё не нужно делать. Это только навредит. Когда у серьёзных студий в их обновлениях игор отваливаются сохранения - это как раз из-за того, что они в файл сохранений записывали сложные многоуровневые игровые состояния.
Самый бестпрактис для сохранений: сохранять ассоциативный список ключ-значение, то есть, словарь. Этот словарь у тебя должен висеть в памяти, созданный статическим конструктором, всё время существования игровой сессии. Это одна из редчайших ситуаций, когда синглтон - не является антипаттерном. Ключи - уникальные для каждой игровой сущности, например хэш статического пути ноды в дереве сцены, если путь может динамически меняться, то от него нужно отрезать всю динамическую часть, плюс соль в виде уникального имени самого инстанса объекта, который может быть задан ему только один раз.
В таком случае тебе неважно, какие там между объектами отношения, неважно, кто на что ссылается. При своей загрузке, объекты просто открывают ассоциативный словарь-синглтон, описывающий состояние игровой сессии (мира), если находят там свои ключи, значит они раньше существовали, значит они читают эти ключи и меняют своё внутреннее состояние, если нет, то значит - они родились! Как тот лунтик.
Сохранение и загрузка в этом случае сводятся к сериализации/десериализации глобального словаря-синглтона. Достаются за полсекунды, в руке лежат как влитые, и далее по тексту.
Кроме того, в документации предлагается вредный совет (ИМХО) безвусловно выгружать текущую сцену при активации загрузки сохранения. Ящитаю, здесь ты дожен грамотно подходить к процессу. Если в сохранении указано, что куррен-сцена это СценаА, и у тебя реально загружена СценаА, то менеджер загрузки может не перезагружать её, особенно если загрузка всех её ресурсов будет длиться некомфортно долго, а вместо этого, испустить сигнал "загружен сейв файл", после чего все подписанные на этот сигнал объекты принудительно сходят в глобальный словарь и обновят своё состояние.
Сразу же давай рассмотрим ситуацию, при которой на сцене "/root/world/location1" в сейв-файле есть данные по объекту "/root/world/location1/enemies/enemy1050", который был убит и удалён из дерева на момент загрузки сейва. Казалось бы, объекта нет, хоть испускай сигнал, хоть не испускай, никто не воскреснет, система сломана, разраб соснул. Но погоди, как минимум сама сцена тоже будет объектом-читателем, при испускании сигнала она так же восстановит своё состояние, в том числе, загрузит "/root/world/location1/enemies/enemy1050" и этот механизм ты должен также заложить в систему.
Короче говоря, загрузка сейва должна идти по дереву сверху вниз, в отличие от порядка вызова колбэков типа _ready которые идут снизу вверх, и корень дерева готов только когда готовы все его потомки. У тебя же наоборот, сначала загрузился корень, корень уже загружен - пропускаем этап, затем загрузились непосредственные потомки корня, П1, П2, П3, П2 уже загружен? - пропускаем, потом рекурсивно, если есть, грузятся недостающие потомки П1, П2, П3. И далее, пока рекурсивная функция менеджера загрузки не вернёт нулль, символизируя, что всё дерево восстановлено, после чего испускается наконец сигнал и все, кому надо перетасовываются. Враги становятся в позу с замахнувшимся над игроком мечом, и т.д.
И да, это всё делается во время паузы, я полагаю, когда вся загрузка окончена, пауза отключается и рубилово возобновляется.
> сохранять отношение объектов, в которых есть ссылки на объекты
Это всё не нужно делать. Это только навредит. Когда у серьёзных студий в их обновлениях игор отваливаются сохранения - это как раз из-за того, что они в файл сохранений записывали сложные многоуровневые игровые состояния.
Самый бестпрактис для сохранений: сохранять ассоциативный список ключ-значение, то есть, словарь. Этот словарь у тебя должен висеть в памяти, созданный статическим конструктором, всё время существования игровой сессии. Это одна из редчайших ситуаций, когда синглтон - не является антипаттерном. Ключи - уникальные для каждой игровой сущности, например хэш статического пути ноды в дереве сцены, если путь может динамически меняться, то от него нужно отрезать всю динамическую часть, плюс соль в виде уникального имени самого инстанса объекта, который может быть задан ему только один раз.
В таком случае тебе неважно, какие там между объектами отношения, неважно, кто на что ссылается. При своей загрузке, объекты просто открывают ассоциативный словарь-синглтон, описывающий состояние игровой сессии (мира), если находят там свои ключи, значит они раньше существовали, значит они читают эти ключи и меняют своё внутреннее состояние, если нет, то значит - они родились! Как тот лунтик.
Сохранение и загрузка в этом случае сводятся к сериализации/десериализации глобального словаря-синглтона. Достаются за полсекунды, в руке лежат как влитые, и далее по тексту.
Кроме того, в документации предлагается вредный совет (ИМХО) безвусловно выгружать текущую сцену при активации загрузки сохранения. Ящитаю, здесь ты дожен грамотно подходить к процессу. Если в сохранении указано, что куррен-сцена это СценаА, и у тебя реально загружена СценаА, то менеджер загрузки может не перезагружать её, особенно если загрузка всех её ресурсов будет длиться некомфортно долго, а вместо этого, испустить сигнал "загружен сейв файл", после чего все подписанные на этот сигнал объекты принудительно сходят в глобальный словарь и обновят своё состояние.
Сразу же давай рассмотрим ситуацию, при которой на сцене "/root/world/location1" в сейв-файле есть данные по объекту "/root/world/location1/enemies/enemy1050", который был убит и удалён из дерева на момент загрузки сейва. Казалось бы, объекта нет, хоть испускай сигнал, хоть не испускай, никто не воскреснет, система сломана, разраб соснул. Но погоди, как минимум сама сцена тоже будет объектом-читателем, при испускании сигнала она так же восстановит своё состояние, в том числе, загрузит "/root/world/location1/enemies/enemy1050" и этот механизм ты должен также заложить в систему.
Короче говоря, загрузка сейва должна идти по дереву сверху вниз, в отличие от порядка вызова колбэков типа _ready которые идут снизу вверх, и корень дерева готов только когда готовы все его потомки. У тебя же наоборот, сначала загрузился корень, корень уже загружен - пропускаем этап, затем загрузились непосредственные потомки корня, П1, П2, П3, П2 уже загружен? - пропускаем, потом рекурсивно, если есть, грузятся недостающие потомки П1, П2, П3. И далее, пока рекурсивная функция менеджера загрузки не вернёт нулль, символизируя, что всё дерево восстановлено, после чего испускается наконец сигнал и все, кому надо перетасовываются. Враги становятся в позу с замахнувшимся над игроком мечом, и т.д.
И да, это всё делается во время паузы, я полагаю, когда вся загрузка окончена, пауза отключается и рубилово возобновляется.
При этом, вышеописанная система максимально гибкая. С её помощью ты можешь реализовать любой стиль сохранения.
Хочешь быстрые сейвы по Ф5 Ф9? Чтобы игрок мог судорожно сохраниться за секунду до смерти и визжать как сучка, швыряя клавиатуру в монитор? Без проблем, биндишь функции сейва и лоада на Ф-клавиши.
Хочешь сейвы у костров и только когда вокруг костра нет агрящихся бомжей? - Пожалуйста, биндишь функцию сейва к функции "посидеть у костра".
Хочешь быстрые чекпойнты? - без проблем, заводишь в глобальном скрипте локаций локальную переменную "чекпоинт", в которую скидываешь, когда тебе надо, копию глобального словаря-состояния и если игрока убил босс, проигрываешь экран геймовера и копируешь локальный чекпойнт обратно в глобальный словарь и вызываешь сигнал обновления, как описано выше, при этом никакого взаимодействия с файловой системой не происходит, всё сидит в оперативке. Игрок перешёл в новую локацию, чекпойнт исчез вместе со старой локацией. Несколько локальных чекпойнтов на локации? Тоже не проблема. Неужели и это объяснять нужно? Прибиваешь копию глобального словаря к ноде-чекпойнту с визуальным флажком и бочкой или что там тебе нравится.
Погоди, есть ещё один важный момент, об который можно обжечься. Когда будешь делать такой вариант, сразу закладывай возможность блокировки чтения и блокировки записи в вышеописанный глобальный словарь. При активации загрузки - ты должен запретить запись в него, а при активации сохранения, наоборот - запретить чтение. Поскольку предполагается, что объекты будут постоянно по своему желанию ходить в него и читать-писать, им нужно уметь это ограничивать. Иначе можно опять же, получить испорченный сейвфайл, если в нем будут меняться данные в момент его выгрузки на диск.
Напиши в телегу