>>938493 (OP) Сап годотеры, собрался с духом и решил вкатиться Ппроблема в том что работаю на планшете в 3й версии годота. И я тупо не перевариваю, гд скрипт, хотел установить c# но во первых компилятор визуал код под андроид нужен, я устанавливал пиратку, но она неработает. И во вторых сам редактор при выборе внешнего редактора почему то не видит, мой внешний компилятор. Вообще возможно на мобильном андроиде обманываться c#?
>>938504 Значит нет. Ладно буду работать в скрипте. У меня есть пекарня, просто на дно работе в обеденное время пила всякое, вот купил мощный планшет и решил вместо работы на консоли или пердолинга в xamarin.android попробовать пилить на нормальном движке, тем более несколько лет назад я уже пробовал годо.
>>938502 Ты чет взял и превратил один из самых легких и беспроблемных движков в какой-то бег с препятствиями. И планшет, и андроид, и сисярп, и пиратская вижуал студия. А чтобы под андроид релиз собрать тебе еще андроид сдк и джава понадобится. Да у тебя талант к веселой жизни.
>>938258 → >но как понимаю их можно делать на yield Некрасиво, неудобно, негибко.
Приведу пример, который я уже частично реализовал. Вот у меня загрузчик. Он показывает лоадскрин с полосой прогресса, а сам в это время делает дело. Загрузчик один, но способен выполнять разные задачи: а) Начинать новую игру, загружая произвольный уровень б) Переходить с уровня на уровень в) Загружать сейв Работает он (в общих чертах, опуская подробности) так: var scenario: Array[Callable] var stage: int func _process(delta): var time = Time.get_ticks_msec() while Time.get_ticks_msec() - time < VREMYA: scenario[stage].call()
И для новой игры, допустим, сценарий такой: [load_level, instantiate_level, update_level_data, add_player] Для смены уровня такой: [save_player, unload_level, load_level, instantiate_level, update_level_data, restore_player] А для загрузки сейва какой-то такой: [load_save_file, unload_level, load_level, instantiate_level, add_player, update_data_from_save]
Выходит, что многие функции повторяются, к тому же в процессе разработки могут дорабатываться, меняться. При этом сам загрузчик остаётся в целом такой же. Если надо добавить/удалить функцию - просто правим сценарий. А сами функции могут вообще где угодно находиться.
>накладные расходы Да ну надо ж понимать, это инструмент для своих задач. Но вообще, учитывая, что callable это по сути указатель на функцию, а массив это по сути указатель на область данных, то я вообще хз, где тут могут быть какие-то расходы. Больше расход просто от факта переключения контекста.
>>938611 А ты внимательнее посмотри. У него загрузчик хитро балансирует нагрузку, не прибегая к многопоточности. Если цепочка вызовов затянулась дольше, чем VREMYA, то цикл останавливается и возобновляется в следующем фрейме. Предложи вариант, как ты это сделаешь ещё элегантнее?
>>938615 > Где ты там приостановление увидел? Ох блять... Ну почему даунинг-крюгеры такие? И ведь сам таким был. Аж вспоминать стыдно. Ты сам себя затроллил своим невежеством. Матчасть учи.
>>938626 Кто хочет, ищет возможности, кто не хочет - найдет миллион оправданий. Это для меня и таких как я. Уже продумываю как к своей игре добавить управление свища.
>>938596 >Полагаю Типа того. И там ещё много-много другого скрыто за >(в общих чертах, опуская подробности) В частности, сценарная функция должна возвращать интовый код ошибки. Если код == ERR_FILE_EOF, то stage += 1; если код == OK, то просто продолжаем молотить цикл; если код == ERR_BUSY, то прерываем цикл, ждём следующий фрейм; во всех остальных случаях совсем прекращаем загрузку и пишем код ошибки; для красоты оборачиваем его функцией error_code, чтобы не циферьку писало, а текстовое описание. И да, проверка прогресса и перерисовка полоски осуществляется отдельно, вне цикла.
>>938611 >Хз, не вижу причин тут городить такое вместо просто вызова функций. Всё зависит от масштаба. Для три вряд на ЯИ нет никаких причин что-то городить. Для road to vostok без городьбы не обойтись. У меня вот комплексные тяжёлые уровни, которым после загрузки ещё и ресурсы апдейтить надо. У кого-то вообще процедурная генерация. В прошлой игре уровни были простые, я не городил, просто показывал статичный экран с названием уровня, он висел секунду, пока левел грузился, было норм.
>>938623 >free Не фри. Это именно то, что нытики не поняли, когда W4Games выкатили свои версии портов. Нужны девелоперские ключи-лицензии от Сони/МС/Нинтендо. В W4Games ты бы это делал через прокси-Хуана, а тут ты сам должен Нинтенде забашлять бабла за девелоперские ключи.
>>938655 Чел, ты... Открой доки любого другого движка - там все начинается с реги в нинтендо. Ты какой то сверх наивный. Речь и идет о бесплатности порта, ты бы еще удивился что на айфон надо в эппле платно регаться.
>>938657 Нет, это ты недооцениваешь уровень наивности среднего желающего портануть свой 2д пиксель-арт платформер. Хватало нытиков, ожидавших что раз движок свободный, то им не придется платить никому и ничего. И которым пришлось долго объяснять что именно включено в цену портов от W4Games.
>ты бы еще удивился что на айфон надо в эппле платно регаться. Я бы нет. Теперь ты удивись тому, что это происходит регулярно. Даже в наших тредах. Типичная картина: приходит челик, желающий выложиться в гугл-плей, узнает что там 25 баксов и санкции-хуянкции, и с лицом грустной лягушки идет в яндекс игры. Хотя сама возможность сделать билд под андроид - бесплатная, да.
Поэтому всегда надо уточнять, что именно фри, а что нет.
>>938665 По уму инфа про платные и сложные для резидента реги должна быть в шапке ньюфаго треда. А не всякие ссылки на несуществующие треды давно заброшенных игр.
>>938672 Ну да. Но шапку все равно никто не читает. >сложные для резидента реги Для резидента они сейчас все сложные, так и живем теперь. Мне предыдущую работу вообще через крипту пришлось доделывать.
>>938708 Как трудно жить было. Может подскажешь тогда? Я хочу сверху всего наложить текстуру-фильтр, которая должна накладываться на все спрайты кроме одного. При этом я не могу изменить порядок спрайтов. Нашел способ через light2d и light mask, а еще что-нибудь есть?
>>938493 (OP) Короче челы подскажите, хочу перекатиться с юнити на годот. Делаю игру 2Д рпг, есть карта с тайлами, всякие интерфейсы персонажей, сражение примитивное, и заебался что в юньке слишком геморно это делать. На годоте будет проще реализовать вот это вот всё? Мне никаких заморочек не нужно, буквально примитив как на том же ренпи или почти любом движке для новелл. А на юньке такое ощущение что есть 100500 функций которые мне тупо не нужны и мешают.
>>938727 > На годоте будет проще реализовать вот это вот всё? Тонкий вопрос. У тебя с движком, как это нынче говорится, должна химия возникнуть. Если возникнет - будет легко и быстро.
Советов дай мудрых, анон. Делаю жрпг, застрял на странице создания персонажа. Сделал автозагруз параметров, хочу на кнопки минус и плюс повесить прибавку\убытие параметра, убытие и прибытие свободных очков. Понимаю, как сделать это для каждого параметра func minimum_par(): if Global.Power > 25: Global.Power -= 1 Global.FreePoints += 1 Но как сделать так, чтобы вставлять напрямую в функцию Power, Intellegent, Magic? То есть одна функция для всех вместо кучи функций на каждой кнопке?
Кто-нибудь разобрался как можно собрать, экспортировать и запустить сервер для проекта одной кнопкой, чтобы можно было запустить в браузере мобильного устройства в локальной сети? Как вы вообще дебажите веб версии своих игр под мобилки?
>>938772 > Но как сделать так, чтобы вставлять напрямую в функцию Power, Intellegent, Magic? Индексами. Все свои параметры занеси в энум. > enum Stats { Power, Intellegent, Magic } Индексы энума должны точно соответствовать порядку хранения параметров в базе данных (твой Global например). Далее навесь на все кнопки вызов сигнала с параметром: > buttonMagic.pressed.connect(my_pressed_callback, [Stats.Magic]) и далее в коллбэке тебе ничего уже не надо свитчить. Тебе уже в коллбэк параметром прилетает индекс стата, который тебе надо менять:
Заводишь переменную внутреннюю, допустим _stamina, вот это дело не трогаешь больше
Заводишь внешнюю, stamina с геттером и сеттером И так для всех статов, вдруг логика какая будет в сеттере
Делаешь функцию увеличения стата, где параметрами является тип чего увеличиваешь и насколько, внутрь кладешь свитч с типами статов, где уже присваиваешь суешь или добавляешь во внешнюю stamina нужное значение
Опционально эмитишь сигнал changed либо в сеттере, либо после свича, если где-то должно отслеживаться изменение статов, допустим для пересчёта макс за или чего-то такого
>>938821 > БРАТАН СПАСИБО ТЕБЕ ОГРОМНОЕ! Обращайтес. И ещё, раз у тебя есть глобальный объект, то и вышеуказанный энум объявляй в нём. Чтобы видели его все, кому надо.
>>938817 Я не вопрошавший, но спасибо большое. Ты сейчас мне показал, как я могу сделать лучше функции апдейта стат персонажей(но в другом двиге).
У меня там $npcs[id].statname, я как-то совсем забыл,что могу написать $npcs[id]['statname'].
Плотно держу в курсе:
Аноним25/02/24 Вск 11:24:04№93882958
>>938825 Ну, так-то по сути мой совет - это классика из нулевых, я тогда жил в глухой деревне без интернетов, душа просила кодинга, а из средств кодинга я нашёл на мамкиной пекарне только мс офис и пилил программы в ворде/экселе (как эта ваша деревотян). Там прямо формочку можно сделать с кнопками и текстбоксами, которую можно вызвать из документа. И вот эти кнопочки на формах VBA были искаропки с индексами. И первое что приходило в голову как использовать те индексы, это навесить на все кнопки из какой-либо группы на один обработчик. Много лет спустя, когда я перешел сначала на дельфи, потом на шарп, оказалось, что так же можно сделать и там, правда индексов искаропки уже не было, но прикрутить их несложно.
>>938832 Звучит как синдром Даунинг-Крюгера. Без обид, я тоже в молодости пилил ООП-тетрис, в котором каждый блок - это класс, а каждая фигура это класс из экземпляров класса-блока, а игровое поле - это класс из экземпляров-экземпляров, а потом я охуел, хуле ничего не работает?
Бляяя, нахуя я смотрел этот туториал https://youtu.be/rdUgf6r7w2Q?si=bLyGJiZu9S1_viLD Если можно было сделать все через _get_drag_data, _can_drop_data и _drop_data.... Че блять, многодневную работу переписывать?
Сап гдач, перекатился с шарпов на гдскрипт 4 и в толк не возьму, а где перегрузка? Хуй перегрузишь метод, конструктор и прочее.... В документации ничего подобного, а городить, методы с дохуиллионами параметров по умолчанию с последующей их проверкой тот ещё раковник
@tool Вот у меня нода2Д (точнее, Marker2D). Я хочу, чтобы она выполняла кое-какое действие (для начала хотя бы принт в консоль) каждый раз, когда я её в редакторе мышкой передвигаю. Как это сделать? func _draw(): print("не работает") Пробовал присоединять сигналы draw и item_rect_changed - тоже не сработало. Пробовал также выставлять set_notify_transform(true) - не помогло. Как?
>>938979 >каждый раз, когда я её в редакторе мышкой передвигаю А что если добавить в нее контрол-ноду с сигналом on mouse pressed, и печатать по этому сигналу? Хз сработает ли в с tool.
годотеры а для годоти есть какой нибудь ии плагин который по текстовому описанию будет за меня писать код, что то исправлять, проверять, менять и тд? ну или не плагин а где то отдельно на сайте есть что то бесплатное и с открытым доступом?
посмотрел отрывок с презентации гугловского гемини с ваганеткой, терайном и тд...пиздец.
>>939029 Да, у меня тоже. Там в схеме, похоже, участвуют какие-то 2 прокси (Алсо это значит, что какой то васян может собирать инфу какие видосы ты смотришь). Может быть они упали, может быть им нужен впн. Хз.
>>939058 Я как бы в курсе, где я живу, но всё равно, если есть возможность не ебаться предпочитаю не ебаться. Но в уме держу, что есть вот такая и вот эдакая возможность.
>>939063 Есть какие то аддоны, но скорее всего они устарели и вот они возможно обращаются к API нейронок, а это вроде платно, в отличии от чатов. Наверное можно самому как то наколхозить.
>>939084 >переводят англоязычные туториалы с ютуба с помощью яндекс-браузера Нахуя для встроенного переводчика в ябравузер ебаться в проксями, виртуалками и песочницами о чем анон выше упоминает
>>939101 Не поэтому. А потому что зачем нужен лишний зонд фсб с доступом ко всему диску, если от браузера нужна только функция перевода конкретного видео?
Сап, годачеры. Внимание, вопрос. Как мне в Godot-е в 2d игре запилить лестницу по типу пикрл? Я использую просто спрайт персонажа, никакой скелетки. Сверху - понятно, персонаж будет "падать" (звучит, как плохое решение), а подъем? Нашел решение с помощью tween (но пока ничего не понял, т.к. слышу об этом впервые) https://gamedev.stackexchange.com/questions/183919/how-should-i-implement-stair-climbing Какие еще есть варианты?
Просто сделать наклонную поверхность - не подойдет, будет коряво смотреться
>>939122 > Какие еще есть варианты? Ебани персонажу под ноги на джойнт невидимое кинематикбоди с шейпом в виде крестовины, и при обнаружении лестницы крути в направлении инпута. Базарю, натурал экспириенс будет!
>>939122 >Просто сделать наклонную поверхность - не подойдет, будет коряво смотреться В старых играх, если внимательно на них посмотреть, физическое представление лестниц часто было именно наклонной поверхностью. А "лестницы" были визуальной моделькой. Рекомендую учиться у дидов.
>>939122 Там используется Raycast, допустим, в сторону, один на уровне стопы, второй на уровне коленки (сразу над ступенькой), соотетственно если игрок идет в сторону, если он уперся в стену, то оба рейкаста попадут в стену, а если он стоит перед ступенькой, то верхний покажет пусто, и значит можно перемещать игрока на ступеньку. дальше у них там еще какие то условия, например еще raycast вверх, чтобы не подниматься на ступеньку, если ты уперся в потолок
Ну а перемещение можешь делать любым способом.
В ответе чел добавляет еще один Raycast, сверху вниз, чтобы определить точку на ступеньке в которую пойдем. Tween просто предназначен для плавного движения, сглаживания. yield ставит выполнение функции на паузу, пока анимация tween не закончится. Первая анимация поднимает его вертикально на месте, до высоты ступеньки (и еще на -2 пикселя выше). Вторая анимация уже двигает его горизонтально, до точки куда изначально рейкаст пересекся с полом ступеньки. Можешь хоть просто x++ делать. Или нарисовать Path2D и по нему проводить. Или сделать анимацию, но тогда надо чтобы ступеньки на уровне потом ей соответствовали.
Для пули вообще нет смысла делать прожектайл. Она слишком быстро летит. Гораздо эффективнее, чтобы в момент выстрела оружие строило баллистическую траекторию в сторону выстрела и каждый следующий кадр из точки траектории, в которой пуля должна быть строятся рейкасты по всем предыдущим точкам, и проверяется, что пуля прострелила за это время. И кроме того, если в логику заложено что пуля может пробивать некоторые объекты меняя скорость и энергию, то от точки прострела строится новая траектория и в том же кадре пересчитываются рейкасты.
Хочу сделать стилизованную траву с однородной покраской покраской. Для этого сделал вторую камеру сверху что бы получать карту цвета с тенями. Но как сделать что бы на второй камере объекты кроме земли были невидимы но отбрасывали тень?
>>939255 Наоборот для второй камеры нужны только тени и plane на которую эти тени отбрасывают невидимые объекты (но невидимые они только для второй камеры)
>>939224 Емнип, продублировать объекты, сделать их shadow only. По возможности (смотря какой эффект делаешь) при этом у основного объекта убрать тень. Тогда получится, отрисовка всех объектов без тени + отрисовка всех теней без объектов, плюс какой-то небольшой оверхед на дубликаты нод + оверхед на вьюпорт. В общем, если сделаешь, можешь поделиться замерами производительности.
>>939199 Можно рассчитать. Пуля из калаша/м16 летит ~1000м/сек. При 30 фпс это ~30м/кадр, при 60 фпс ~15м/кадр Так что надо понять, есть ли на карте зона длиной больше 15-30м. Для сравнения 5м это парковочное место (легковушка + место для выезда). Итого 3-6 машин в длину Для примера возьмем CS dust2, для нее легко нашелся пик с измерениями, и в ней хороший микс коротких/средних дистанций 100 юнитов = 100 дюймов = 2,54м (+-на игровые условности типа огромных дверей)
Видим несколько коридоров 2000-3000 юнитов = 50-75м, это больше 15-30м, физическая не-хитскан пуля летела бы 2-5 кадров.
Это если не брать большие дистанции, в играх с открытой местностью, может быть и 300-500-800м, конечно там перекрывают леса и здания, но вот например на пик2 в таркове посередине дороги 400м стоит. А еще пуля в воздухе замедляется, на которких расстояних неважно, на 500м уже процентов на 30
Это, конечно, если упарываться в реализм. А если упарываться в фан, то это может быть в обе стороны. Не только в сторону хитскана, но и наоборот, в сторону медленно летящих ракет, от которых можно увернуться.
>>939314 Разумеется речь про снайперские игры на открытой местности, где сидишь в подлеске со слонобойкой, измеряешь ветер, закладываешь поправку в оптику, прицеливаешься, выходит цель из бункера, задерживаешь дыхание. БАХ!
А если серьёзно, наличие мелких деталей отличает годноту от проходняка на ассетах. Но и в мелких деталях тонуть нельзя, а то будешь выверять каждое микродвижение годами, а игры тонет. Или вот как аноны выше угорели по теням. За каким-то хуем пытаются сделать идеальные тени. Хотя игроки на это в последнюю очередь обращают внимание. Когда в игре скучно - начинаются доёбки к графону. Когда в игре весело - набигут моддеры и наделают модов на рейтрейс-тени и вообще, все баги сами пофиксят.
Ой, блять, я случайно секрет успеха Скайрима спалил. Срочно удолите пост!
>>939364 > рабочий прототип с дефолтыми ассетами Там кстати есть челик, Kenney, нахуячил горы ассетов на любой случай. Опенсорц! Двадэ и тридэ! Налетай, годаны!
>>939122 Но зачем, а главное нахуя? Но ок, вот что я предлагаю. 1. Физически лестница - это наклонная поверхность. Тушка-капсула движется по ней. 2. Нюанс - процедурная анимация. На ступеньках маркеры, и персонаж должен наступать только на них. Это никак не влияет на движение тушки, только на анимацию ног. В принципе, на скелетах в четвёрке это реально сделать. Но лично я не вижу смысла. Куча возни, куча потенциальных мест для бага, а заметно всё равно не будет.
>>939381 А, забыл про >Я использую просто спрайт персонажа, никакой скелетки. Ну тогда просто синхронизировать анимацию со ступеньками, чтобы кадр с шагом приходился обязательно на ступень.
Годаны, подскажите одну вещь. Я пытаюсь отловить инпут через _unhandled_input (потому что хочу его захандлить другой нодой). Но по пути кто-то третий его хандлит. Как понять, кто именно? И вообще. Может ли вообще нода без какой-либо поверхности получать мышиные события через унхандлед? Или их гарантированно сожрёт окружение?
>>939391 В дебаггере есть вкладка misc, в ней показывается на кого ты кликнул. Получать может, да - проверил на пустой Node, это та, что белая, без ничего.
А что страшного произойдёт, если я буду коннектить уже законнекченные сигналы, не проверяя is_connected? Ну то есть, да, ошибку показывает. Но ведь эта проверка уже есть в движке. Так ли необходимо дублировать её в скрипте?
Игра с видом сверху по типу диаблы в 3d, как реализовать большую бесшевную карту и что бы не пососать по производительности? Я так понимаю мне терейн нужен и как то его делить, И объекты выгружать загружать в зависимости от дальности камеры? Как это вообще делать?
>>939399 Например так. https://github.com/Yogoda/ZoneLoadingSystem Или самом разбить на квадратные чанки. Террейн можно делать плагинами Но придется повозиться в таком случае со стыками, как рисовать один большой террейн. Хотя может новые плагины в 4-ке уже умеют, не смотрел.
>>939404 >>939463 Я не годотер местный, но поддержу: никто не подвязывался писать готовое решение, дали направление, куда копать, если что-то ещё неясно -- надо конкретизировать вопрос и просить подробнее обьяснить, но если решил на указанный вектор, говорить "это самое дружелюбное коммьюнити годот?", то может не стоит заходить к злым годотерам, которые тебя бедного обижают? Или ты мазохист? И ещё раз: я не годотер, а интересующийся, потому им предъвлять за мой пост не надо.
>>938504 >для полноценного девелопа нужна перканя Несколько лет назад работал в нём, хочу в мобильное 2д на нём. Юнька меня сильно беспокоит в последнее время, да и 2д там какое-то хреновое. >>938518 Самасунг Галаху? Не? >>938523 >Ты чет взял и превратил один из самых легких и беспроблемных движков в какой-то бег с препятствиями. Вот сейчас в голос, он не лёгкий, он другой, хоть сам редактор действительно простой. Но со своими подводными в виде кодинга, который очень требователен к разрабу, ну и конечно эти уёбищные отступы, табы блядь, я даже вспомнил почему меня так бесят эти питоновские отрыжки. И почему я сразу пересел на родной шарп.
>>938526 И почему у тебя 3 версия, если 4.2 уже есть Она легче, меньше потребляет ресурсов, там есть все технологии которые мне нужны для 2д, сцены легко и быстро билдятся и я сразу вижу как игра будет выглядеть на планшете. 4.2 его я установил первым в надежде что там будет искоробки поддержка шарпа, но так как такого не оказалось, да и билдилось всё подолгу, решил попробовать старую версию.
Не ну и чего тутор со скрипом и матом, тыкая в милиписечные конки я почти выполнил, единственно не совсем понял какой нод отвечает за отображение кнопок на эране планшета, вроде это должен быть UI узел, судя по другим примерам, но его я не обнаружил.
Ну и чего у меня blend-файлы не импортит нихуя? Точнее подхватывает вброшенный файл, но в дереве он отображается с красным крестиком, на сцену не закидывается, и редактор снова и снова пытается его импортнуть в проект, но безуспешно.
Всё настроил по гайдам: указал галочку импорта blend-файла в настройках проекта, и указал папку блендера в настройках самого редактора. Пробовал буквально хотя бы куб закинуть, но не хочет нормально импортить и всё. ВТФ?
>>939593 Нет. Именно путь к директории нужен. К тому же Годот сам его нашёл. При попытке указать именно exe-шник, в настройке всё равно остаётся только путь к директории блендера.
Ставьте блендер через scoop и у вас будут все версии с момента первой установки (или с момента последней очистки вручную, потому что автоматически он старые версии не чистит).
Канешн, места будет жрать много, зато на вот такой случай вы будете приятно удивлены тем, что ничего дополнительно качать не надо.
>>939598 И джижок и блендер самые свежие. Блендер сам работает как надо. Пытался буквально создать новый файл с одним кубом. Его тоже не может экспортнуть.
Господа, проблема. Я делаю дефолтный yield(get_tree().create_timer(0.15), "timeout") для таймаута. Пока таймаут идет, есть шанс что тело, с которым функция работала, уже уничтожилось. Тогда код упадет с previously freed instance.
И сейчас я понимаю что подобных мест в моем коде много. Как быть?
>>939620 Используй паттерн MVP (Model-View-Presener) и тогда сможешь легко переносить свою модель игры с движка на движок. Главное, чтобы модель ничего не знала о движке. Дивжок (презентер) чтобы ничего не знал о модели. И только вью будет специальным адаптером, знающим обо всех и движок будет знать о нём.
>>939621 > Как быть? Думать над архитектурой. Вот эти одноразовые таймеры - это игрушка дьявола. Они нужны только для узкоспецифичных задач. А ты их напихал повсюду. Избавляйся от них. Что тебе нужно? 15 миллисекунд подождать? Накинь в класс переменную и аккумулируй в неё дельту, пока 0.15 не накапает.
>>939654 Я чувствую незакрытый гештальт: как будто бы существует способ научить геймдеву даже таких анонов, которые чувствуют себя тупыми, но способ этот найти не могу.
>>939659 Если тебе интересно, то больше всего проблем у меня сейчас с интерфейсом и звуками. Че как рисовать, делать ума не приложу. А ведь еще с кодом разбираться надо. Ну и пиздец. Залетел в геймдев с двух ног без нихуя.
Кто компелировал движок, объясните эту хуйню, должен ли я делать # Build export templates часть? Что она вообще даёт? (Вот оффицальный гайд по компиляции):
>>939674 > Что она вообще даёт? Она даёт темплейты экспорта. > должен ли я делать # Build export templates часть? Если твой билд ничем не отличается от релизов, то не должен. Но тогда непонятно, зачем ты конпелируешь? Значит, твой билд чем-то отличается. Вот ты собрал редактор, что-то поделал в нём, а потом начинаешь экспортировать проект. Но темплейты-то ты где возьмёшь? Если движок подтянет официальные темплейты, в них не будет твоих фич, которые ты вконпелировал в редактор. Таким образом, конпелируя свой билд, ты должен конпелировать и темплейты под него.
>>939685 > p=windows Для венды. > target=template_debug Для дебаг темплейта под венду. > module_mono_enabled=yes Для дебаг темплейта с включённым шарпом под венду.
>>939685 При экспорте есть галочка, делать релиз или дебаг версию. Видимо, это для тех, кто хочет отладить именно билд игры, а не запущенную из под редактора версию, мало ли какая то разница может всплыть, если редактор не все чистит при инициализации
>>939677 Я не нашел туториалов по отрисовке ui, только о том как настроить узлы с готовыми ассетами. Про создание звуков даже не гуглил, такого нет кмк.
>>939699 >>939700 Короче разобрался, эти exe надо в костум темплейт запихивать где настройки компиляции для конкретного проекта, если по путям распихать нихуя работать не будет. Естественно про это нигде не написано и никто про это не говорит, пердолинг конечно пиздец.
>>939708 > про это нигде не написано и никто про это не говорит Там в окне настройки экспорта всё прекрасно написано. Как Хуан мог предвидеть, что ты не умеешь в... ой, ладно. Разобрались и ладушки! Удачной тебе сборки.
>>939715 Я и так делаю свою игру, нахуй вы мне сдались? Я кстати не годотер, а интересующийся из другого треда. И я собираюсь в определённый момент получать бабло с этого, как пойму что мне не стыдно постить свои поделия, потому юнити даже не рассматриваю.
Так, я тут немного запутался. Допустим я хочу веб билд в я.игры, и в идеале чтобы он работал на iOS (поскольку не хочу делать нативный билд и связываться с аккаунтом разработчика эппл) Но я читал, что в крайних версиях iOS (12+? 14+?) депрекейтит OpenGL. Что это означает? Значит, на iOS Godot 3 (GLES2/3) вообще не заработает, и будет просто черный экран? Как будет работать 4.3? Я сейчас прочитал что там вообще что-то в 4.3.dev3 не заработало и надо проверить свежайшую 4.3.dev4 https://github.com/godotengine/godot/issues/88964 Там предлагается какая нибудь прослойка в MetalANGLE или что то подобное? Или там WebGL 2.0? Дело в браузере Сафари? Ситуация может как то улучишиться, вроде бы эппл сейчас в ЕС и, возможно РФ подводят к установке сторонних браузеров? Здесь вообще указано https://docs.godotengine.org/en/latest/tutorials/export/exporting_for_web.html Что "Godot 4's HTML5 exports currently cannot run on macOS and iOS due to upstream bugs with SharedArrayBuffer and WebGL 2.0", ну насколько мы поняли SharedArrayBuffers уже исправлены, а про проблемы WebGL 2.0 я еще не нарыл. Кто-то тестил со свежего айфона? Например на итче или ЯИ, игру на какой нибудь версии 3.5.х или 4.3.х? Какие вообще варианты? Сделать игру на 3 и забить на iOS в вебе? Делать на 4-ке, но заработает ли? В принципе я читал что на я.играх процент игроков с мобилок может быть и низким.
>>939742 Эпл вообще для богатых. И для богатых пользователей и для богатых разрабов. Если у тебя нет денег на эпл, чтобы лично девелопить на живом железе, то ты там не желателен, тебя не звали, тебе не рады, уйди оттуда и не приходи, пока не станешь богат.
Может ли узел принимать сигналы от нескольких кнопок одним методом? Делаю меню выбора персонажей, хочу чтобы сигнал pressed() от кнопки передавал в корневой нод или сразу в кнопку Play - как лучше? название этой кнопки. Вот типа есть 2 кнопки: SelectSlavik с надписью SLAVIK, и SelectBatya с надписью BATYA. При нажатии на любую из кнопок она посылает pressed(self.text) (либо кастомный сигнал, если с помощью pressed нельзя ничего передавать, ещё не разобрался), а в принимающем скрипте стоит одна функция func _on_YOBA_button_pressed(characterName): // selected_character = characterName # соответственно SLAVIK либо BATYA которая ловит текст кнопки и сохраняет его, чтобы при нажатии кнопки Play началась игра выбранным персонажем
>>939780 >Может ли узел принимать сигналы от нескольких кнопок одним методом? Конечно. В твой дальнейший текст не вчитывался, ты главное соедини сигналы правильно.
>>939785 Сигнал в четвёрке превратился в объект первого класса! Не знаю, что это значит, но пишется так: > Slavique,pressed.connect(self, on_pressed, [Slavique]
>>939783 ху-е-та. Нейронка не умеет в 2д пиксель арт, а сидеть перерисовывать за ней еще геморней чем самому рисовать. Хотя.. Запалю годноту анонам, для асеприте, платную конечно, но тот кто сможет ее себе позволить нихуя не пожалеет, pixellab.ai кличат, эх были бы у меня лишние деньги и возможность оплачивать..
>>939793 >pixellab.ai Посмотрел их. Впечатляет. Особенно фича с consistent style. И в анимацию умеет. Но все равно анимирование занимает по 20 минут, а это, по моему мнению, слишком много для такого унылого занятия. Подожду когда анимацию сделают в 1 кнопку, а пока продолжу свое простенькое 3д.
>>939793 > pixellab.ai Годно. Но я так понимаю она только генерирует пиксельарт на основе уже имеющегося стиля + описание? Есть ли что-то подобное или может какой пайплайн, чтобы генерировать пиксель-арт(фоны\элементы интерьера и персонажей) по одному только описанию? Все никак не могу найти 2д художника для мобилки, поэтому думаю перекатиться в пиксельную графику и нейронки.
>>939811 >Все никак не могу найти 2д художника для мобилки, поэтому думаю перекатиться в пиксельную графику и нейронки. Так попробуй сначала просто нейронки для 2д, не пиксель.
Читаю что у годот проблемы с большими играми. Вот например я буду делать игру с видом сверху как в диабло но со стилизованной графикой. Но большой мир и бесшовная карта, я пососу и если да то почему?
>>939872 > у годот проблемы с большими играми Проблемы с большими играми не у движка, а у Кирилла, блять, сколько можно вам повторять? Напридумываете себе, что можно скайрим в одно ебало сделать, а потом жалуетесь, что движок виноват.
Как же меня спасает метадата на объектах. Вместо создания отдельной переменной и пихания ее внутрь, просто цепляешь мету, используешь, выкидываешь. 10 из 10 фича.
>>939872 При виде сверху - нет, я уже писал, бери аддон Zone loading, или сделай свои квадратные чанки, при виде сверху нет тех проблем что есть у игр типа геншина или гта, где ты можешь залезть на вершину горы и тебе надо видеть вообще все, и гору и несколько городов с разными домиками и разные локации с лавой, водой и так далее. У тебя только то, что есть в кадре плюс минус. Второй твой бро это Multimesh Instance тоже как вариант через плагин Scatter. Потому что на уровнях часто много повторяющихся вещей, типа поручней-столбиков. Третий бро это пулы объектов, для пулек и всего такого. Еще желательно сделать загрузку многопоточной и включить прекомпиляцию шейдеров. В принципе за неделю-две можешь сделать прототип, скачав прям готовых моделек которые в этом треде даже кидали, и узнать подходит или нет. Так что вряд ли большой мир внесет какие-то дополнительные проблемы против просто одной 3д сцены (производительность которой ты тоже можешь оценить на всяких демках) Собрать что ли самому вомпирсурвайлайк по быстрому...
>>939968 Тоже сначала упоролся, но увы это практически не получится использовать. Ну только если у тебя не что-то вроде казуалки где эти картинки просто как фишки будут двигаться.
>>939968 А еще, есть такая проблема, которая становится понятна после очень долгого использования далле. Это видно по твоим крайним пикам - нейронка попадает в некий пузырь стиля, и поэтому результат будет слишком узнаваться, потому что и другие игроделы будут пользоваться ей же. Ну это не считая мелочи, что надо сначала как то привести это к пиксельной сетке (тут такую штуку кинули, но я пока не пробовал https://github.com/Astropulse/pixeldetector )
>>940202 Забавная история, в общем "так исторически сложилось", с точки зрения программирования, Quad определяется как 4 точки по углам, а Plane как точка в пространстве и угол. Причем про Plane в 3-ке долго висело предупреждение что он deprecated из за глюков, но выяснилось что это не глюки, а математика так работает, и надо просто его сабдивить на большее кол-во кусочков. В общем в результате по опросам так и не смогли определиться какой из них нужнее, квады для частиц и постпроцесса по умолчанию поперек экрана, а плейны горизонтально для самодельных террейнов. https://github.com/godotengine/godot-proposals/issues/4516
>>940226 Фига подробности. Вроде понял. Плейн значит сабдивайдим на под-плейны, в результате получаем террейн, а квад он квад и есть. И если нужно простое ровное полотно, то используем квад.
>>940267 Это потому, что многие паттерны пришли совсем из другой индустрии - корпоративные, тяжелые приложения и сайты, и решают другие задачи, в частности взаимозаменяемость работников. Паттерны - это не магия, это просто повторяющаяся закономерность в коде, которой дали имя. А использовать или не использовать надо смотреть индивидуально. В частности с точки зрения оверхеда, на который в корпоратах покласть, клиенты подождут. Об архитектуре надо думать, в любой игре больше чем на недельный геймджем. Когда думаешь, как расположить ноды в сцене, разделить ли визуал и коллайдеры на отдельные ветки, как сделать всплывающие окошки, как сделать сцену, чтобы ее можно было переиспользовать на другом уровне или кастомизировать врага, будешь ли использовать сцену или json - вот уже и архитектура.
>>940269 То, что ты перечислил, приходит с опытом и делается практически автоматом. Думаю чел на скрине говорит про вот эти бесконечные переписывания кусков кода, чтобы удовлетворить своего внутреннего архитектора-окрщика, хотя в целом и так ок, и переписывания можно было избежать добавив десятку ифов. Этим заниматься можно долго и масштабно, а игра тем временем не делается.
Плюс как заметили в том треде, корпоративные сайты и приложения поддерживаются долго, их постоянно надо дорабатывать и актуализировать. Игры это "релизнул и забыл".
>>940289 >Игры это "релизнул и забыл". Зависит от игры, планов на расширение/дополнения, сингл/мульти направленности особенно. Например, делаю игру с несколькими механиками и уровнями, если заходит, захочу добавить новые главы, новые механики, чтобы их просто добавлять без переписывания всего. Играю в одну ммо которая тянет уже больше 15 лет. И там постоянно у них боль и страдание, очередная обнова привела к - крашам от звука нового пета, крашам от выхода в меню, тормозам если выйти в другую локацию, народ бугуртит и массово отказывается от подписок. Конечно мои игры 15 лет не проживут, но и одноразовыми делать не хочется.
>>940317 >захочу добавить новые главы Если популярность имеется, то почему бы тогда не сделать вторую часть игры? Кэша больше, видимость выше. К примеру есть франшиза, Swords and Sandals, автор - соло-идюк, последние версии как раз на годоте пилит. >в одну ммо которая тянет уже больше 15 лет Во что гоняешь?
А что это такое интересное у камеры появилось? Compositor это я так понял задел на будущее на эффекты типа планарных отражений https://github.com/godotengine/godot-proposals/issues/7916 А по аттрибутам, там теперь (авто)выдержка + на выбор DOF или фокусное расстояние. Это вынесли из WorldEnvironment что ли?
В прошлом треде про тени и динамическое время дня писал, что стоит делить меши на несколько мелких, а сейчас нашел еще такй вариант: Calinou: If you have objects appearing/disappearing in the shadow based on camera movement, it sounds like you have large unsubdivided meshes. Try increasing Pancake Size in the DirectionalLight3D's properties.
>>940267 Пиздец нахуй блять. Каким же надо говноделом быть для такого. Я вот открываю те части проекта, которые писал месяц назад, и а) легко их читаю и понимаю, как этим пользоваться, б) не хочу ничего поменять, всё уже хорошо выстроено, в) оно прекрасно расширяется под нужды растущего проекта, И вдобавок г) я могу скопипастить части из прошлых проектов с минимальными изменениями. И это охуенно ускоряет разработку. Просто, блять, СРАЗУ писать хорошо. Приучиться не делать говна изначально - и разработка попрёт реально быстро. И дизигн паттерны как раз для этого и нужны.
А вот если открыть мой сааамый первый проект, то там говно - движущая сила. И именно поэтому наступил момент, когда я не смог его дальше писать, потому что оно было непонятное, не расширяемое и просто кривое.
Кароч. Палю способ, который тут для себя обнаружил, теперь буду всегда применять, он клёвый и расширяемый.
Как делать настройки. 1. Создаём класс, описывающий опцию. В нём должны быть поля: type, default, value, description. Опционально (очень желательно) в сеттерах проверять типы default и value через typeof. Опционально описываем _init(dict: Dictionary), чтобы легко создавать экземпляры из словарей. 2. Также внутри этого класса есть сигнал value_changed(new_value), который вызывается прямо в сеттере value. Вот в нём-то вся мякотка. 3. Сами экземпляры класса храним в словаре. Опционально описываем функции-интерфейсы get_option и set_option, чтобы работать со строгой типизацией. 4. При описании ноды, на которую влияет та или иная настройка, делаем так: в _реади чекаем опции и коннектим сигнал value_changed к себе в функцию, где соответственно обрабатываем.
Таким образом, не нужно перегружать настроечный скрипт - в нём ТОЛЬКО настройки. А всё их действие описывается там, где ему и место. И можно наделать неограниченное количество нод, на которых влияет та или иная опция. И вообще, такой скрипт без напряга пишется за часочек, а использовать можно где угодно. Бонусом. Описывать сами настройки в каком-нибудь json-е или csv, и тогда скрипт будет вообще элементарно переносимый из проекта в проект.
>>940420 >не хочу ничего поменять, всё уже хорошо выстроено Пиздишь, антош. Если тебе ничего не хочется переписать - тебе просто похуй на то что ты написал.
>>940437 Есть еще вариант: он за это время никак не развился. Но мы, безыгорники, можем цепляться к нему как угодно, он-то знает, что у него игры есть, а у тебя нету.
>>940487 > он за это время никак не развился. Все так. Я пока тоже безыгорный, но у меня есть реально работающие проекты использующие мой код. И из этого опыта могу сказать, что процесс улучшения бесконечен. Конечно, это не отменяет того, что сразу надо страться делать как минимум "нормально".
>>940517 У меня например код может посмотреть любой мимокрок. Правда я смотрел код других людей и большинства он говной воняет, там вообще никакой структуры нет.
>>940513 Пиши код максимально говнисто, чтобы прям ничего не было понятно. Пили огромные картинки, чтобы заебывало их просматривать. Музло тоже делай такое чтобы не возможно было слушать, скрип там или еще чего добавляй. И норм.
>>940700 Так же как в трёшке (с несколько другими именами, например origin вместо translation). Так же как тебе предлагали выше: >>940672
>>940673 > Но x/y/z у меня тоже строки. Хоть строки, хоть, були. Функция get() возвращает тебе значение свойства. Если значением является объект со свойствами-строками, ты должен вызвать у него функцию get(). Парсинг путей вида "super.sub.sub.property" в движок не закладывался. > То есть, я бы хотел получить именно финальное значение по строке. То есть, тебе надо самому велосипедить свою рекурсивную функцию получения свойства вложенных объектов по строке-пути.
>>940702 И кроме того, трансформ в экосистеме годота не является объектом, является базовым типом, и не содержит функции get() которая есть только у объектов.
Поэтому, если писать рекурсивную функцию, в неё придётся заложить длиннющий паттернматчинг для всех базовых составных типов, типа трансформов и векторов. К объектам применять гет, к типам применять вложенные матчи.
Сап, /GD/ач. Сделал прототип 3д игрульки для мобилок на движке четвёртой версии, экспорт наладил по инструкции с официальных доков, установил jdk, sdk и всё-всё-всё что там было написано. Движок без ошибок произвёл апк-файл, который я установил на своём стареньком говнодроиде сяоми и на новеньком дорогом андроиде друга. На старом игра едва грузится на 3д сцене, на новом всё улетает в максимальный фпс. На старом телефоне даже не отрисовываются 3д объекты (только элементы 2д), на новом всё работает как задумано. Меня смущают лаги и я хочу выяснить как можно сократить их количество, потому задам несколько вопросов опытным Годотерам:
1) Много ли съедают fps ноды Area3d, которые подключены к скрипту через сигналы "area/body entered/exited"? Если да, то что можно с ними сделать кроме удаления и упрощения ИИ?
2) Много ли съедают fps ноды типа CSG?
3) Много ли съедают fps сигналы от кнопок типа "sex_button_just_pressed()"? Если да, то как перестроить управление? Есть ли смысл все кнопки засовывать в функцию _input(event) или это не даёт никакого результата?
4) Может ли экспорт повлиять на fps на разных android устройствах? Я пробовал устанавливать sdk под более старые смартфоны (lollipop 4.1), но результата это не дало.
5) Много ли жрут fps операции с Vector3 и обращением к нему? Есть ли какие-то способы его немного оптимизировать?
6) Есть ли смысл создавать отдельные ноды (белые) для крупных участков кода вроде логики передвижения в 3д пространстве или всё можно хранить в одном скрипте и просто обращаться к функциям внутри единого скрипта без потери производительности?
7) Таймеры — годнота? Что можно использовать для периодичного запуска функций с проверками без таймеров (я слышал, что они ненадёжные и могут сильно влиять на фпс, ведь они просчитывают постоянно сколько прошло времени и проверяют достигли ли они конца)?
7) Какие есть другие способы повышения производительности кроме растаскивания всех операций по разным функциям, которые находятся вне _process(delta) и _physics_process(delta) без постоянного обращения не необходимых в каждый момент времени проверок?
>>940734 P.S. На моём старом андроиде логика 3д мира работает, я могу взаимодействовать с ним, скрипты работают, но сами объекты не показываются, плюс я использую две камеры — от первого и от третьего лица, которые переключаются через .set_current(), где я сначала отключаю одну камеру, затем включаю другую.
>>939779 Я думаю у людей нет идеи для игры, которую они хотели бы реализовать. У меня тоже всегда было желание сидеть в движке копаться, но пока не придумал сам себе игру, не мог ни с чего начать. Сейчас вот сижу, пилю потихоничку, вот уже месяц как, и даже не планирую заканчивать, каждый день только больше solution'ов придумываю
Опытные ремесленники, скиньте годные гойды гайды по созданию инвентаря и сохранений. Посмотрел на ютабчике пару роликов, там духота сплошная, которую мой мозг в ближайшее время не хочет и не может осилить. Вот чтоб максимально простенько было, а там уже разберусь.
>>940734 Со старыми андроидами все неоднозначно. Там цирк с конями, разброд и шатание от чипа к чипу.
Мои наблюдения таковы. Снижай разрешение - часто дает наибольший прирост фпс. Динамический свет не используй. Меши - чем проще, тем лучше. CSG - нахуй. Гридмап - нахуй. Пройдись по настройкам проекта, выключи лишнее, снизь качество. GLES2 на старых андроидах шустрее и стабильнее чем GLES3.
>GLES2 и GLES3 А можно ли через какую-то функцию менять рендер? Допустим, сделал я настройки графики, а чтобы применить надо было бы перезапускать игру. Такое возможно?
>>940786 >>940789 Емнип CSG медленноват при динамическом изменении (подвинули куб в цилиндре и пересчитались все грани). При просто рендере, примелимо.
>>940801 При изначальном создании тоже, увы. >Creating CSG nodes has a significant CPU cost compared to creating a MeshInstance3D with a PrimitiveMesh.
>>940788 Имхо на андроиде это делается несколько по другому, ты делаешь две разных APK с глес2 и глес3, а потом когда выкладываешь в гуглплей, указываешь каким мобильникам какие давать скачивать. Но, я теоретизирую. не говоря о том, что APK официально уже ВСЕ, и надо собирать ABB И где ты узнаешь список мобильников тоже вопрос. А еще там можно блеклистить слабые модели, чтобы им вообще не давать скачать игру, так даже геншин делает.
>>940802 Запечь их можно простым аддоном который конвертит их в .obj. Ну насчет изначального создания, это можно скрыть загрузкой уровня, остается спавн, его тоже можно заспавнить и просто передвигать в нужное место. Наверное.
>>941011 Сложно сказать, господин анонс. Зависит от версии движка и от стиля, который ты хочешь. Тру™ пиксель игра делается через stretch mode viewport, низкое нативное разрешение (желательно соответствовать х2, х4 от нативного разрешения) и советы анона выше. Это советы для тройки.
Фейковая пиксель игра, когда пиксели не строго по внутри-игровой пиксельной сетке, - через мод 2д, на разрешение уже похуй.
>>941018 >низкое нативное разрешение (желательно соответствовать х2, х4 от нативного разрешения) Отвлекся и коряво написал. Низкое нативное разрешение, и тест разрешение х2 выше нативного.
Здравствуйте. У меня на сцене есть узел Area2D, внутри которого 4 прямоугольные коллизии. Как сделать спаун врагов внутри этих коллизий, чтобы избежать ручного набора координат? Типа если передвину/поменяю размер, не менять код.
>>941048 Я бы брал центр ареа2д, добавлял к нему рандомные отступы по х и у, потом бы проверял находится ли эта потенциальная спавн-точка внутри коллизий. Если нет - повторить генерацию точки.
>>941056 Правильный подход. А у меня в похожем случае вообще полигон2д был, и я не придумал ничего лучше чем перебирать примерные значения. Ну и норм работало.
>>941063 С полигонами сложнее, можно попробовать их триангулировать и потом генерить внутри одного из треугольников (может быть можно даже по формуле), но вот вроде как не любой произвольный полигон триангулируется. (Искал как то либу для отрисовки генеренных SVG, а там прямым текстом пишут что она может зависнуть, такая то печаль). А если брать рандом, то при неудачной форме может долго искать подходящую точку, хотя скорее всего это несуществуенно. Но вдруг не уложится за кадр.
Анонче, хелп. В сцене хочу озвучить звук шагов, однако столкнулся с проблемой, что при if Input.is_action_pressed("down"): звук проигрывается только раз, причем после отжатия кнопки, а при if Input.is_action_just_pressed("down"): Вообще не проигрывается. Цель вижу в том, что нажимается кнопка, идет звук шагов. Отпускаю, должен стихнуть. Мне отдельно звук покурить или что?
>>941134 Проверь свойства повтора на файле в импорте, и на самом плеере. По крайней мере в тройке с этим хаос был.
>if Input.is_action_pressed("down"): >проигрывается после отжатия кнопки Рассмотри такую возможность. Твое условие работает постоянно, пока ты держишь кнопку, и следовательно постоянно у тебя делается audioplayer.start(). То есть аудиоплеер проигрывает первую миллисекунду, потом ты его снова стартуешь, и он снова проигрывает первую миллисекунду, и так по кругу. Как результат ты слышишь ничего. А когда кнопку ты наконец отпускаешь, у плеера появляется возможность проиграть весь файл, потому что ты ему мозг стартом не ебешь.
>>941137 > повтора на файле в импорте, и на самом плеере. По крайней мере в тройке с этим хаос был. Блин, он мне не дает залупить файл, говорит этот файл был импортирован, поэтому не может быть редактирован. Втф? >Твое условие работает постоянно. Да, соррян, ступил.
>>941139 Я же говорю, он просто не дает это сделать, выдает: "этотресурс был импортирован, поэтому он не редактируем, измените его настройки в панели импорта, а затем реимпортируйте" Я прожимаю все настройки, реимпортирую, но это просто не работает
Перешел с Unity на Godot. Делаю шутер. Как далеко я смогу зайти, не знаю. Веду дневник разработки, чтобы видеть свой прогресс https://t.me/neonhawk_dev
Перешел с Unity на Godot. Делаю шутер. Как далеко я смогу зайти, не знаю. Веду дневник разработки, чтобы видеть свой прогресс https://t.me/neonhawk_dev
>>941182 А нахуя? Перемещать по вектору - это тупо сложение. А из скорости и направления это ж надо тригонометрию считать. Ну понадобится тебе угол направления - сделаешь Vector2.angle(). Но он обычно не нужен.
> Почему во всяких гайдах, в той же книге, направление игрока записывают в переменную velocity? Почему не direction условный, velocity это же скорость. velocity - это direction умноженная на speed
В определенных чатах разработчиков веб игр говорят, что годот для веба не очень. Размер билда большой, загрузка, перформанс. А я хочу именно в веб, стоит ли оставаться в godot?
>>941343 Средний. Для того кол-ва фич, что есть, очень даже. Я использую 3-ю версию для лоуполи 3д. В противном случае мне бы пришлось ковыряться в threejs довольно низкоуровнево. Перформанс, надо срезать многие фичи, многое упрощать и оптимизировать. Для 2д, ну наверное можно взять что то чисто js. А так, возьми и попробуй, сделать прототип и померять нетрудно. В конце концов потом прототип перенести на тот же threejs. Как минимум у тебя остается удобный редактор.
>>941343 Хз, все свои игры выложил и под веб тоже. По стилям совсем разное. Пиксели, 2д, 3д. Никаких проблем. Я чет думаю ты читаешь каких-то ноудевов, которым лишь бы причину найти ничего не делать.
Сап, годач. Есть у меня global скрипт, а в нем заяц, в зайце — утка, в утке — яйцо некий словарь items = {} с другими словарями внутри. И вот в одном из скриптов я делаю так: var item = global_list_of_items.items[item_name] item["i_amount"] = 33
Только вот при изменении item["i_amount"] меняется значение ключа "i_amount" в исходном словаре items = {} - становится равно 33
Просто duplicate не сработал: var items_copy = global_list_of_items.items.duplicate() var item = items_copy[item_name] item["i_amount"] = 33
А вот duplicate для каждого ключа по отдельности сработал: var copy_items = {} var original_items = global_list_of_items.items for key in original_items.keys(): copy_items[key] = original_items[key].duplicate() var item = new_items[item_name] item["i_amount"] = 33
Но получается какая-то хрень, т.к. мне много где надо будет обращаться к списку предметов. В принципе я могу эту функцию засунуть в глобальный скрипт с предметами, чтобы сократить запись: func duplicate_items(): var copy_items = {} for key in items.keys(): copy_items[key] = items[key].duplicate() return(copy_items) В других скриптаз будет: var copy_items = global_list_of_items.duplicate_items() var item = copy_items[item_name]
Либо сделать сеттер в глобальном скрипте, который бы менял значение словаря items на исходное при любом изменении, хммм
>>941369 Но из его поста выходит, что у него int 33 передаётся из словаря по ссылке. Нонсенс. >>941366 > И вот в одном из скриптов я делаю так: > var item = global_list_of_items.items[item_name] > item["i_amount"] = 33
> Только вот при изменении item["i_amount"] меняется значение ключа "i_amount" в исходном словаре items = {} - становится равно 33
>>941370 Словари и массивы (и, вроде бы, теперь Callable) в гдскрипте передаются по ссылке а не по значению. А если понадобиться передать 33 по ссылке, то можно обернуть его в массив или объект
Поделюсь своей историей. В прошлом треде обсуждали публикацию на крейзигеймс. Так вот, я переписал кусок старого годот 3 проекта, избавился от тредов в своем коде, следовательно избавился от необходимости в sharedbufferarray, и опубликовался на крейзигеймс. Анон, с которым я разговаривал в прошлом треде, говорил что они отказывают молча - без объяснения причин. Мне причины написали. Я их исправил, отправил снова, со второго раза меня опубликовали. Потом мне написали еще раз, с анализом взаимодействия юзеров с моей игрой, и с советами как игру улучшить. Их я тоже реализовал.
По итогам могу сказать что хоть для популярности крейзигеймс 3/5, но для качества игры - 5/5. Их команда мочераторов дала мне именно тот фидбек, которого я не мог добиться от обычных юзеров. Тогда как юзеры, в ответ на мои вопросы, выдавливали "эээ пук кек ну вот тут чет непонятно, ну хуй знает", то эти мочухи все четко сформулировали и навалили советов как исправить.
>>941415 Хуй их знает. Моя игра не супер-популярна по меркам крейзигеймс, но внимание мочухов я получил. Ничего особенного не делал. Игра висела на рассмотрении дня 3, потом ответ "исправьте a, b, c". Через пару месяцев отправлю им еще одну старую свою игру, отпишусь по результатам.
Еще они предлагают рекламу встроить в саму игру через их апи. Я отказался. Без встроенной рекламы ты получаешь процент от той рекламы, которая у них на страницах показывается. За пару дней мне пара евро набежала. Вывод через палку.
>>941419 >Absolute Games Падажжи, это те которые аг.ру? Хрена эти деды перепрофилировались.
Спасибо. Просто не хочется рекламу в игру пихать. По крайней мере не в эти две, они для души. Для них я ставлю pay what you want когда платформа позволяет, либо отдаю бесплатно. Рекламу может потом, для бездушной мобильной дрочильни.
>>941422 ЕМНИП scale.x=-1 у физических тел не работает потому что это будет nonuniform scale. там надо сами коллайдеры подвигать. Ну если у тебя простой вариант ты можешь просто спавнить один из вариантов, левый или правый.
>>941400 >Анон, с которым я разговаривал в прошлом треде, говорил что они отказывают молча - без объяснения причин. Как я читал где-то в тележных чатиках: они отказывают молча, если им игра "не подходит". Хуй знает, какие там критерии подхожести, но у меня вот так вышло, причём даже другой билд залить и снова отправить на рассмотрение нельзя. Очень рад за тебя, анонче. Завидую, но по-товарищески. Не хочешь ли теперь на ЯИ сунуться? Пройдя одну мочерацию, с другими должно быть полегче. Говорят, с разных платформ разная статистика, кому-то с яндекса даже больше капает.
>>941439 Я понимаю так. SharedBuffer имеет много подводных камней безопасности, от спектра/мелтдауна, до утечек. Поэтому его включают вместе с CORS: same-origin, который изолирует каждый процесс и для сервера, и для клиента. Изоляция на клиенте затрудняет работу скриптам с третьего домена на странице с игрой. А именно через эти скрипты обычно и показывается реклама. И не все рекламодатели успели научиться это решать. Так что банально проблема в бабле.
>>941309 Нет, тем более, большая часть изменений у меня в логике игры, а не визуально заметные. Вот, я сегодня изменил логику хранения ассетов неписей, чтобы мог их наборы масштабировать, прикрутил фичу к взаимодействию с неписями, пофиксил пару багов и сделал ещё ассеты, некототорые ассеты переделал. Что я тут мог бы показать кроме кода? Ассеты, но там ничего интересного.
>>941447 А ты понимаешь, что второй скриншот выглядит ХУЖЕ первого, несмотря на тени? Потому что "затемнить дохуя, пережечь и влепить лампочки" не равно "выстроить освещение сцены"
>>941444 Ебать. А ведь это серьёзней чем я думал. Т.е. sb полностью блокируют нахуй любую рекламу и решить это практически невозможно, если не использовать рекламу которая будет встраиваться в домен, что звучит невозможно нахуй. А там ещё всякие говновсплывающие окна а авторизацией не работают. Охуеть просто.
Ебаные аутисты и пидорасы опять откатили прогресс в прошлое. Как же заебало.
Здравствуйте, у меня есть сцены объектов с параметрами(пример Вася), есть сцены с кнопочками, которые должны улучшать эти параметры. Как связать одно с другим? Мне не хочется вручную прописывать миллион одинаковых сигналов для каждого объекта, а как сделать более лаконично и по умному я не знаю.
>>941466 Не совсем понятно, как и где у тебя планируют располагаться кнопочки, но можешь сделать один сигнал, а в нем передавать разные параметры в зависимости от кнопочки
>>941469 кнопки будут распоагаться в отдельном скроллбаре, и какой что нужно прописать в сигнале, чтобы к конкретному экзмепляру другой сцены передать данные?
>>941466 > а как сделать более лаконично и по умному Через экспорты. У объекта "вася" в скрипте ты должен сделать @export var GUIButton И привязать к ней все сигналы один раз. Далее, сколько бы ты вась не поставил на сцену, вручную или скриптом, ты должен загрузить в GUIButton валидный экземпляр. В редакторе ты через инспектор выберешь существующую ноду. Если надо кодом, то > var v = load("vasya").instantiate() > var g = load("gui").instantiate() > GUI.add_child(g) > v.GUIButton = g > Mobs.add_child(v) Ну, как-то так. НО! Без чёткого понимания архитектуры твоего проекта, давать советы бессмысленно, уверен, ты нихуя не понел из моего поста.
>>941444 Спасибо анон что пояснил, а я даже не думал о таком, вся синхронизация через SAB была. Ебать вот это открытие-то нахуй. Чем дольше вникаю тем глубже кроличья нора. Нужно обязательно модифицировать код и добавить варианты работы и синхроанизации каких-то данных между потоками. Жозенько конечно, хорошо что наткнулся на это, иначе бы обосрался и пришлось в продакшене пытаться переписывать свой движок.
В целом идея такая - иметь несколько воркеров, синхронихировать время через RAF, синхронизировать данные через postmessage с transferable объектами. Будут полностью независимые потоки, но с передачей данных между потоками. Впринципе должно работать. Но синхронизация такая слишком сложная. Но у меня работать будет. Вероятно годот и хуан с этим не справится никак вообще, слишком сложно.
>>941507 > годот и хуан с этим не справится никак вообще Вообще-то справляется. Речь о том, что не справляются хостеры игор, не справляются с многопоточными играми. > у меня работать будет Скажешь "гоп" как выскочишь.
>>941509 > Вообще-то справляется. Нет, не справляется и не справится, слишком сложная реализация. Отдельные подсистемы нужно на разные ядра раскидывать и синхронизацию вводить для них. Либо одни и те же системы с сложной синхронизацией. Короче не айс. > Речь о том, что не справляются хостеры игор, не справляются с многопоточными играми. Нет, просто обоссаный хром обоссался, создал дыру и не смог нормально изолировать сайты. Хз когда исправят, годиков через пять, наверное, не меньше. До той поры у годода нет шансов. Там суть в том что рекламу не сможешь встроить в страницу, потому что реклама может из разных источников быть и эти источники могут уже с твоего сайта воровать данные из-за этой самой дыры. > Скажешь "гоп" как выскочишь. Оно уже работает через наивный подход, но наивный не самый производительный и красивый. Дальше попишу немношк, покумекаю как сделать лучше и красивее.
Расскажу я вам одну историю про робота. Этот робот жил под землёй и рыл себе туннели. А работал он от солнечного света. Чтобы работать ему надо было, чтобы по оптоволокну через фотоприёмники свет попадал прямо ему в ядро. У него было выращено на поверхность множество оптоволокон, но вот беда, ночью солнце заходит и света нет. И тогда робот придумал замечательную идею. Пока наверху день, робот накапливал энергию солнца в специальных молекулах, которые образовывали связи, бомбардируясь фотонами. По потребностям робота он генерировал себе три вида молекул: СВЕТ, ТЕПЛО и КРУЧЕНИЕ. Когда молекулы заработали, робот перестал зависеть от дневного света, смог оторваться от ранее выращенных волокон и углубился дальше в лес, затем по руслу реки, к небольшому городу N, где и спрятался под большим автомобильным мостом.
https://github.com/godotengine/godot/issues/35606 Господа анонсы делающие пиксельарт игры, как вы боретесь с тряской линкрелейтед? Впринципи в ексклюзив фуллскрин она практически незаметна, но это на фуллхд монике, как будет на 2к и 4к хуй его поймешь. За оконный режим вообще молчу, там тряска на уровне шиза из движкосрача, укачать может. Пиксель перфект я не преследую, нахуй не нужон, за пиксельснап трансформа знаю, но эта хуйня может вызвать только приступ эпилепсии. Настройки проекта если нужны: размер вьюпорта 480х270, мод канвас айтем, скейл мод целочисленый, юзаю четверку. Из за чего собсно происходит эта тряска я понимаю, но не понимаю нахуя это было сделано так криво. Вообще на текущей стадии проекта меня это волновать не должно, но сука, не могу успокоиться зная о такой проблеме.
>>941694 Тут много моментов. Проблема в основном вылезает когда у тебя внутригровые пиксели располагаются не по пикксельной сетке. Отчасти это чинится фиксированным разрешением и запретом его менять. Второй момент - плавная субпиксельная камера (x:22.222, y:33.3333), заставляющая весь вьюпорт съезжать с пиксельной сетки. Можешь использовать вью мод 2д вместо вьюпорта. Можешь скалировать спрайты на побольше, тогда проблема менее заметна. Можешь двигать камеру только по целочисленным значениям. Еще такое видел, но не тестил: https://godotshaders.com/shader/sub-pixel-accurate-pixel-sprite-filtering/
После двух своих тру-пиксель-перфект игр перешел на лоуполи 3д и рад пиздец. И моделить проще, и использовать.
>>941695 >Можешь использовать вью мод 2д вместо вьюпорта В четвёрке это и есть канвас айтем. А вот за шейдер спасибо, сейчас потесчу. >После двух своих тру-пиксель-перфект игр перешел на лоуполи 3д и рад пиздец. Да я если честно уже пожалел что в 2д полез, столько мозгоебли что проще в 3д уйти и начать моделировать. >>941696 >за пиксельснап трансформа знаю, но эта хуйня может вызвать только приступ эпилепсии. Это слышу звон, да не знаю где он, называется. Ссылка на документацию отношение к проблеме вообще никакого не имеет. >>941697 Это не то, да и в четверке не работает.
>>941699 Я щас мельком тройку потестил, тряска тоже есть, но только у спрайта на котором камера висит, надо будет попозже сделать полную копию сцен из 4 и посмотреть как оно, мб все таки придется пожертвовать фичами 4 и сесть на 3.
>>941698 >пожалел что в 2д полез 2д оно такое, да. Это все тот ебучий миф, что типа пиксель арт - просто. Типа навалил пикселей и поехал. Хуй там. Самый сложный стиль и для рисования и для работы с. При этом в годоте с ним еще норм работается, в отличии от некоторых других движков.
Годот это единственный движок на котором я смог сделать хоть что-то, хоть какой-то кусок говна, но выпустил. На фейзере я в ахуе как люди что-то делают, там даже редактора нет, просто в голове отыгрываешь и на каждый пук ищешь костыли, фиксы, хуиксы. Остальные маленькие движки для веба тоже супер перегружены какой-то парашей которая лично меня отпугивает
Блять, просто мистическая хуита творится! Делаю игру четко по гайду, как вдруг кто-то наслал проклятие!
Пик 1: по замыслу жизни кончаются, эмитится died(), вызывается рестарт из автолоадера, меняющий сцену. Но все зависает в момент эмита died. Пути к сценам прописаны правильно, ошибок нет. Если привязать рестарт к любому другому сигналу, будь тот таймер или кнопка, то все работает!
И самый сюр в том, что died тоже работает и не виснет, но только если он прямо не вызывает рестарт! Костыль с пика 2 работает. А если через таймер отсрочить рестарт в коде самого on_player_died, то опять зависон. Но в чем разница? КАК ЭТО ПОНЯТЬ???
>>941775 >все зависает Прозреваю циклические вызовы. Типа, ты эмитишь died, он вызывает смену уровня, а смена уровня снова вызывает функцию. эмитящую died. Например, перепроверяет хп. Поставь брейкпоинт и чекай.
>>941819 Да там какой-то лютый пиздец наступил с проектом. Зря я в существующий проект его подключил. Хорошо, что проект был двачетредный помогательный, и его в целом не жалко.
>>941775 Скорее всего никакой мистики не будет, если ты нарисуешь схемку-диаграмму что в каком порядке вызывается. У меня в начале знакомства тоже была похожая история. Так там дело оказалось в том, что я передвигал игрока в точку спавна, но был кадр, в котором срабатывал process, когда игрок все еще находился внутри триггера. Наверное по простому это можно решить, внутри restart() вызвав какую нибудь disablegame() которая отключает все триггеры или реакции на них.
Ещё раз, какой аналог объектов из стандартных языков программирования в годот? Как мне сделать условный массив собственных объектов, а не из какого-то вида встроенных нод?
>>941864 точнее в gdscript* Я нашёл что можно сделать autoload ноду со скриптом с собственными параметрами, но это явно нестандартный путь. Делать пустую ноду со скриптом и привязывать её в сцене? Или ещё как-то?
А можно как-нибудь проксировать экспорт-переменные ноды? Есть нода-компонент, допустим спавнер. Я в ней указываю (через экспорт-переменные) каких юнитов, с каким промежутком и куда спавнить. Потом я цепляю ноду-спавнер к нужным сценам-постройкам. Потом постройки ставлю на сцену-карту.
НО на сцене-карте мне недоступны экспорт-переменные ноды-спавнера. Они же внутри постройки сидят. Я конечно могу кликнуть по сцене-постройке, включить "редактируемые дети", и добраться до ноды-спавнера. Но это все дерево в кашу превращает. Хотелось бы, типа, указать "вот эту ноду подтягивай наверх и показывай как свою родную".
>>941869 Казалось, что видел такой аддон, но что-то не нашел сейчас.
Но вроде бы руками сделать несложно.
Первый - буквально вручную проксируй. Вот у кого то пример нашел. Думаю тут все понятно, в сцене-карте завести такие же свойства, в их сеттере пробежать циклом по всем нужным чайлдам и выставить там.
Второй, сейчас узнал что есть такая штука как inspector plugins. https://docs.godotengine.org/en/3.2/tutorials/plugins/editor/inspector_plugins.html Есть какой то аддон на тему, Extendable Inspector возможно он упростит создание Хотя, я его час поковырял, и не получилось быстро сделать то что ты хочешь. Это надо еще копать. Но технически это возможно, потому что редактор годота это просто сцены из контролов. Просто надо разобраться как там категории добавлять, undo redo.
>>941908 Т.е. общая идея что ты обнаруживаешь угол, на котором поворачивает веревка, и в этой точке его прилепляешь. Между этой и предыдущей точкой провешиваешь его немного, чтобы он свисал. От новой точки тянешь дальше.
>>941880 Спасибо огромное, это именно та сторона, куда мне надо было искать <3
Появилась ещё одна проблема, попытался сделать сохранение данных через ResourceSaver вроде описанного тут https://gdscript.com/solutions/how-to-save-and-load-godot-game-data/, при этом сохраняется объект Resource с массивом объектов внутри. Но при сохранении элементы массива не сохраняются. Если вместо объектов в массиве будут стандартные переменные - всё сохраняет. У этого есть решение, чтобы при этом оставить сохранение как ресурса?
If you don't use the flag "FLAG_BUNDLE_RESOURCES" the resources inside the array are instead saved as references to the resource class, this means that when loading the resources back they will just load the default resource with no aditional data.
>>941906 Спасибо, анон. Пока я решил в сцене-карте, в каждое здание, вручную добавлять ноду-спавнер. Тогда она доступна прямо на карте и позволяет выбирать все, что нужно. Геморно, но не так кашево как включать редактирование детей.
>>941938 Полистал список изменений, вроде ничего важного (кроме того интерактивного аудио с странным редактором). Хотя пару серьезных багов исправили, например BoneAttachment, неполное запекание LightMap, или вот такой суровый https://github.com/godotengine/godot/pull/88946 Виндо дефендер почему то сагрился на свежий файл.
Что-то не могу найти упоминания, в 4 GL Compatibility render в материалах не работает карта высот? Которая height, которая еще бывает называется Disaplcement.
- поменял extends Object на Resource (было логично, как только комп вчера выключил, сразу об этом подумал) - забыл поставить для переменной oparam "@extends"
Хм, я правильно понел, что экземпляр вложенной сцены (в текущую) не создать без (повторной) загрузки всей текущей сцены? Что-то типа $Child.instantiate() не получится, надо обязательно загружать файл сцены и потом уже экземплярить вложенную через get_node. Не хуярит ли это по производительности? inb4 хуярь нужную подсцену отдельным файлом
Сижу рисую домики для локации, 1 закончен на 80%, два других на 70% и 40%, и еще 2 останется нарисовать с нуля. Дальше буду рисовать водную растительность в виде камышей и прочей другой хрени. А ты чем занят анон? Делись.
>>942021 >Будет симулятор рыбалки? Не, из ближайшего похожего стардювали, но до этого ближайшего как от москвы до камчатки пешком. А так это домики будущей деревни рыбаков. >А я дизайню сумоиста в подгузниках. Показывай >>942023 Я если честно хуй забил на диздок, сначала тож хотел сесть написать, но хуй к носу прикинул, в тетрадку накидал мысли и идеи да и пошел рисовать.
>>942019 Пишу взрывы: как они распространяются, как рейкастят и дамажат, если луч не встретил препятствий. Ещё надо будет какие-то партикли им нарисовать, наверное.
А вы знали что если в фильтре, в древе нод, отфильтровать по любому имени, то в 3д редакторе не получится кликнуть ни на что, что не входит в список отфильтрованных нод? Я вот только сейчас обратил внимание. Удобно.
4.3 dev 5 is following quickly behind 4.3 dev 4 since we want to get something into your hands before we head over to the Game Developers Conference next week. Please test out this development release and give us lots of feedback, so that we can enter the beta phase shortly after we return!
Importantly, you will notice the development pace slow a little bit as many of the core developers are away for the week and taking a much needed vacation the following week.
Many core team members are heading to the Game Developers Conference next week (see our past announcement, and the line-up of games we’ll be showcasing), and preparing for this event in parallel to working on the upcoming Godot 4.3 release has kept us really busy!
So maintenance releases for 4.1 and 4.2 users fell through the cracks temporarily, but we’re getting back on track with a new set of release candidates for both 4.1.4 and 4.2.2.
Like we announced a while ago, the team is preparing to head over to the US for this year’s GDC! In case you have not heard about the conference before, you can read more about it here: gdconf.com
We will have a booth on the expo floor, and would love to welcome you there! You can play games (more about those below), chat with our sponsors, meet contributors to the engine and ask your burning questions to the Foundation members staffing the place. There might even be pins to snatch up 👀