Шапка: https://hipolink.me/godothread
Предыдущий: >>1014044 (OP)
Архивный: >>1008211 (OP)

Я как то пробовал и мне никакой метод не понравился. Может быть просто сделать такую текстуру где есть рамка и прозрачность alpha scissor?
А ты уверен что тебе НУЖНО генерировать меш через год, тем более сложный меш? Наверняка есть другой путь.
Давайте посвятим этот номер теме про то, как создать полностью разрушаемую окружающую среду и модели.
Чтобы уделать NFS и GTA с Minecraft
Ну да, текстура с ребрами.
Наверное можно взять тупо квадратную сетку и остальное генерить в UV одновременно с мешем.
Люди пишут в ту утонувшую тему.
Давай.
Оно всегда так, и на это попадаются ньюфаги. Просто листай условную нулевую пока не увидишь нужный тред.
Ну или как вариант, прожать Ctrl-End в треде по ссылке, обнаружить внизу перекат-пост, повторять пока не обнаружен перекат пост.
>1. не нужно.
Классическое отмазка ленивого комьюнити.
Перевод официальных доков просто на порядок притягивает ньюфагов, а значит популяризирует продукт.
Просто потому что читать на родном языке удобнее и быстрее.
Пчел, привыкай, ВСЕ тебе никогда не переведут. Рано или поздно тебе понадобится плагин, библиотека, чужой код из демо, что угодно нишевое и специфичное, и ты будешь радоваться что оно хотя бы на английском, а не на китайском или японском. Тру стори.
Не говоря уже о том что неофициальной "документации" типа ответов на форумах или туториалов на ютубе гораздо больше на английском, и никто тебе не будет переводить совет со стековерфлоу 2018 года.
>>17944
Кто сказал что я не владею анг? Я говорю про популяризацию. Всегда вижу какое у нас ленивое комьюнити (за 23 летний опыт айтишечки).
Проблема в том что ньюфагам и так трудно вкатываться, а ты ленивая жопа предлагаешь еще английский выучить параллельно (который по объему больше чем твой годот).
Кринжовики. Сами любите/выбираете технологию и сами ничего не делаете для популяризации это же опенсорс
Если кто-то не умеет ходить, мы что, теперь всю их жизнь на руках должны носить? Я тебе уже перечислил почему это тупиковый путь.
Разве что какой-нибудь нейропереводчик встроенный в браузры прокачается. Как костыли пойдет.
>Я тебе уже перечислил почему это тупиковый путь.
Да мы уже записали это в отмазку, успокойся. Думаешь я эту херню первый раз слышу за овер 20 лет?
Говорит лишь о том, что лично ТЫ до сих пор эту проблему не пофиксил. Не знаешь английский - учи. Знаешь - переводи для других.
Под кроваткой посмотри.
Нет, я человек который давно в айтишечке и лазаю по разным техам и каждый раз заходя вижу одну и тужу техническую бедность. Тут даже сравнение кинул. Немецкий вообще пограничный с английским языком, но комьюнити посчитало почему-то нужным перевести. Кстати, с украинского можно автопереводом сделать в пару минут
Я сам исключительно читаю только англоязычные доки (какое можно вообще ожидать качество от такого комьюнити). Единственно что я впервые бегло прочитал на русском, это доку раста. не знаю в каком она сейчас состоянии, наверняка заброшена уже

Ну раз такое дело то можешь взять и перевести для других. Поднимешь с 33% до 33.3%
Ну я всегда что-то отдаю сообществу (чаще ньюфагам), когда мой уровень потребление техой становится выше уровня нуб. И это не перевод, а какие-то узкие фишки с которым мне пришлось разбираться самому.
Это позволяет не чувствовать себя паразитом, который только потребляет и срет на бордах в движкосрачах.
Осталось только определиться хочу ли я работать с годот дальше.
>И это не перевод, а какие-то узкие фишки с которым мне пришлось разбираться самому.
И при этом тебя удивляет что другие поступают так же.
Ультимативный Путь дальше всегда один - в движкописатели.
Ну меня бы устроило 0% перевода, или больше 80% (если сравнивать с другими) Но не заброшенные 33%.
То есть, начали перевод, по-прокрастинировали и потом с великом еб..лом рассказывают, что ненужно.
Это какое-то позорище.
Там не написано что он переводил годот. Там написано что он бывший переводчик.
>В любом случае, ты уводишь от разговора
Хочу и увожу, что ты мне сделаешь?
>тут пол треда говорит что "ненужно"
Это совпадает с моим мнением, не вижу причин его менять.
>выглядят жалко.
Такими аргументами ты никого не замотивируешь.
> беда ру-комьюнити.
Иди и переводи, опен сорс же.
Спасибо популяризаторам за трафик крови, которая ничего не умеет, ничего не хочет и не будет импрувиться, в коммьюнити. Контрибутите в то, чтоб персонажи типа пикрил встречались еще чаще. Шоб вы понимале, на пике весь изначальный контекст проблемы. "Моб" "отказывается" "бежать" за "игроком", разберитесь кто-нибудь. Ну и упоминание нейроночки как вишенка на торте. Через 14 часов там еще узналось, что код списывался из какого-то курса на русском) на ютубе. Тоже тот еще рак, литературно воронка для айпад кидов в вайб кодинг геймдев пайплайн
Да, порвался, и че ты мне сделаешь?
Самое смешное впереди.
Люди ещё не вполне осознают, какой ящик пандоры открывают нейронками. В природе всё продумано миллионами лет эволюции: неиспользуемые ткани и органы отмирают. Спроси у чата ЖоПоТы, так ли это.

>Там не написано что он переводил годот
А это важно? Может быть тебе нужен пруф какал он сегодня или нет? Это важнее?
>Хочу и увожу, что ты мне сделаешь?
Заигнорю, нафиг мне чудо которое говорит сам с собой?
>Это совпадает с моим мнением
Ты не поверишь, но всем насрать на тебя. Мы обсуждаем конкретный пример про перевод.
>Иди и переводи, опен сорс же.
Спасибо, было очень интересно с тобой поговорить нет
>А это важно?
Важно что? Тебе не пришла в голову простая мысль, что он мог быть переводчиком стихов с французского, а не переводчиком тех документации годота?
>Заигнорю
И чего ж не заигнорил?
>Ты не поверишь, но всем насрать на тебя
Не поверю. Ты так бежал за мной по треду чтобы сказать об этом.
>Мы обсуждаем конкретный пример про перевод.
Эти вы все еще у тебя под кроватью?
>>Иди и переводи
>Спасибо, было очень интересно с тобой поговорить
Почему ты меняешь тему, вместо того чтобы идти и переводить самому? Ты бы уже страницы три перевел.
Это же стыдно что ты до сих пор ничего не перевел.
Какая нейронка меньше галюцинирует когда речь заходит о помощи с нетухлой версией годота?
А зачем тебе 4-ка? Это чисто для мечатателей об игре мечты, а если делать мобилку или веб игру, лучше брать 3-ку.
Из четверки действительно вырезали нужный мне функционал, аналог питоновского struct.unpack("2L3fh4b", bytedata). Но я хочу под стэндалоне вр делать. Импортировать ассеты прямо из архива AAA игры, сначала меш, потом текстуры и матерьялы, анимацию, физику, логику.
>>18008
Дело не в багах, а в галюцинациях, я пол часа с энтузиазмом изучал функционал которого нет. Нейронка вычитала гдето фичер реквест и считает что это есть в движкн. Из галюников: my_var = myarray[4:8], и var1, var2, var3 = [1, 2, 3].
Пытаюсь скрипт из блендер импортера переписать в годот. Magic_dword, fsize, fnumblocks, fnumtextures = struct.unpack("<4b3L", infile.read(4*4))

Ладно, сделал примерно похоже убрав всю рандомизацию и вместо шейпа поставив директед поинтс.

Уважаемые go-дотеры подскажите.
Уже давно сижу на юнити делаю всякие 3д/2д игрушки для души так сказать.
И в последнии пару лет уже пересел плотно на онли 2д, и все бы классно и нравится, но вот подумываю, а не лучше ли будет перейти на годот ради такого? Мне всякие супер штуки не нужны, гоняю спрайты по экрану, анимирую, и все вообщемто.
С# нравится и проблем с ним не возникает, но перейти на чтото похожее думаю не сложно будет, все люблю делать только кодом в скриптах если возможно.
Из того что обычно требуется это - Шифрование ресурсов и кода чтобы не могли вскрыть, платформеность ПК-Андроид, ну и все.
Стоит вкатываться и изучать ради моих целей?
>Стоит вкатываться и изучать
Всегда стоит.
>Шифрование кода
C# как раскрытая книга легко вскрывается. Впрочем как и гдскрипт.
Более-менее сложно вскрывается только C++, об этом было в прошлом треде.
>перейти на чтото похожее
В годоте основные языки это GDscript (больше похож на питон), C# тоже есть (но утяжеляет билд рантаймом) и C++ для более тонкой работы.
>платформеность ПК-Андроид
Ну эти из коробки. Из коробки нет только всяких нинтендо свичей, которые надо портировать самому или у издателя.
Единственное что для доступности мобилок и веба традиционно продолжаю советовать делать игру на 3 (gles2), а не 4 версии. Алсо в 4-ке C# пока не экспортируется в веб.
>Шифрование ресурсов
Какие нибудь сейвы-Json-тексты относительно легко зашифровать, а вот насчет 2д спрайтов не припомню готовых решений. Возможно можно наколхозить что то самому, изменяя пиксели, склеивая спрайты из тайлов, подменять что то в шейдерах.
Конечно стоит. Чем больше движков знаешь - тем ты эффективнее.
Чтоб никто не узнал, какие у него синглтоны осуществляют функционал мультиплеерных кнопок.
Что странного ты тут увидел? Кто-то не хочет отдавать часть своей души, кто-то не хочет чтобы его для-души кто-то украл и начал продавать от своего имени, кто-то мечтает что для-души взлетит и начнет приносить миллионы, кому-то интересна просто техническая сторона этого вопроса. я например рипал модель со скетчфаба и одну плейстейшн игру, там заморачиваются с обфускацией, это интересно само по себе
А сколько игр ты уже опубликовал в релиз?
>Странно.
Что странного? У всех свои тараканы, мы между прочем на сосаче сидим, не самом здоровом месте в интернете.
Сначала не мог понять как вообще заставить рендерится определенную область.
Первое что попробовал это сабвьюпорт расстянутый на весь экран для карты и другой фиксированного размера для всего остального. Получиться то получилось, но результат не удовлетворил. Во первых какого то хуя спрайты были в линейной фильтрации, даже с отключенной фильтрацией у сабвьюпорта. Во вторых картинка рендерилась в разрешении на 0.5-1? пикселя больше заданного из за чего появились халфпиксели, пробовал и уменьшать и увеличивать разрешение, но избавиться от них так и не получилось. В третьих спрайты двигались как то масляно, как будто они не передвигаются, а их как масло размазывают, хуйня странная короче.
Вторым попытался клиповать детей, это в теории звучит даже хуево, но я один хуй реализовал, расписывать как делал не буду ибо аналогично делаются всякие индикаторы местонахождения. Хоть это и работало отлично, но все же лишние ресурсы жрало нормально так из за колличества объектов.
Третьим попытался тупо скрывать объекты вышедшие из заданной области. Хоть тоже и работало, но это не то что нужно.
И вот пока возился с партиклами, добавляя материал для анимации, заметил такой параметр как light mode на который до этого вообще не обращал внимания.. Боже блять, ебаный тупой хуан, нахуй ты его в такие ебеня запихнул, почему то как объект реагирует на свет определяет ебаный материал а не сам объект. Вобщем light mode - light only и pointlight с текстурой нужного размера - решили проблему рендеринга определенной области полностью. Правда не ебу скажется ли это на производительности в вебе, надеюсь что нет ибо пока все заебись.
С самими прозрачными черными полосами не так уж долго и ебался, с помощью контейнеров и colorrect сделал что и хотел, проблема была только в том что интуитивно настройка параметров якорей нихуя не понятна, пришлось кучу комбинации перетыкать чтоб понять че да как.
Сначала не мог понять как вообще заставить рендерится определенную область.
Первое что попробовал это сабвьюпорт расстянутый на весь экран для карты и другой фиксированного размера для всего остального. Получиться то получилось, но результат не удовлетворил. Во первых какого то хуя спрайты были в линейной фильтрации, даже с отключенной фильтрацией у сабвьюпорта. Во вторых картинка рендерилась в разрешении на 0.5-1? пикселя больше заданного из за чего появились халфпиксели, пробовал и уменьшать и увеличивать разрешение, но избавиться от них так и не получилось. В третьих спрайты двигались как то масляно, как будто они не передвигаются, а их как масло размазывают, хуйня странная короче.
Вторым попытался клиповать детей, это в теории звучит даже хуево, но я один хуй реализовал, расписывать как делал не буду ибо аналогично делаются всякие индикаторы местонахождения. Хоть это и работало отлично, но все же лишние ресурсы жрало нормально так из за колличества объектов.
Третьим попытался тупо скрывать объекты вышедшие из заданной области. Хоть тоже и работало, но это не то что нужно.
И вот пока возился с партиклами, добавляя материал для анимации, заметил такой параметр как light mode на который до этого вообще не обращал внимания.. Боже блять, ебаный тупой хуан, нахуй ты его в такие ебеня запихнул, почему то как объект реагирует на свет определяет ебаный материал а не сам объект. Вобщем light mode - light only и pointlight с текстурой нужного размера - решили проблему рендеринга определенной области полностью. Правда не ебу скажется ли это на производительности в вебе, надеюсь что нет ибо пока все заебись.
С самими прозрачными черными полосами не так уж долго и ебался, с помощью контейнеров и colorrect сделал что и хотел, проблема была только в том что интуитивно настройка параметров якорей нихуя не понятна, пришлось кучу комбинации перетыкать чтоб понять че да как.
Увы, слишком глубоко зашел, релизнуть должен в этом году и не могу тратить время на перевод такого большого для соло проекта.
Тем более там еще 3.7 впереди.
Увы. Удачного релиза.

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

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

632x578, 0:20
Я к ним так же применяю силу в зивисимости от направления, чтобы они более менее ровно летели, но пока они выровнятся, проходит много времени
>Четверка?
4.3
>Джолт?
Хз что это
>Интеграт форсес юзаешь?
Вот щас попробовал, ничего вроде не изменилось, может использую неправильно. А так даю силу в физическом процессе.
Вот какое у меня предположение, попробуй настроить веса элементам цепи (твоя косичка собрана как цепь, поэтому будем называть её цепью, ок?) настрой так, чтобы самый тяжёлый был у точки крепления, а следующие за ним всё легче и легче. Должно сработать. Ну, с дивана выглядит как план.
Не, не вышло, ещё больше наоборот крутить начал. Он как бы при начале смены позиции дёргает конец на себя и раскручивает, а потом стабилизируется, как-то с гравитацией это кароч сувязано мне кажется.
Лан пофиг, потом может к чему-то приду
Sonic colors?
Депония?
DOOM?
Ты слепой. Тред по сравнению с несколькими месяцами назад просто стоит. Ты прополосни свой гноящийся рот, и скажи нормально если есть что сказать.
Раньше аноны постили свой прогрес, сейчас никого нет. Все сидят на жопах и с умным видом размышляют о таких глобальных темах как значение синглтонов в рамках современной культуры игростроения. Разбавляя иногда техническими вопросами, без постинга прогресса того - получилось, у них или нет. Предположу что показывать просто нечего. Те кто спрашивал просто поняли у себя в голове ответ на свою проблему, и не стали дальше развивать свои поделки...

480x360, 2:27
Я бы попостил, но щас всю неделю на заводе работаю... Ещё пк обновил... И на зубы деньги нужны... И про запас нужно сверху накопить....
Двачую анона, работа душит и игры делать не даёт. Ещё и здоровье мозги ебёт
Тред про движок, естественно технические вопросы более релевантны чем постинг прогресса.
Я не могу свой прогресс постить, но могу поныть что скоп большой и что дизайн уровней мозг выносит объемом работы. Следующую игру сделаю буквально на одном экране и напихаю туда систем аля кликер, чтобы юзер сидел и пыхтел там до охуения и никуда не бегал.

1920x1020, 0:08
мимо
Как в Spore?

https://www.youtube.com/watch?v=IqA7HeuKp98&t=899s
Демопати - это где обычно присылают что то для ретро 8 битных компьютеров, или хотя бы для ДОС, там есть категории программы 128 байт, или 1 Кб, 4Кб, 8Кб, но есть и категория ПК, туда обычно шлют что то самописное, допустим c++/opengl. А тут вот кто-то прислал демку на Годоте.

Нет. Ну смотря как считать конечно, вот сейчас попробовал минимальный PCK с простым эффектом и весит около 8Кб, наверняка можно в нем еще что-то почистить. Но еще рантайм же движка несколько десятков мегабайт. Так что если движок уже предустановлен в каком нибудь линуксе можно натянуть сову на глобус и сказать что распростаняешь только PCK. Что-то вроде распространения .Net и Java программ.

1920x1080, 1:39
В принципе можно пересобрать, выкинув лишние модули, но ниже ~15мб, вроде, никак. А текстуры нагенерировать нойзом/градиентом сразу в движке.
Я про его PCK 8 мегабайт говорю, это не включая рантайм. У него еще и несколько картин в коридоре. Сходу не скажу получится ли меньше чем PNG сделать какой нибудь полигон. SVG модуль тоже что то весит.
Одни такие картинки могут килобайт занять...
SpacetimeDB, на расте, около-опенсорс (пока бесплатный тариф и исходники для селфхоста и платным облкаом, через 5 лет станет AGPL)
https://github.com/flametime/Godot-SpacetimeDB-SDK
https://gitlab.com/killthejava/spacetimedb-gdchat

Я так понял они предлагают избавиться от серверного кода между клиентом и базой данных, и запихнуть весь код, всю логику в базу, вместе с собственно данными.
Я не вижу какую проблему оно решает. Просто перекладывает код из текстовых файлов в БД.
МУЛЬТИПЛЕЕРНЫЕ КНОПКИ В БД, АХУЕТЬ

extends MeshInstance3D
func _ready() -> void:
. . var file = FileAccess.open("res://kas00.emp", FileAccess.READ)
. . if file == null:
. . . . push_error("Failed to open the file!")
. . . . return
. . # Read the entire file into a PackedByteArray
. . var data = file.get_buffer(file.get_length())
. . file.close()
. . var buffer = StreamPeerBuffer.new()
. . buffer.data_array = data
. . buffer.seek(0)
. . var dwChunkId = buffer.get_32()
. . var dwMDLSize = buffer.get_32()
. . var dwMDLMagic = buffer.get_string(4)
. . var dwNumObj = buffer.get_32()
. . var dwNumTxt = buffer.get_32()
. . var _dwUnk0 = buffer.get_32()
. . var dwNumIVBuf = buffer.get_32()
. . print("dwChunkId: %d, dwMDLSize: %x, Obj: %d, Txt: %d, IVBuf: %d, Magic: %s"%[dwChunkId, dwMDLSize, dwNumObj, dwNumTxt, dwNumIVBuf, dwMDLMagic])
. . if dwMDLMagic != 'MDL' or dwChunkId != 1:
. . . . print("is not emp")
. . . . return
. . var mesh_data = ArrayMesh.new() #godot mesh
. . var ObjOffsets = []
. . for i in range(dwNumObj):
. . . . ObjOffsets.append(buffer.get_32())
. . #Get file structure block offsets
. . var offverts = []
. . var offimgs = []
. . var chunkbase = dwMDLSize + 0x10
. . while true:
. . . . buffer.seek(chunkbase - 8)
. . . . var chunkid = buffer.get_32()
. . . . var chunksize = buffer.get_32()
. . . . if chunkid == 2:
. . . . . . offverts.append(chunkbase + 0xc)
. . . . elif chunkid == 3:
. . . . . . var mipmaps = buffer.get_32()
. . . . . . var txMagic = buffer.get_string(4)
. . . . . . #print([mipmaps,txMagic])
. . . . . . offimgs.append([44+chunkbase, txMagic])
. . . . elif chunkid == 4:
. . . . . . break
. . . . chunkbase += chunksize+8
. . var vertscounter = 0
. . for objidx in range(dwNumObj):
. . . . var objbase = ObjOffsets[objidx] - 0xc
. . . . buffer.seek(objbase)
. . . . var dwOBJMagic = buffer.get_string(4)
. . . . var dwWeight = buffer.get_32()
. . . . print(dwOBJMagic)
. . . . for bufslotidx in range(4):
. . . . . . buffer.seek(objbase+0x20 + bufslotidx*0x10)
. . . . . . var dwNumVertices = buffer.get_32()
. . . . . . var dwVBufOffset = buffer.get_32()
. . . . . . var dwNumIndices = buffer.get_32()
. . . . . . var dwIBufOffset = buffer.get_32()
. . . . . . if dwNumVertices == 0:
. . . . . . . . continue
. . . . . . print([dwNumVertices, dwVBufOffset, dwNumIndices, dwIBufOffset])
. . . . . . dwVBufOffset = offverts[vertscounter]
. . . . . . vertscounter += 1
. . . . . . dwIBufOffset -= 0xc
. . . . . . buffer.seek(dwIBufOffset-4)
. . . . . . print(buffer.get_string(4))
. . . . . . var verts = PackedVector3Array()
. . . . . . var normals = PackedVector3Array()
. . . . . . var faces = []
. . . . . . var matindices = []
. . . . . . var indices = PackedInt32Array()
. . . . . . var diffuses = []
. . . . . . var uv = []
. . . . . . var weights = []
. . . . . . var uvs = PackedVector2Array()
. . . . . . var uvs0 = []
. . . . . . var iranges = []
. . . . . . var mat2face = []
. . . . . . var materials = []
. . . . . . buffer.seek(dwIBufOffset)
. . . . . . for i in range(dwNumIndices):
. . . . . . . . indices.append(buffer.get_16())
. . . . . . var matbase = objbase +0xa0
. . . . . . buffer.seek(matbase)
. . . . . . var matid = buffer.get_32()
. . . . . . var matsize = buffer.get_32()
. . . . . . while matid != 0:
. . . . . . . . buffer.seek(matbase + matsize - 0x10)
. . . . . . . . var vsize = buffer.get_16()
. . . . . . . . var usedvbufslot = buffer.get_16()
. . . . . . . . var facestart = buffer.get_32()
. . . . . . . . var facecount = buffer.get_32()
. . . . . . . . var indexsize = buffer.get_32()
. . . . . . . . matindices.append(indices.slice(facestart, facestart+facecount+3))
. . . . . . . . if usedvbufslot == bufslotidx:
. . . . . . . . . . buffer.seek(matbase +0x10)
. . . . . . . . . . var bound_sphere = [buffer.get_float(), buffer.get_float(), buffer.get_float(), buffer.get_float()]
. . . . . . . . . . var diffuse = [buffer.get_float(), buffer.get_float(), buffer.get_float(), buffer.get_float()]
. . . . . . . . . . var ambient = [buffer.get_float(), buffer.get_float(), buffer.get_float(), buffer.get_float()]
. . . . . . . . . . var pecular = [buffer.get_float(), buffer.get_float(), buffer.get_float(), buffer.get_float()]
. . . . . . . . . . var emisive = [buffer.get_float(), buffer.get_float(), buffer.get_float(), buffer.get_float()]
. . . . . . . . . . var power = buffer.get_float()
. . . . . . . . . . var texturenum = buffer.get_32()
. . . . . . . . matbase += matsize
. . . . . . . . buffer.seek(matbase)
. . . . . . . . matid = buffer.get_32()
. . . . . . . . matsize = buffer.get_32()
. . . . . . #print(matindices)
. . . . . . buffer.seek(dwVBufOffset)
. . . . . . for vtx in range(dwNumVertices):
. . . . . . . . var vx = buffer.get_float()
. . . . . . . . var vy = buffer.get_float()
. . . . . . . . var vz = buffer.get_float()
. . . . . . . . verts.append(Vector3(vx, vy, vz))
. . . . . . . . if dwWeight:
. . . . . . . . . . var weightlayers = []
. . . . . . . . . . for i in range(dwWeight):
. . . . . . . . . . . . weightlayers.append(buffer.get_float())
. . . . . . . . . . weights.append(weightlayers)
. . . . . . . . if bufslotidx == 0:#x20
. . . . . . . . . . var nx = buffer.get_float()
. . . . . . . . . . var ny = buffer.get_float()
. . . . . . . . . . var nz = buffer.get_float()
. . . . . . . . . . normals.append(Vector3(nx, ny, nz))
. . . . . . . . . . var u = buffer.get_float()
. . . . . . . . . . var v = buffer.get_float()
. . . . . . . . . . uvs.append(Vector2(u, -v))
. . . . . . . . elif bufslotidx == 1:#x18
. . . . . . . . . . var tempdiffuse = buffer.get_float()
. . . . . . . . . . var u = buffer.get_float()
. . . . . . . . . . var v = buffer.get_float()
. . . . . . . . . . uvs.append(Vector2(u, -v))
. . . . . . . . elif bufslotidx == 2:#x28
. . . . . . . . . . var nx = buffer.get_float()
. . . . . . . . . . var ny = buffer.get_float()
. . . . . . . . . . var nz = buffer.get_float()
. . . . . . . . . . normals.append(Vector3(nx, ny, nz))
. . . . . . . . . . var u = buffer.get_float()
. . . . . . . . . . var v = buffer.get_float()
. . . . . . . . . . uvs.append(Vector2(u, -v))
. . . . . . . . . . var u2 = buffer.get_float()
. . . . . . . . . . var v2 = buffer.get_float()
. . . . . . . . . . uvs0.append([u2, -v2])
. . . . . . . . elif bufslotidx == 3:#x20
. . . . . . . . . . var tempdiffuse = buffer.get_float()
. . . . . . . . . . var u = buffer.get_float()
. . . . . . . . . . var v = buffer.get_float()
. . . . . . . . . . uvs.append(Vector2(u, -v))
. . . . . . . . . . var u2 = buffer.get_float()
. . . . . . . . . . var v2 = buffer.get_float()
. . . . . . . . . . uvs0.append([u2, -v2])
. . . . . . var surface_array = []
. . . . . . surface_array.resize(Mesh.ARRAY_MAX)
. . . . . . surface_array[Mesh.ARRAY_VERTEX] = verts
. . . . . . surface_array[Mesh.ARRAY_NORMAL] = normals
. . . . . . surface_array[Mesh.ARRAY_TEX_UV] = uvs
. . . . . . surface_array[Mesh.ARRAY_INDEX] = indices
. . . . . . mesh_data.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLE_STRIP, surface_array)
. . . . . . mesh = mesh_data

extends MeshInstance3D
func _ready() -> void:
. . var file = FileAccess.open("res://kas00.emp", FileAccess.READ)
. . if file == null:
. . . . push_error("Failed to open the file!")
. . . . return
. . # Read the entire file into a PackedByteArray
. . var data = file.get_buffer(file.get_length())
. . file.close()
. . var buffer = StreamPeerBuffer.new()
. . buffer.data_array = data
. . buffer.seek(0)
. . var dwChunkId = buffer.get_32()
. . var dwMDLSize = buffer.get_32()
. . var dwMDLMagic = buffer.get_string(4)
. . var dwNumObj = buffer.get_32()
. . var dwNumTxt = buffer.get_32()
. . var _dwUnk0 = buffer.get_32()
. . var dwNumIVBuf = buffer.get_32()
. . print("dwChunkId: %d, dwMDLSize: %x, Obj: %d, Txt: %d, IVBuf: %d, Magic: %s"%[dwChunkId, dwMDLSize, dwNumObj, dwNumTxt, dwNumIVBuf, dwMDLMagic])
. . if dwMDLMagic != 'MDL' or dwChunkId != 1:
. . . . print("is not emp")
. . . . return
. . var mesh_data = ArrayMesh.new() #godot mesh
. . var ObjOffsets = []
. . for i in range(dwNumObj):
. . . . ObjOffsets.append(buffer.get_32())
. . #Get file structure block offsets
. . var offverts = []
. . var offimgs = []
. . var chunkbase = dwMDLSize + 0x10
. . while true:
. . . . buffer.seek(chunkbase - 8)
. . . . var chunkid = buffer.get_32()
. . . . var chunksize = buffer.get_32()
. . . . if chunkid == 2:
. . . . . . offverts.append(chunkbase + 0xc)
. . . . elif chunkid == 3:
. . . . . . var mipmaps = buffer.get_32()
. . . . . . var txMagic = buffer.get_string(4)
. . . . . . #print([mipmaps,txMagic])
. . . . . . offimgs.append([44+chunkbase, txMagic])
. . . . elif chunkid == 4:
. . . . . . break
. . . . chunkbase += chunksize+8
. . var vertscounter = 0
. . for objidx in range(dwNumObj):
. . . . var objbase = ObjOffsets[objidx] - 0xc
. . . . buffer.seek(objbase)
. . . . var dwOBJMagic = buffer.get_string(4)
. . . . var dwWeight = buffer.get_32()
. . . . print(dwOBJMagic)
. . . . for bufslotidx in range(4):
. . . . . . buffer.seek(objbase+0x20 + bufslotidx*0x10)
. . . . . . var dwNumVertices = buffer.get_32()
. . . . . . var dwVBufOffset = buffer.get_32()
. . . . . . var dwNumIndices = buffer.get_32()
. . . . . . var dwIBufOffset = buffer.get_32()
. . . . . . if dwNumVertices == 0:
. . . . . . . . continue
. . . . . . print([dwNumVertices, dwVBufOffset, dwNumIndices, dwIBufOffset])
. . . . . . dwVBufOffset = offverts[vertscounter]
. . . . . . vertscounter += 1
. . . . . . dwIBufOffset -= 0xc
. . . . . . buffer.seek(dwIBufOffset-4)
. . . . . . print(buffer.get_string(4))
. . . . . . var verts = PackedVector3Array()
. . . . . . var normals = PackedVector3Array()
. . . . . . var faces = []
. . . . . . var matindices = []
. . . . . . var indices = PackedInt32Array()
. . . . . . var diffuses = []
. . . . . . var uv = []
. . . . . . var weights = []
. . . . . . var uvs = PackedVector2Array()
. . . . . . var uvs0 = []
. . . . . . var iranges = []
. . . . . . var mat2face = []
. . . . . . var materials = []
. . . . . . buffer.seek(dwIBufOffset)
. . . . . . for i in range(dwNumIndices):
. . . . . . . . indices.append(buffer.get_16())
. . . . . . var matbase = objbase +0xa0
. . . . . . buffer.seek(matbase)
. . . . . . var matid = buffer.get_32()
. . . . . . var matsize = buffer.get_32()
. . . . . . while matid != 0:
. . . . . . . . buffer.seek(matbase + matsize - 0x10)
. . . . . . . . var vsize = buffer.get_16()
. . . . . . . . var usedvbufslot = buffer.get_16()
. . . . . . . . var facestart = buffer.get_32()
. . . . . . . . var facecount = buffer.get_32()
. . . . . . . . var indexsize = buffer.get_32()
. . . . . . . . matindices.append(indices.slice(facestart, facestart+facecount+3))
. . . . . . . . if usedvbufslot == bufslotidx:
. . . . . . . . . . buffer.seek(matbase +0x10)
. . . . . . . . . . var bound_sphere = [buffer.get_float(), buffer.get_float(), buffer.get_float(), buffer.get_float()]
. . . . . . . . . . var diffuse = [buffer.get_float(), buffer.get_float(), buffer.get_float(), buffer.get_float()]
. . . . . . . . . . var ambient = [buffer.get_float(), buffer.get_float(), buffer.get_float(), buffer.get_float()]
. . . . . . . . . . var pecular = [buffer.get_float(), buffer.get_float(), buffer.get_float(), buffer.get_float()]
. . . . . . . . . . var emisive = [buffer.get_float(), buffer.get_float(), buffer.get_float(), buffer.get_float()]
. . . . . . . . . . var power = buffer.get_float()
. . . . . . . . . . var texturenum = buffer.get_32()
. . . . . . . . matbase += matsize
. . . . . . . . buffer.seek(matbase)
. . . . . . . . matid = buffer.get_32()
. . . . . . . . matsize = buffer.get_32()
. . . . . . #print(matindices)
. . . . . . buffer.seek(dwVBufOffset)
. . . . . . for vtx in range(dwNumVertices):
. . . . . . . . var vx = buffer.get_float()
. . . . . . . . var vy = buffer.get_float()
. . . . . . . . var vz = buffer.get_float()
. . . . . . . . verts.append(Vector3(vx, vy, vz))
. . . . . . . . if dwWeight:
. . . . . . . . . . var weightlayers = []
. . . . . . . . . . for i in range(dwWeight):
. . . . . . . . . . . . weightlayers.append(buffer.get_float())
. . . . . . . . . . weights.append(weightlayers)
. . . . . . . . if bufslotidx == 0:#x20
. . . . . . . . . . var nx = buffer.get_float()
. . . . . . . . . . var ny = buffer.get_float()
. . . . . . . . . . var nz = buffer.get_float()
. . . . . . . . . . normals.append(Vector3(nx, ny, nz))
. . . . . . . . . . var u = buffer.get_float()
. . . . . . . . . . var v = buffer.get_float()
. . . . . . . . . . uvs.append(Vector2(u, -v))
. . . . . . . . elif bufslotidx == 1:#x18
. . . . . . . . . . var tempdiffuse = buffer.get_float()
. . . . . . . . . . var u = buffer.get_float()
. . . . . . . . . . var v = buffer.get_float()
. . . . . . . . . . uvs.append(Vector2(u, -v))
. . . . . . . . elif bufslotidx == 2:#x28
. . . . . . . . . . var nx = buffer.get_float()
. . . . . . . . . . var ny = buffer.get_float()
. . . . . . . . . . var nz = buffer.get_float()
. . . . . . . . . . normals.append(Vector3(nx, ny, nz))
. . . . . . . . . . var u = buffer.get_float()
. . . . . . . . . . var v = buffer.get_float()
. . . . . . . . . . uvs.append(Vector2(u, -v))
. . . . . . . . . . var u2 = buffer.get_float()
. . . . . . . . . . var v2 = buffer.get_float()
. . . . . . . . . . uvs0.append([u2, -v2])
. . . . . . . . elif bufslotidx == 3:#x20
. . . . . . . . . . var tempdiffuse = buffer.get_float()
. . . . . . . . . . var u = buffer.get_float()
. . . . . . . . . . var v = buffer.get_float()
. . . . . . . . . . uvs.append(Vector2(u, -v))
. . . . . . . . . . var u2 = buffer.get_float()
. . . . . . . . . . var v2 = buffer.get_float()
. . . . . . . . . . uvs0.append([u2, -v2])
. . . . . . var surface_array = []
. . . . . . surface_array.resize(Mesh.ARRAY_MAX)
. . . . . . surface_array[Mesh.ARRAY_VERTEX] = verts
. . . . . . surface_array[Mesh.ARRAY_NORMAL] = normals
. . . . . . surface_array[Mesh.ARRAY_TEX_UV] = uvs
. . . . . . surface_array[Mesh.ARRAY_INDEX] = indices
. . . . . . mesh_data.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLE_STRIP, surface_array)
. . . . . . mesh = mesh_data
Как же ты заебал своими кнопками, даун блять. Почему навязчивые форсы не запрещены в /гд/? Репортить бесполезно. Идиотина, тупорылая, казёл, выпей таблетки свои, шизоид ебучий.

400x600, 0:30
Конечно, раньше накидывал в LMMS, а для последней игры наиграл вживую на дудочке 3 дорожки и процедурно их миксую.
Просто барабанчики добавить

1920x1080, 3:02
Вот еще вспомнил одна была
Кто-то точно создаёт. Мне например даже интересней музыку сочинять, чем программировать и уж тем более рисовать.
… You spin me right round, baby, right round …
Замечательно! Я вам музыку, а вы мне что? Негодяи! Мне ещё свою игру делать!
>>19327
Ну накинь референсов каких-нибудь и напишу. От одного трека не растаю, думаю. Ненавязчивое фентези понятие растяжимое, а вот так вот без каких-либо более-менее подробных пояснений или примеров я нахуеверчу совсем что-то своё. Уже сталкивался с разным виденьем подходящей музыки.
Ты че? Мультиплеерные кнопки это лучшее что произошло с гд за последний год. Максимально интересная сложная техническая задача. Тебя просто злит то, что ты не знаешь как ее решить.
> ты не знаешь как ее решить
Знаю. Через синглтон. Мультиплеерный пир - это синглтон, который создается при активации мультиплеерной сессии и регулирует её до самого её завершения. Причём тут кнопки вообще? Вот это меня и бесит. Кнопки просто выполняют команды из модели бизнес-логики (частью которой может быть и мультиплеерная сессия).

> Как же мне тогда понять, что тебе нужно?
Просто делай музыку, которая тебе нравится и выкладывай на опенгеймарт. Она не пропадёт, успехом и знаменитостью к тебе вернётся.
https://opengameart.org/content/dream-raid-cinematic-action-soundtrack
Ну ты видимо не прочитал о чем речь и додумал сам. Речь шла про хотсит на винде с несколькими мышками.

Вот пожалуйста.
https://opengameart.org/content/we-will-meet-again
Можешь так же?
Только с раскладкой на этапы: перед боем, во время боя, перед концом боя, геймовер, победа.
Та музыка, которая мне нравится и подходит, в мою игру попадёт. А просто так раздавать всё подряд моя хомячья натура не позволяет.
Ну одно дело один трек, а другое дело очень много треков
> Ну и если ты ещё не понял, и без тебя есть кому раздать. Не переживай. Обойдёмся.
Не переживаю, но и вы не расстраивайтесь. Обидеть никого не хотел.
https://opengameart.org/content/messengers-from-above
> https://opengameart.org/content/dream-raid-cinematic-action-soundtrack
>>19344
>>19353
Ну ёб твою мать, граждане товарищи! Одним постом пожалуйста такие вещи делайте. Это Годот-тред, а не /mus/-реквест. А троллингом в срачельнике занимайтесь. Как дети малые, ей богу.

>>19344
Ну нихуя себе у тебя ненавязчивое фентези. Это в каких играх именно под такое обычно ходят по городу и пиздят с неписями? Толстота толстот.
>>19353
Ну это ещё звучит как нечто ненапряжное первую половину, дальше начинается РОООООООК, но всё равно не слишком уж "фентези", максимум для пещеры какой-нибудь.
Затролюнькали вы короче бедного меня. Я хотел искренне помочь, а вы взяли и начали путать своими эпическими оркестрами.
Мне нравится ненавязчивость уровня Зельды ботвы. Там 90% времени музыки никакой нет вовсе, и только временами происходит редкий проигрыш тремя аккордами. И дальше под звуки среды аутируешь.

Сейчас так у меня:
1) Из глобального скрипта запускаю get_tree().change_scene_to_file()
2) Потом у всех объектов, у которых может быть разное состояние на уровне, в _ready() использую await get_tree().process_frame
3) После также у этих объектов запускаю кастомный скрипт загрузки состояния
Простой пример для позиции игрока:
func _ready():
await get_tree().process_frame
Load_player_data()
func Load_player_data():
var saved_player_position = G_Data_collector.game_data["player"]["position"]
global_position = Vector3(saved_player_position[0], saved_player_position[1], saved_player_position[2])
Все делаю правильно или через 10/50/100/etc объектов/их параметров на уровне у меня все наебнется?
Как тебе удобнее - так и правильно.
Затем, когда игра будет готова на уровне предрелизного билда, можно пройтись по уже готовым системам и пооптимизировать.
> чтобы ничего не сломалось?
Главное сам не запутайся в своей лапше.
Для этого всё документируй. Например(!) Прямо вот с блоксхем начинай и прямо в пейнте или где удобно рисуешь блоксхемы происходящего у тебя в коде. Затем сверяясь с блоксхемами пишешь код. Если код не работает, идёшь по коду, сверяясь с блоксхемой, ища где код делает не так, как ты спроектировал. Ну и блоксхемы не абсолют, их тоже придётся править по мере появления новых обстоятельств и по мере увеличения твоего скилла в принципе.
> Все делаю правильно или через 10/50/100/etc объектов/их параметров на уровне у меня все наебнется?
Пару тредов назад обсуждали это. И не знаю, кто как, но лично я пришёл к выводу, что если у тебя ожидается сохранение больших обьёмов данных, но недостаточно больших, чтобы заморачиваться с СУБД, но достаточно больших, чтобы встроенные утилиты загрузки файлов непричтно зависали читая одним буфером весь файл сразу,
то
сохранять надо примерно так же как браузеры сохраняют куки. Знаешь как? текстовый файл со строками ЖСОН-ами. Одна строка - один жсон-обьект. Текстовый файл можно читать построчно, и это можно разбить на фреймы, и можно снять нагрузку с основного потока. Мелкие жсоны будут обрабатываться молниеносно, в отличие от попытки распарсить один глобальный гиперсловарь с миллионами вложенных параметров.
Поэтому к вот этому вот
> .game_data["player"]["position"]
подходи осторожно. Допустим в памяти у тебя лежит одна структура, но в файл её следует разнести так, чтобы можно было считывать частями. Посмотри как организованы tscn файлы, подумой над ними.
>>19329
Не знаю тут ли ты еще. Про музыку изначально спрашивал я, потом на работу отвлекся. Вот пара примеров:
https://www.youtube.com/watch?v=gCY4kyAf6AA
https://www.youtube.com/watch?v=wMF5mdC001M
Практически никто не пользуется change scene. Всегда можно просто сделать свою сцену, в которой будет игрок, свет и прочее, подсцена с меню, подсцена с уровнем, стриминг соседних уровней и тд
https://www.reddit.com/r/godot/comments/1b21h5y/the_usefulness_of_changing_scenes/
image.load_dds_from_buffer(dds_data). Но среди доступных форматов для загрузки из буфера, dds отсутствует. Какие еще есть варианты?
В 4.4 вроде можно читать из файла (не импортируя). Ну или вытащи с++ функцию из движка, или пиши во временный файл.
Я скачал Godot 4.5, там уже добавили эту фичу. Так что пока все тип-топ.
Все это может быть глобальным синглтоном. Или ты вдруг начнешь переделывать игру в ммо, где игроков сотни тысяч?
Я не понимаю о чем ты спрашиваеш. Сходи по ссылке на реддит, там спроси.
Ладно.
Что получится, то получится. У меня много пространства для фоновой музыки. Главное чтобы по ушам не ездило. Если захочешь какое-либо авторство - вместе с треком напиши как в титрах указать, к концу года себя погуглишь.
Ну я создаю. Тащемта музыка это моя основная работа, а геймдев - хобби.
Но по реквестам писать в любом случае ничего не буду. Музыка должна быть прям под игру, надо погружаться в настроение, идеи, ритм, темп; это заёбисто. А дженерик дрисню, которая подойдёт куда угодно, даже начинать не хочется.
> draw.io
Я для похожего использую обсидиан с канвасом и плагином на рисование. Профит в том, что там еще кодовые задачки вести можно в виде, например, тикет-трекера или канбана. Возможность перекинуть задачу из колонки TODO в колонку DONE - добавляет мотивации.

Ведь все равно, когда игрок взаимодействует с инвентарем, использует предмет (например, аптечку) и т.д. обращение за инфой о предмете будет идти в один скрипт-базу данных обо всех предметах.
При этом можно сделать одну универсальную сцену с кучей @export var и тупа клонированием запихивать ее сколько надо раз в сколько надо сцен и настраивать оттуда - ТОЧНО ТАКЖЕ КАК РЕСУРСЫ.
На выходе получим почти такую же логику, но без кучи лишних телодвижений. В чем я не прав?
Хочу разобраться на берегу, чтобы потом не переписывать код
> можно сделать одну универсальную сцену
Ноду.
Ресурсы не ноды и не занимают места в дереве. В этом их польза. Если тебе нужна нода в дереве, со всеми фичами ноды - то ты делаешь сцену, если тебе просто нужна куча экспортов - ты делаешь ресурс. Всё. Вся разница.
>пикрил
Литерали мое ебало после прочитанного. О чем речь? Что за монстр эта универсальная сцена? Че за дб такая странная? Я ваще нихуяне понял че ты хочешь, но прикину хуй к носу и высрусь.
Ну смотри, вот тебе надо заспавнить аптечку, че делать будешь? Пойдешь делать отдельную сцену под аптечку? А если еще и патроны какие нибудь? Опять же новая сцена, ну либо какая то ебанутая одна сцена которая будет содержать абсолютно все предметы в игре с прописаным всем говном в коде. В случае с ресурсом тебе понадобится лишь 1 сцена и скрипт у которого будет ссылка на ресурс. Нужна аптечка? Инстантишь итем, вставляешь ресур из дб под нужным идшником, все, итем готов. При подборе итема в инвентарь, ссылка на ресурс из итема просто переносится в слот, в случае если такой итем есть и он стакается то просто увеличивается в ресурсе колличество тех же аптечек, все блять. Я хуй знает че ты там предлагаешь, монстра какогото, хуй знает, франкенштейн штоле.
Не, конечно можно сделать мегамонстра, но как ты с ним работать будешь янеебу. Ну и как анон выше написал, ресур не нода, а как мы знаем, даже пустые ноды влияют на производительность. Вот и думай. Ваще советую глянуть то как делают инвентарь на юнете, нет, не для того что бы научиться его делать, а шоб наглядно понять че такое ооп, тебе это сейчас важнее.
Это не экономия, это вопрос удобства. И архитектуры. Просто ответь на вопрос, почему меши в мешинстанс это ресурсы?
Правильный ответ под спойлером, чтобы ты мне мозги не ебал, а вернулся к игре: потому что меш-ресурс это и есть та самая "куча экспортов", данные о вершинах на диске, которые мешинстанс загружает в себя и подготавливает для отрисовки.
Это сразу в репорт.
У меня 2 пазловых игры на годоте опубликовано, но тебе-то похуй, ты потралить залетел.
Прошел базовый 2д из официальной документации, дальше сам пилил.
Вот я хочу настроить уровень, заполнить его нодами с коллизиями, отправляющий сигнал в шину (при вхождении в коллизию и по нажатию кнопки).
Так я настрою квесты (получение\отдачу), инвентарь (получение предметов), переходы на другие локации.
После чего, так как я не особо понимаю наследование сцен (скрипты изначальные меняются, я хз почему), я при построении новой локации просто скопирую в проводнике сцену локации и буду заново ее настраивать ручками.
Норм\не норм? Сильно это изменит вес игры, если сцены, как я понимаю, это просто куски кода?
Используй лучше композицию. Наработай небольшие куски уровня, которые общаются между собой сигналами либо вставляются друг в друга, и лепи из них уровни как из лего.
Если общая структура уровней похожа - сделай сцену-шаблон с базовой структурой из своих кусков-композиций, и каждый уровень начинай строить с нее.
Ну, я так делал, мне подошло заебись.

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

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

> Заинтересовалась годотом
Обожечки! Тяночька! Тяночька заинтересовалась годотом! Амнянмня! Писечька! Тяночька! Помогать! Обеснять! А вдрух?

> - сделай сцену-шаблон с базовой структурой из своих кусков-композиций,
Да, я это и имел в виду, спасибо.
Это из него так желчь вытекает. Он считает что любой кто обращает внимание на женщин не достоен уважения. И он пытается это пресечь, чтобы род игроделов загинул вместе с этим тредом.
А насчет механики. Тебе надо воссоздать для начала что-нибудь классическое, вроде пасьянса или три-в-ряд, чтобы получить общее представление о годоте и о том как делаются игры. Найди туториалы или поговори с нейронкой чтобы она тебя направляла. Спроси как реализовать что-нибудь очень простое. Пусть накидает предложения.
Это не женщина.
>Опять же новая сцена, ну либо какая то ебанутая одна сцена которая будет содержать абсолютно все предметы в игре с прописаным всем говном в коде.
Зачем?
Вот как "подключить" ресурс к ноде? Пишем в нодовом скрипте:
>@export var item_data : Item_resource
Но не будет же этот ресурс содержать в себе ВСЕ данные об аптечке, верно? Он будет ссылаться на какой-то скрипт, где прописаны все предметы и их характеристики. Иначе как нормального из разных мест в игре получать данные об аптечке? Только из одной бд (в виде скрипта в переменными/реальной бд/json-файл/etc).
Так вот. Почему бы мне вместо ДОПОЛНИТЕЛЬНОЙ ПРОКЛАДКИ в виде ресурса:
>@export var item_data : Item_resource
Не написать сразу
>@export var item_data : String
Где item_data - это название переменной, типа "small_medkit", за характеристиками которой мы сразу обращаемся к бд?
Чет я вообще не вкуриваю прикол ресурсов. Или весь их смысл только в том, чтобы раскидать все по отдельным tres-файлам? Типа для удобства?
>лучшую девочку импортируй
Это более ранняя версия игры. Лучшую девочку пока не завезли. Может позже запилю импортер под пятую версию. Но есть сомнения что третий Мета Квест потянет ее модели.
Эни-вей... Импортер:
Если бы не нейронка то хуй бы я разобрался. Разобрался с моргающей прозрачностью прописав вручную порядок рендеринга для прозрачных поверхностей. Жаль glosiness из материалов годоту не нужна, пилить свой шейдер чтобы воссоздать магию directx9 чет не охота. Теперь надо найти где в игровой модели хранится инфа указывающая если поверхность двухсторонняя.
Заодно узнал что это за большие обьекты хранятся с моделью. Оказывается что это заготовленные Shadow Volumes.
Пикрилы. Запустил в виртуальной реальности. Полет нормальный. Но чувствую запал на исходе. Надо аыбрать что-то одно, для последнего рывка.
glossiness это инверсия roughness, вроде. Можешь попробовать просто 1.0-gloss, либо там 1.0-sqrt(gloss).
Несколько лет находил формулы, но cейчас что-то с набегу не получилось. Вроде это называлось specular/glossiness workflow, а сейчас в PBR распространен metallic/roughness.
>Пикрилы. Запустил в виртуальной реальности. Полет нормальный. Но чувствую запал на исходе. Надо аыбрать что-то одно, для последнего рывка.
Анон, а в чем смысл твоей игры? Я просто раньше интересовался темой, собирал что-то типа 3д визуальной новеллы на Playcanvas. Плейканвас потому что это веб-движок и можно игрокам с Квестом 2/3 показывать непотребства прямо в шлеме без установки левых апк или стриминга с ПК.
А если на Годоте, то какой смысл? Не думаешь же ты что тебя пропустят в магазин с чужими полуголыми бабами.
Выкладываешь на итч с тегом 18+, набигают толпы дрочеров, изи вин.
А он хоть работает на мобильных браузерах для Квест 3?
Так-то и у Юнити тоже есть экспорт в веб, но на Квесте он такой производительный что лучше бы его вообще не было.
А Playcanvas и Aframe были очень шустрыми движками, почти не хуже нативных приложений в браузере можно было получить.
Возьми и проверь, никто тут твой Квест 3 в глаза не видел. Вот первая попавшаяся годот+3д+веб - https://cyfo.itch.io/duck-duck-clicker-3d
Glossines color rgba, а не Glosines glow. Glow я пристроил. А Color виден на первом из двух изображений, где я его подсунул вместо альбедо.
>>19746
Так это же не игра, а недоделаный инструмент для тех кто создает или использует моды, то есть для модсцены. То что модели можно будет пинать в виаре это просто стресс тест. В игре их еще сильнее пинают.
И это не экспорт на квест. А запуск годот едиторе который сам работает на квесте. Производительность у веб вр низая по сравнению с нативным запуском.
Причем тебе не нужно ковыряться с установкой апк. Скачиваешь годот в квест3 из прямо встроенного магазина мета. И копируешь проект годот в папку Документы. Все как задумано.

делай!
Или вот. А то я помню мне кто-то ИТТ мозги выносил что игры без текстур выглядят как сблев.
>покажи годную игру
>но только из тех которые нравятся мне!11 чтоб сурьезно
Нутыпонел, эджлорд мамкин.
Что и требовалось доказать. Ты с такой графикой либо делаешь майнкрафт, либо детский высер.
Не забудь маме рассказать какой ты взрослый.
А файловая система твоего пека - это просто БД раскиданная по секторам твоего диска. Понял?
Не хочешь использовать ресурсы - не используй, тебя кто то заставляет?
Ресурсы легковеснее нод (в них нет базового класса ноды, всех этих _ready и прочего).
И вообще емнип они изначально для иммутабельных клонов данных (когда один меш или текстура переиспользуется несколькими моделями).
>Не хочешь использовать ресурсы - не используй, тебя кто то заставляет?
Так я и не говорю, что заставляет кто-то. Просто пытался вкурить, как и нужно ли вообще мне их использовать
Недостаточно серьезно. Гримдарк давай.
>Iron Lung вдохновляешься?
Не, думал чего можно подсмотреть у неё, но ничего интересного не нашёл.
Расскажешь, как такой графоний, как у тебя делать?
Вопрос скорее про освещение и всякие фишки интересные сами текстурки буду заказывать на стороне.
Да, в инете есть сотни профильных статей, но интересны какие-то неочевидные вещи.
Вижу у него как минимум шейдер на снижение количества цветов. В остальном, вроде, стандарт.
В основном всю картинку делает шейдер около постеризации. Из освещения у меня только 1 омнилайт внутри, 1 снаружи и среда настроенная под подводную тему. Плюс водный шейдер на окно.
просто то, что в годоте накрутили - это какой-то неудобный для меня функционал с этими якорями, привязками, хотя я и не сильно в него вникал (в этом плане Unity UI Toolkit был имбой, потому что я так сказать привыкший к верстке а-ля XAML (WPF/Avalonia) или HTML+CSS (Blazor + Razor))
я видел бридж для авалонии, не обновляющийся бридж для впф (тут сразу обрез по платформам), еще костыль-подвязку к WASM-Blazor приложению, но не знаю как оно будет работать для всей игры, учитывая что она буквально вся будет интерфейсная
>не вникал
В этом твоя проблема. Как бывшая вебмакака, повидавшая кучу уй-фреймворков, скажу что в годоте довольно удобный уй, позволяющий творить с собой что угодно. Отчасти поэтому на нем часто уй-приложения клепают. Так что давай, не городи абстракции пока не разобрался.
https://orama-interactive.itch.io/pixelorama
https://yurisizov.itch.io/boscaceoil-blue
https://www.materialmaker.org
https://dungeondraft.net
https://store.steampowered.com/app/498310/RPG_in_a_Box/
Те, которые сходу вспомнились. Все на годоте, все формошлепство на стандартном годотовском UI, все приложения-а-не-игры. В годоте есть даже low-processor mode специально для этого.
И обсуждение тебе почитать: https://www.reddit.com/r/godot/comments/1hjaw6c/why_people_use_godot_to_make_non_game_softwares/
На самом деле я тут как по нотам сыграл. В прошлый раз я спрашивал можно ли сделать годные приложения на годоте и мне никто ничего дельного не ответил. Вот я и решил пойти от обратного, анон тут же побежал примеры гуглить в ответ на пост с двумя словами. Учись.
Я хз кто тут кого троллит, но я бы тебе и так ответил, потому что сам имею уй-приложение для изучения языков, выложенное в гугл-плей. В разы проще чем то что выше накидал, но все же.
Красава, чо.
А есть какие-то туториалы именно для создания приложений? Я глянул на ютубе и в основном объясняется воркфлоу для внутриигровых менюшек.
https://docs.godotengine.org/en/stable/tutorials/ui/index.html
Игры от приложений отличаются только галкой low processor mode.
А если у меня окно в центре с 3D сценой, которую я хочу крутить мышкой, а вокруг сцены обычный UI. Будет ли моя 3D модель правильно рендеритсься с этой настройкой?


етот метод че делает? наверное в нем же и проверка правильно отрисованных кадров

Нихуя там нет, кроме исполнения анимации.
спасибо, скорее всего ты прав, дам 2 шанс, но тогда у меня еще вопрос есть, может тут кто за ECS шарит?
просто мне захотелось потыкать его. с базой (компоненты, сущности, простые системы) все понятно, я их реализовал, а вот как подвязать более сложные системы к UI, у меня есть пару идей
1. использовать события (EventHandler + свои EventArgs) или годотовские сигналы (в них я тоже еще не сильно углубился, потому что до этого проект был только в контексте юнити), но мне кажется, что получится слишком громоздко
2. использовать нечто схожее на шину данных (типа Кафки, Рэббита, тот же MessagePipe), мне эта идея кажется перспективнее, да и MessagePipe довольно шустрый
3. была еще идея использовать «компоненты, как события», но удалять/добавлять компоненты затратная операция, осложняется все еще тем, что просто так добавить/удалить нельзя это делается через буфер команд, который доступен только внутри системы и срабатывает раз за Update в его конце
Изучи реактивный аддон. Без реактивного кодинга ЕЦС будет сложно костылить.
https://godotengine.org/asset-library/asset/2369
да, я знаю про Reactive, выше писал про MessagePipe, ну, буду тогда копать в его сторону или R3
Если тебе нужна производительность, то надо смотреть в сторону C++. Там куча либ и на ECS и на всякие шины.
> почему анимация проигрывается правильно, если по логике она должна стартовать каждые 15 мс заново мммммммммм??????
Читай документацию
Анимейшн плеер не сбрасывает анимацию, он только нажимает кнопочку плей на условном видеомагнитофоне, если она уже нажата, то все продолжится - ты же ее не перематывал в начало.
(Да, это отличается от аудиострима - там функция play получает параметр с какого момента играть - и по умолчанию это 0 секунда, поэтому там вызов play() эквивалентен play(0 sec) )
>который вызывается каждый кадр ака каждые ~15 мс при 60 фпс
Это может быть и неважно, если таких объектов всего десятки или сотни в игре. Но конечно лучше так не делать.
А вот что точно плохо написано - это каждый кадр искать ноду по ее имени get_node("NodeName"). Ее можно один раз в _ready закешировать в переменную и уже оттуда обращаться.
Кол-во просмотров туториала ничего не говорит о его качестве, к тому же в туториалах многие вещи упрощают, чтобы сконцентрироваться на теме которую объясняют - если каждый туториал вместо объяснения простой темы будет сначала целиком цитировать Clean code, далеко не уедешь.
Там все крайне просто, ознакамливайся
>>876770
>>876771
https://docs.godotengine.org/en/stable/tutorials/ui/size_and_anchors.html
>А вот что точно плохо написано - это каждый кадр искать ноду по ее имени get_node("NodeName")
О, я как раз недавно занимался рефакторингом этой хуйни у себя. На бенчмарке в десятки тысяч прогонов get_node("nodename").some_field=1 VS nodename.some_field=1 - второе оказалось быстрее раза в 3. Так что я напрягся и переписал свою длинную плотную по вызовам портянку _process на кешированные ноды, и проверил разницу уже там. Таких _процессов у меня - на каждого нпс по 1, а нпс под 30 на карте. Так вот, реальный прирост в игре - ноль фпс. Так что теперь я считаю это экономией на спичках и пустой тратой времени.
Заморачиваться стоит разве что ради частых переименований/перемещений нод, чтобы потом апдейтнуть код в одном месте, а не в десятках.
Бенчмарки это хорошо, лайк.
>Так вот, реальный прирост в игре - ноль фпс.
А ты с отключенным vsync посмотри. Может быть у тебя в обоих случаях был лимит 60фпс. А если разница будет 3000фпс и 2600фпс, разница уже есть, и она может у кого то на слабом железе превратиться в 30 vs 26 fps, условно.
А, у тебя их всего 30, я так и написал в принципе - десятки или сотни легко потянет.
Уже утонуло, почему и не перепостить
Пик 1 - корневой контрол Full Rect занимает весь экран
Пик 2 - контрол с custom anchor, как раз и означает в процентах - 0 это край, 1 это другой край, 0.2 это 20 процентов и тд
Пик 3 - контрол с custom anchor и anchor offsets, то есть когда относительно процентов еще и margin в пикселях
Пик 4 - это уже с контейнерами, контейнер сам расположен на 10 процентах, и растягивает контрол в нем под это.
Кроме этого есть всякие контейнеры в которые уже по какой то логике набиваются дети, например grid container, horizontal box, vertical box, их можно вкладывать друг в друга, сейчас вроде бы есть и flow
Контейнер управляет лейаутом детей, но дети могут указывать как они хотят размещаться в контейнере, полями container sizing; fill или shrink, а также галочкой expand. В таком случае параметр Stretch будет уже задавать пропорции между такими элементами. На пик 2 - пропорции 3-2-1.
margin container он используется чисто для отступа в дереве контролов, то есть даже если у ваших контролов нет возможности явно задать отступ, можно всегда обрамить это в margin.
Еще какие то настройки бывают не в настройках контейнеров, а в настройках темы, например отступ между элементами контейнера. (пик3) Вот их похоже в процентах не задать. Но наверное можно из скрипта как то получить общий размер контейнера и высчитать.
P.s. Посту 2 года, может с тех пор что-то обновили.
>если она уже нажата, то все продолжится
Нелогично же, так вызовы методов никогда и нигже не работают. Вангую это создает миллиард проблем с паузой и продолжением воспроизведения при различных ивентах и необходимо городить костыли.
>А вот что точно плохо написано - это каждый кадр искать ноду по ее имени get_node("NodeName"). Ее можно один раз в _ready закешировать в переменную и уже оттуда обращаться.
Он там поясняет за это и меняет код, говоря что так делать не стоит.
Да и вооще что это за мода объявлять новую переменную каждый фрейм на пятой строке, если по логике нужно создать переменную один раз и её просто обновлять каждый фрейм? Он это не только здесь делает, но и дальше по коду. Это так сегодня кодят современные игры, ищя в памяти свободную ячейку каждые 15мс и гадя туда рандомными байтами? Я сам не кодер, но в юношестве участвовал в олимпиадах по кодингу на скорость и нас там за такое по ебалу пиздили тапками.
Да, всинк конечно выключен. 1500 вс 1500 по итогу, средний фпс за замеренные 2 минуты тоже не изменился. Возможно масштаб недостаточен, но по итогу я не планирую заморачиваться с кешированными нодами - только код переменными загрязнять и время тратить.
Так в серьезной игре у тебя все равно AnimationTree, как бы пофиг. Ну и ты всегда можешь проверить is_playing/current_animation/assigned_animation, ничего сложного. Тут в любом случае нужна стейт машина, хоть встроенная хоть своя, чтобы не запутаться в своих событиях.
Создание локальных переменных как и их удаление всем скопом кек в современных языках дешевое. Локальная переменная хороша тем что не хранит стейт - если у тебя будет классовая переменная, будет соблазн обратиться к ней из другой функции, честно скажу что я так раньше делал и потом долго вычищал баги, потому что в каком то кадре в движение записалось "иду влево", а при не нажатых кнопках забыл записать туда 0, и потом часа два искал баг, почему анимация не та играется.
Кроме глобальной переменной её ещё можно пробросить в метод через атрибут. Вангую даже в метод расчёта физики это можно сделать.
https://gitlab.collabora.com/somar-project/somar
https://somar-project.itch.io/somar-project
https://godotengine.org/article/godot-showcase-somar/
Я искал туториал по материалам на годоте, но ничего даже похожего на https://youtu.be/iZgbzwBQTPY не видел.

822x720, 0:08
Видос не смотрел, но можно накладывать материал на материал на материал через next_pass.
Постыдись врать, это первичная загрузка уровня в начале.
не, миллиарды сущностей в секунду мне не нужны
хотя и на шарпе неплохо сделали: почему-то MessagePipe оказывается быстрее, чем нативный event - в контексте pub/sub
Вроде видел ассет который такое делает.
Ну а вообще, SurfaceTool.
А, еще можно https://docs.godotengine.org/en/stable/classes/class_csgpolygon3d.html
Если тебе нужно только визуально, аля "буквы 3д", можно шейдером
https://web.archive.org/web/20240927023934/https://godotshaders.com/shader/extrude-2d-texture-in-3d/
Благодарю. А можешь потестить и показать как работаете вариант CSGPolygon3D плиз? Просто выдави мне квадрат или цилиндр в коде во время работы игры и мне этого будет достаточно.
Я просто еще годот даже не поставил и вот решаю какой движок подходит.

1920x1000, 0:15

В теории ничем не считая багов которые иногда обнаруживают, обычный запуск сейчас в 4-ке запускает такое же окно с меню отладки, просто есть опция показать его плавающим или встроенным.
(там есть пауза, след. кадр, отключить ввод и выбирать мышкой ноды, перечислить все ноды в месте клика, двигать камеру).
Это отдельный процесс, в Compatibility mode OBS не захотел его даже захватывать (надо было в Forward+ переключиться, не догадался, записывал экран)
Могу поделиться ссылками, я сам конечно не пиратил
Алсо я напиздел, в курсе 78 часов видеогайдов и семь разработаных с нуля игр лол
Ну хуй знает братан, предпочитаю ютуб гайды по тематике и гдквест, который давно себя зарекомендовал.
База не меняется. По 4хлетним гайдам на трёшке вполне реально пилить игры на четвёрке, если в голове есть вонючие волосатые извилины.
Легче уже простой найти гайды под актуальную версию. Благо на англюсике их достаточно
>>20245
И не один а дохуя разных: https://www.gdquest.com/product/
Наверняка на торрентах где-нибудь лежит.
> учить с нуля по старым гайдам
Ненене, я имел ввиду, если есть редкий гайд по малоизвестному вопросу, от автора, который давно ушёл, тогда его вполне реально перекодить на четвёрку. А с нуля конечно быстрее по актуальному учиться.

А я знаю, а я вообще пихаю сигнал бас в корень, очень удобно, и он всегда существует, автозагрузки не нужны, когда можно установить скрипт в корень дерева, существующий всегда, имеющий по дизайну функцию вызова.
> if get_tree() is SignalBus: get_tree().load_next.connect(...)
Скрипт с класснеймом прописывается через редактор настроек, указанием класснейма.
> class_name SignalBus extends SceneTree
> signal load_next
А что за тип основного цикла? Это в 4.х появилось? Как оно на английском, чтобы документацию загуглить почитать?
Еще не придумал. Может в джем впишусь, хотя уже мало времени осталось. Хм, бесконечный однокнопочный уровень. О, можно раннер про Хоппу сделать, все равно собирался.
Про Хоппу эт хорошо, эт мы любим.
Аниме-тяночька с мышиными ушками, из рисовача в /Б/, и больше не знаю о ней ничего. Рисовачеры в /Б/ злостные пидарасы и ничего не рассказывают.
>Хоппы — особый вид воздушного транспорта для ликвидации военных сил противника или высадки войск, разработанный на Ново-Земле.
Ну только если блацкроцк мне заплатит три тысячи долларов авансом.
Давайте!
Чур я сторителлер-евангелист, геймдизайнер. Согласен на должность директора.
Стори уже готова для теллинга, и я её запостил в АААА-треде уже три года назад >>834219 → это на голову выше этих ваших експедишенов.

Забиваю себе должность дизайнера механик. При стане персонажи должны превращаться в icon.png
Я правда в обскуру 33 не играл.
> Я правда в обскуру 33 не играл.
Я вообще в игры старше 2016 года не играл. 10 ФПС на минималках. Остаётся только ждать лудшего.


Лишний раз показывает насколько эти ваши диздоки бесполезная мемная хуита. Актуальна разве что для корпов, которые деньгами могут вывезти реализацию диздока 1-в-1. Путь индюков - идти по пути наименьшего сопротивления и позволить игре дизайнить саму себя, потому что у индюка нет ресурсов как баран переть в закрытые ворота.
> идти по пути наименьшего сопротивления
Ловушка "сарая для великов" она же "низко висящего фрукта" она же локального минимума.
Знание умных названий одних ошибок не позволяет тебе избегать других ошибок, братан. Не говоря уже о том что половина из написанного нерелевантна. Не факт что ваш охуенный диздок окажется чем-то фановым по-итогу, но же будете натягивать его как сову на глобус годами игноря фидбек и механики которые сами идут в руки, пока я заброшусь в дискорд и проведу 3-5 плейтестов и пойду туда, где реально фан лежит. Если тебе хочется умных слов, то вот мой appeal to authority - посмотри, например, интервью Jonathan Blow (braid/witness), где он говорит что его игры, фактически, дизайнят себя сами по ходу разработки. Или фортнайт, который знаменито по диздоку вообще не то, чем он стал. И уж сорян, дальнейшую дискуссию я вести не буду, для меня само слово "диздок" железный маркер либо долбоеба, наслушавшегося сказочек, либо корпа с которым у нас разные категории и которых на харкаче все равно нет.
Да ничего страшного, братан, конечно мы разные. И да, я пришел из ААА и знаю какие практики стоит использовать. Но конечно если ты делаешь гиперкеж однодневный тебе они не нужны.
Только теперь ты не ААА и не имеешь под собой ресурсов ААА, и странно что ты не понимаешь что практики одних не всегда применимы к другим.
>гиперкеж
Мимо
>странно что ты не понимаешь что практики одних не всегда применимы к другим.
Ничего себе какая глубокая мысль! Попробуй воспользоваться ею в следующий раз, когда будешь давать советы другим.
Так и представляю анонимуса с охуилиардами денег на разработку ААА по диздоку, а рядом с ним вся его команда проверенных ветеранов геймдева. И сидят они тут, с нами, в двачетреде. Среди нас! Ну ничего, вот напишем все по диздоку тоже такими станем.
А что если я скажу тебе, что точно так же как игра могущая дизайнить сама себя, так же и диздок может себя переписывать? И переписывая себя диздок продолжает нести свою основную функцию: не давать тебе превратить игру в кашу.
Подмена понятий с инструмента/практик на бюджет и размер команды. Что-то уровня чела который отрицает гит и хранит все в раре. Или как отрицать паттерны проектирования.
1. Хранилище анимаций для персонажа, а благодаря возможности выполнять скрипты прям из редактора - можно эти самые анимации ещё и нарезать руками из спрайтшита (потому что годотовский ублюдский спрайтатлас не умеет так делать, как в нормальном юнити) - нахуя под это иметь сцену?
2. Прокси ресурс - например у меня был случай - нужно было перекрасить определенный узор пикселей на текстурах, соответственно нужно было либо извращаться с шейдером и рантайм генерируемыми масками/шумами, а так у меня есть proxytexture ресурс, который сам генерирует что мне нужно и без шейдера, так как хранит внутри себя уже готовую генерацию постоянно а ноды требующие texture - воспринимают его как родного.
3. Твой спич про сцены вообще непонятен, тем более ее подрузка обойдется дороже, а ручное управление через редактирование в нотпаде tscn будет ещё сложнее из-за лишней информации. А такое придется проделывать, если сильно меняется структура твоего хранилища игровых данных по любым причинам.
Название то нормальное, а вот лого это пиздец, как будто не двигло запускаешь, а какую то детскую хуйню. Уж лучшеб просто половина шестерни было, а не этот кринжобот.
Ты в курсе что ты его поменять можешь?
Лол, я пытался эту классику посмотреть, Ниасилил. Надо быть глубоко погружённым в контекст, чтобы данную пьесу понять, наверное.
Олсо, в этом году на Бродвее ставят её с Киану Ривзом и Алексом Уинтером. Литералли возвращение Билла и Теда. А ещё есть тоже бродвейская постановка с Магнето и Ксавьером, отрывок валяется на ютубе, деды прям отжигают; причём существует полное видео, и его даже можно бесплатно посмотреть, если лично прийти в Библитеку Конгресса в Вашингтоне, лол, но в интернетах нет.
Это как Питон, который назван не в честь змеи, а в честь Монти Пайтона, юмор которого тоже хуй проссышь.
>двигло запускаешь
Ты уж определись, у тебя проблема что ТЫ видишь неподходящее тебе лого при запуске, или что оно вообще существует?
Хорош под дурака косить, если мне не нравится лого при запуске, а оно внезапно не только при запуске, то очевидно мне ненравится само лого, а не то что его показывают при запуске. Я хуй знает чому ты так яростно пытаешься дефать это говно предлагая костыли.
>не хочешь срать на унитазе, сри на кортах как мужик, техническая возможность есть
>ряяя зочем мне решения мне не нравится само существование унитаза!!1
Это не ты там выше бурлил на тему "нет текстур - детская игра"? Тебя детскими игрушками пиздили, гримдарковый ты наш?
Братан, аналогии не твое, да еще и те которые не к месту, прекращай с этим. Я не хочу итт устраивать срач, поэтому отвечаю в последний раз, фиксить дерьмолого должен не я костылями, а ебаный хуан редизайном. Ты видимо нюфажина раз так яростно готов защищать говно, либо просто долбаеб которому хоть ссы в глаза - все божья роса. И я понятия не имею о каких ты там текстурах говоришь, так что мимо.

https://godotengine.org/article/live-from-godotcon-boston-web-dotnet-prototype/
Прикольно. Начинают подбираться к технологии юнити 2018 года. Правда в очень сыром виде.
Потому что на всех языка мира говно пишется как "ГОВНО", а все люди имеют психологию двачера.
Не признаем твою легитимность.
Даже годоти слезли с иглы монопердящей хуйни. Когда там нормальный coreclr?
Как с алфавитом? Мама помыла раму? Или ты слепой а читалка по картинке не распознает текст?

не знаю, что там с кодингом, но в своё время, когда там была другая модель распространения, он помогал мне со всякими языками типа clojure, elixir и т.д.
годотю думаю не потянет, слишком нишевая и специфическая вещь, но какие-то концептуальные вещи объяснить может, особенно сейчас, когда там модель можно выбрать типа того же жпт
ты што не вериш в великую нейросеть он яндепса?

Заебали эти бленд шейпы и отсутствие примеров того как использовать все эти ихние задумки в движке.
Нужно импортировать меш, разрезаю его по материалам и импортирую вместе с blend_shapes, с помощью add_surface_from_arrays. Никак не получается этим морфам присвоить названия. Вроде бы имена надо добавлять сразу после var array_mesh = ArrayMesh.new().
Но если это сделать. Получаю ошибки от add_surface_from_arrays, иду вслепую, не нашел нигде рабочего кода, нейронка расказывает небылицы.
>движок по документации.
Нету документации. Лишь краткое описание методов которые непонятно как использовать. Для блендера существуют аддоны на питоне, по которым можно ориентироваться. У годота в этом плане нихера нету. Сто раз пробуй и так и сяк, и гадай почему никак не выходит.
Ну хз, ты занимаешься низкоуровневыми вещами которые и не предназначены просто для кирилов.
Исходный код открыт, там и ищи. Вот что то похожее. Я что-то помню что по дефолту у блендшейпов и нет имен, они просто массив 0, 1, 2...
https://github.com/godotengine/godot/blob/19bb18716ef08b811fec330cba4d35fbdb027bcc/scene/resources/mesh.cpp#L1875
мимо высказался, все равно люблю годот.
Ставлю жопу ОПа, что это ты в своем говнокоде запутался. В 100 случаях из 100 это криворукие разрабы игры на чужом движке срут в штаны себе и заодно будущим игрокам.
Я бы небыл так уверен. У самого несколько раз сцены с нихуя ломались, приходилось в блокноте открывать и смотреть че не так. То что по моей вине ломалось не исключаю, но годот если позволяет мне так ломать не выдавая никакие предупреждения то считаю что это не моя вина, а вина движка, ибо как ты поймешь что так нельзя делать кроме как не на своем опыте?
Ну так воспроизведи ошибку и напиши баг репорт. Я в блендере так и сделал. Сначала пол года подождав может они сами догадаются и исправят. Никто из них не догадался как я страдаю, пришлось им рассказать, до вечера пофиксили.
> Ну так воспроизведи ошибку
Легко сказать лол. Вот к примеру у меня был такой баг, у сцены была переменная запакованой сцены, как только вложил туда другую сцену годот крашнулся и сцена перестала открываться, даже после перезапусков. Отредачив ее в блокноте, а после вставив ту же самую сцену в переменную, внезапно, все нормально заработало. Как воспроизвести в таком случае? Одно дело когда ты определенной последовательностью что то ломаешь, другое когда все ломается с дефолтных вещей, тоесть с нихуя.

var saved_copies: Array[Variant]
(по факту это Array[Array[int], но нестед тайпед коллекшнс ар нот суппортед блять)
Делаю вот так:
save_ini(copies_fn, "copies", {"saved_copies": saved_copies})
И получаю то такой файл:
[copies]
saved_copies=[[295, 1966], [1309, 1967], [86, 1968], [699, 1969]]
То такой:
[copies]
saved_copies=[Array[int]([295, 1966]), Array[int]([1309, 1967]), Array[int]([86, 1968]), Array[int]([699, 1969])]
ВОТ КАКОГО ХУЯ?
Оно работает и так и так, но что за хуйня блядская?
Если довольно часто или критично, подключаешь GIT, пробуешь повторить конкретно с той версией файла которая крашнулась.
Просто где-то у тебя типизировано, а где-то нет?
Смотрю чтобы сделать правильный вывод из прочитанного тебе сначала ДИЗДОК написать надо.
Так бы и сказал, что ты просто не умеешь писать диздоки. Так просто берешь и учишься, это такой же навык как и любой другой.
Сейчас бы тратить время на бесполезно-вредную хуйню. Ещё курить научиться предложи, а то чего, такой же навык как и любой другой.
Так не бывает, если это не нужно, то это и не проект вовсе, а просто поделие однодневное.
Ты заебал проецировать свое говно из головы на тред. Без диздока и гита шагу ступить не можешь, постоянно ебешь всем мозги своими антипаттернами, антисинглтонами, локальными минимумами, "а что если вдруг в мультиплеер захочешь", все у тебя ассетфлиты-гиперкэж-однодневки делают, только ты один такой умный сидишь и прешься от своего говна из головы, пиздос просто я хуею с содержимого твоей черепушки, душнила ебучий, и это даже не я там выше с тобой про гит говорил. Хртьфу нахуй.
Тихо-тихо, ну он же очевидно тебя на вот такие посты и разводит всё это время. Ты его покормил. И он теперь ещё два треда будет срать своим говном из головы.
Это залётный движкосрачер. Просто репортите его молча. Не говорите с ним вообще.
Да мне как то похуй, заебал я тебя или не заебал. Я буду и дальше делиться опытом как делать правильно, а если не нравится - не читай. Можешь хоть палкой копалкой дальше ковыряться, мне то что.
Ты больше похож на движкосрачера, если честно. Еще и вахтер нелепый.
>>В 100 случаях из 100
это когда мы живем в идеальном мире, где популярный софт означает, что в нем нет багов. ну это не так, очевидно. поэтому 95 из 100, или того меньше. и вот в эти 5 я и попал.
Он все равно нихуя не делает, забей на этого клоуна. Детектится по своей чсвшной манере через весь тред, что позволяет удобно делить его единственно "правильное" мнение на ноль.
Да не рвись ты так, научишься диздоки писать, и гитом пользоваться, так и безыгорным перестанешь быть со временем.
>Он все равно нихуя не делает
Странная претензия, мы вроде не в субшота треде.
А покажи, что ты делаешь без диздока. Ты же вроде хвастался что у тебя игра сама себя разрабатывает.
У меня диздок сам себя диздочить, а потом за меня игру разрабатывать будет, ведь при наличии диздока нихуя делать не надо, чем ты и занимаешься.
- изучить гит
- написать детальный диздок от и до
- продумать архитектуру таким образом, чтобы в любой момент переделать в мультиплеер
- изучить все антипаттерны, избегать их как огня
- никаких, блять, синглтонов
- не использовать ассеты, сделать свою музыку, шрифты, модельки, звуковые эффекты
- твой проект должен быть серьезным и серьезно спроектирован, серьезность определит дядя
Только после этого ты, ньюфажина, можешь запускать годот, иначе важный ААА дядя посчитает что ты лох однодневный а твой проект не проект.
Это знаешь как работает, его на гейдев галере в очко ебут и он думает что так и должно быть, сюда приходит, и оказывается что в гейдеве как бы в очко тебя ебать и недолжны. Вот он и трясется от обиды, мол раз меня ебут в очко то значит и вас обязаны.
Да нормальный роадмап в принципе.
Вдохновляешься chants of sanaar? Смотря в какое визуальное качество ты целишься. Если на готовых 2д ассетах, чисто код, то демо за полгода вполне реально. Если сам рисуешь то хуй знает, я вот сегодня все утро убил на создание единственной лоуполи 3д модельки, но визуал не моя сильная сторона.
Я планирую рисовать по большей части сам, но мне кажется это легче чем моделирование. Еще есть вариант использовать нейросеть для генерации отдельных элементов опыта работы с AI у меня тоже нет.
Я еще хотел спросить, насколько действенно использовать чат-ботов, например DeepSeek, для помощи с написание скриптов. Я попросил его сделать так, чтобы Player в тестовом задании телепортировался на другой край экрана, а не упирался в границу. Он справился. Но когда я попросил его написать код для плавной телепортации, чтобы края спрайта появлялись с разных сторон экрана, он не смог предложить действенное решение.
>иначе важный ААА дядя посчитает
Делать больше нечего важному ААА дяде, кроме как шататься по чьим-то поделкам и оценивать авторов.
Твой план расчитан на труженников. Мы тут все хобисты. Этот тред на плаву бдагодаря одному или двум, энтузиастам, пытающимся всем помочь, и даже при этом, не сильно много чего происходит. Занятнее будет просто начать делать игру, и разбираться по ходу дела. Не мало существует хороших проектов, которые изнутри выглядят как кошмар на улице вязов. И тем не менее они подарили немало позитивных эмоций тем кто в них поиграл. Лучшее враг хорошего, достаточно сделать сносно.
Мне очень везло с работой, как раз никто не ебал, коллеги и начальники были охуенно умными, а полезные практики как раз вырабатывались и обменивались разработчиками, а не сверху. Потому что они появляются как защита от факапов, обычно по результатам этих факапов. А по поводу подходят ли они инди, так как раз еще больше подходят, потому что если инди выгорит в очередной раз переписывая все на мультиплеер или вычищая сингтоны, то он скорее всего просто забросит игру или геймдев вообще, в то время как контора просто назначит на другого.
Но я вижу что ты пытаешься меня как то задеть, спровоцировать на что-то, не знаю на что, так что давай напрямую обсудим - как ты хочешь чтобы я поступил? Я могу покинуть тред и оставить тебя наедине с новичками, тогда ты окажешься возможно даже самым умным парнем на деревне. Можем даже попросить чтобы были удалены все мои сообщения, включая всякие полезные туториалы по годоту. Или ты хочешь чтобы только какие-то темы были запрещены для обсуждения в треде? Определись с позицией.
Хотелось бы добавить, что задача сделать игру целиком 0 to 100 в принципе не стоит. Хочется сделать играбельное демо, после чего найти такого-же вкатуна-энтузиаста, который заинтересуется проектом и будет готов заниматься технической частью, а самому сконцентрироваться на визуале и нарративе.
Ну, да, играбельное демо можно даже за месяц-два сделать, начав изучать с нуля.
Дипсик для кода откровенно устарел. Мой личный топ нейронок для гдскрипта - чатгпт не помню какой там последний, гемини 2.5 про, клод 3.7, гемини 2.5 флеш. Все они бесплатные, нужен только впн/прокси.
Все они будут путаться с версией гдскрипта (годот 3 или 4), поэтому надо четко указывать для какой версии ты хочешь, а задачи дробить на маленькие части, фиксируя рабочие варианты бекапами или ГИТОМ
Чем дальше твой проект идет тем выше шанс превратить все в кашу, если ты не понимаешь что именно тебе нейронки нагенерили. Надо разбираться в их коде, контролировать его качество, переписывать самые безумные куски и распихивать результаты по правильным полочкам.
>Но я вижу что ты пытаешься меня как то задеть
Во-первых ты как минимум с двумя анонами общаешься. Во-вторых, почему ты удивляешься что тебя пытаются задеть, если ты сам пытаешься всех задеть? Это ты растекся по треду, рассказывая то одному то другому что его проект не проект, что все мы гиперкежи-однодневки, и только ты тут делаешь правильно. Давай, виктимность офф, эмпатию он. Тебя не прогоняют. Делиться опытом - ок, отбивать у анонов желание что-то делать своими требованиями к гитам-мультиплеерам-архитектурам-синглтонам - не ок, принижать чужие проекты - тем более не ок. Мы к тебе не на работу пришли устраиваться, ты нам не платишь зарплату, и мы не должны соответствовать твоим галерам.

Вообще говоря я пока не начал никакой новый проект (а так у меня в очереди два прототипа на допиливание и релиз), так что можем попробовать сколлабиться, единственное что я предпочитаю 3-ю версию движка. Ну как сколлабиться, я могу тебе набросать какой то прототип в который ты будешь уже пробовать вставлять свое, параллельно разбираясь с движком.
Нет, не реально. Сколько бы тебе щас не говорили что это возможно, нет, нихуя это невозможно. Сам хуй к носу прикинь и пойми что ты нихуя не умеешь абсолютно. Тебе сначала нужно понять что такое яп и как его едят, потом понять что такое движок и как с ним работать, потом набить базу дефолтных знаний для говнокодинга, научиться псевдорисовать говном на холсте. Тем более ты собираешься тратить на это по 3-4 часа в день. Это просто смешно. Я по 14 часов в сутки сидел в движке, копался на форумах, копил знания, клепал прототипы с дефолтными механиками, рисовал убогие спрайты. Для того что бы мои поделия более ли менее стали похожими на зачатки игр я потратил, повторюсь, дроча по 14ч, около полугода. А ты блять хочешь с нихуя начать делать прототип. Это действительно смешно. Дам совет, перестань задавать тупорылые вопросы и просто блять начни делать хоть что то. В таком случае ты и сам поймешь сможешь ты или нет.
Во-первых, тебе тут больше одного анона пишет про вред синглтонов. Во-вторых, я как раз сам тему не поднимаю, но начинаю писать, когда ты (или кто-то еще) начинает форсить идею что всем не надо пользоваться гитом/диздоком/паттернами. Если бы ты писал просто что это тебе не подходит, и не пытался навязывать это как единственно пригодный путь разработки - я бы и не отвечал. В третьих, ну допустим я принижаю ПРОЕКТ, говоря что если ему не требуется проектирование, то он скорее всего маленький. А теперь давай посмотрим что пишут мне в ответ: >>21273 >в очко ебут >>21236 >клоуна >счвшной манере >>20685 долбоеба да, это персональные нападки на личность, а не на аргументы.
>всем не надо
Эти все сейчас с тобой в одной комнате? Тебе это приснилось маня? Это ТЫ сидишь гадишь итт что все обязаны иметь диздок и гит, а иначе проект не проект. Чмоня бля потешная.
>а не на аргументы
Какие аргументы у тебя шизик? От тебя не было ни одного адекватного аргумента, только шизовые корпоратовские пасты. Срыгни нахуй с треда. Опытом он делится бля. Че ты полезного высрал то? Линкуй свои блядские посты, хоть посмеемся.
Каждый раз ебало рвется с того что чмоня красящие кнопки кабанчику, возомнив себя гуру, начинает раздавать советы. Ты тапки индюки обуй и пройдись в них пидрила, а потом только советы раздавай. Советчик блять.
Проиграл.
Ну гит реально лучше иметь, особенно сейчас, в эру source tree/vscode got/ github desktop на крайняк, никто ж не заставляет дрочить команды в консоли, кроме некоторого небольшого количества поехавших. Гит сейчас доступен как никогда, а его внедрение окупается на первой пошедшей по пизде сцене годота от чиха пролетевшего мимо клавиатуры попугая. Диздок может и нахуй не нужен, а вот про гит стоит подумать и потратить полчаса времени на освоение интерфейса гита который даже олигофрену будет понятен.
Тебе форсят в ответ на твой заебавший форс, пчел. Это ты на любую проблему пихаешь гит, но, заметь, никто не приходит и не говорит "а вот не пользовался бы гитом, твоей проблемы с мультиплеерными кнопками бы не было".
Читать не умеешь?
Я бунтарь, даже без мультиплеерных кнопок.
Ну се, теперь у меня жаба будет в тапки-индюки обута, я уже давно думал о том че можно с ней оригинального сделать, а тут так сложилось что удачную ошибку допустил. Спасибо тебе анонче.
жабич
да похуй. исправлять-то как?
Конечно я делал такие ошибки в начале разработки.
Фиксить так:
Добавляешь в каждую точку интереса print()
Там где эмитишь сигнал
Там где коннектишься к сигналу
Там где получаешь
Там где создаешь сцену.
+ Там где добавляешь сцену add_child
отмена друзья я ебанутый.
Теперь мы не добавляем свои сцены во вкладку autoloads, а создаём именованный класс-потомок SceneTree и его имя добавляем в настройках в поле "тип главного цикла".

>туториал на ютубе по годоту
@
>платформер с передвижением по WASD
@
>другой туториал на ютубе по годоту
@
>другой платформер с передвижением по WASD
@
>...
Почему так? Других жанров что-ли нет? Вангую все эти учителя состнут большой жирный хуй, если их попросить написать выделение рамкой юнитов в 3д как в любой ртс или ситибилдере.
А ты пробовал в ютубе написать godot multiple unit selection RTS tutorial? Вангую, что не пробовал.
На тройке делай вручную через get_tree().set_script(...) как я неоднократно описывал со скриншотами в предыдущих тредах. Через set_script можно вообще подсадить скрипты и майнлупу и корню дерева, и разграничить между ними обязанности, и юзать их встроенные методы напрямую в их скриптах. В общем, для профи есть где разгуляться, чтобы все охуели как ты можешь.
Есть ещё 3д-шутаны с передвижением по WASD, их совсем слегка меньше, чем платформеров. Тащемта есть и 2д вид сверху типа первая зельда (хз как этот жанр называется).
Вообще, это объяснимо. 2д легче вкатунам. Для туторов нужен какой-то комплексный жанр с физикой перонажа - она привязана к движку. Игровая логика типа жрпг-боёвки или карточек не зависит от движка, диалоги тоже, в топ2д нет физики. Что остаётся? Ну вот.

Чел имей совесть.
А если еще и мультиплеерное?
Очевидные фепесы. Вместо отдельных нод в дереве, игровая логика выполняется прямо в корневой ноде. Меньше памяти - больше перфоманс.
И какой прирост даст? Нода ж ничего не весит почти. Какую логику туда выводить, например?
Логику менеджер выводить какую например погоды туда.
Сейм, охуел уже делать.
Ну так это не годетта, а ГОДО-ЧАН - надпись под GODOT
Ну и сиди как сыч без мультиплеера.
симплтон
Нет, я так не умею.
>отсутствие текстур, сплошная заливка цветом и целл шейдинг
>Неплохо смотрится
Смотрится ПО-ДЕТСКИ!
Я по ним прошелся, там практически нулевая активность и в мастерской стима тоже как ни странно 2 темы в неделю создается с почти всегда нулевым количеством комментариев
@onready var yandex_ads: YandexAds = $YandexAds
func _ready():
get_tree().paused = true
yandex_ads.show_interstitial()
yandex_ads.load_interstitial()
get_tree().paused = false
Но игра сразу возобновляется, не дожидаясь закрытия рекламы. Как правильно реализовать паузу на время показа рекламы и возобновление после её закрытия?
(аддон рекламы РСЯ от Noctis Salamandra)
> Как правильно реализовать паузу
Загляни в документацию к этому своему yandex_ads. Ищи там сигналы наподобие showing_ended() затем ожидаешь этот сигнал:
> func _ready():
> get_tree().paused = true
> yandex_ads.show_interstitial()
> yandex_ads.load_interstitial()
> await yandex_ads.end_signal()
> get_tree().paused = false
Это будет самое правильное. Если похожего сигнала нет, тебе придётся найти переменную типа состояния, и найти нужное тебе состояние. И плясать уже оттуда.
А вообще он что не предоставляет примеры использования? Изучи их.
По сути твой код аналогичен такому:
paused = true
$Label.show()
paused = false
То есть этот код выполнится мгновенно говоря абстрактно, не считая время которое может уйти на load()
Алсо, выглядит странно что ты сначала что то покаываешь, и только потом загружаешь.

https://rouw-x.itch.io/disposable


Двачую, анон. Спасибо.
Но я бы на твоем месте освоил за пару дней (сам экспорт делается одним кликом, но конечно надо некоторые вещи настроить - типа размера окна, может быть музыки) - на итче джемах люди стали часто просто скипать игру, которую можно только скачать, и которую нельзя сразу запустить на страничке. Конечно желательно еще и оптимизаций навернуть чтобы тяжелое 3д не было.
Покажи что-нибудь из своих рисовак. Не обязательно из игры.
В ии генерируешь что надо и забиваешь на рисование.
Как знаешь. Я бы, возможно, советы по рисовке дал. Наверняка у тебя есть пара спрайтов которые не вошли в игру. А весь код своей игры не покажу, конечно, но релевантные куски - запросто, и сколько-то тредов назад показывал свое про сигналы и сохранения и еще что-то.
>>21858 (Del)
Не относится к движку, опять набег какого то тролля.
Не кормите тролля, который даже пруфов не предоставляет. Вы прям как первый день на имиджборде.
Да ладно, даже если тролль - никакого срача пока не произошло, так что ящитаю все ок, можно пообсуждать. А если обсуждать _только_ движок то, например, и свою игру ИТТ нельзя запостить, и вообще, не то чтобы у нас тут треды в бамплимит за час улетают.

Все уже накидано до нас: https://lospec.com/palette-list
Сделай там как на скрине, включая сортировку.
Ладно, ты прав.
А ты типа тот самый троль? Создаешь атмосферу дурки как у себя в больнице? Наверни GdScript-а, уебище.

Держи, лягух, твою палитру. Теперь у тебя кончились отмазки.
> Узнал знакомое лицо в 5 пикселях
Вот именно поэтому мы помним видеоигры детства намного более красочными и детальными, чем они оказываются при попытке поностальгировать на эмуляторе.
Вот делаю я игру в 3d. И например, хочу сделать стену. В каких случая мне нужно заказывать модель, а в каких текстурку? Ведь можно обставить уровень готовыми моделями, а можно и примитивами с натянутыми текстурками или вообще совместить два подхода. Но в 3d графике я не шарю. Можете объяснить на пальцах или дать норм гайд?
А похож на анона выше, сорян уж.
Смотря какой стиль и какая стена тебе нужна. Разделяй в уме геометрию и текстуры. Нужна новая геометрия стены, например частично разломанная стена - делаешь новую модель. Нужна стена не кирпичная а каменная - делаешь новую текстуру.
Такое можно сделать на любом API, который умеет выводить на экран двухмерные изображения. Террария сделана на MonoGame, C#. Старбаунд сделан на SDL, C++.
Мы в треде о годоте и я спрашивал про годот. Я прекрасно знаю, на чем сделана террария.
Твоя проблема не годот или юнити или что ты там возьмёшь, а то, как ты организуешь управление этими двухстами миллионами блоков. По факту все что тебе надо рисовать - пару десятков тысяч блоков на экране и за его пределами, сотню мобов (в лучшем случае, а скорее десяток) и может иметь предел в пару тысяч поднимаемых (интерактивных) объектов. С этим справятся почти все движки из представленных, а вот справишься ли ты с оптимизацией подгрузки/выгрузки чанков мира, сохранением отредактированных игроком чанков и удержание в памяти активных объектов с сохранением их функциональности вне зависимости от дальности к ним игрока - вопрос только к тебе и твоим ментальным и профессиональным возможностям.
Ты думаешь террария грузит все эти 20 миллионов/15к текстур? Нет, она делит мир на чанки, и грузит только нужные, как и майнкрафт. Так что вопрос твоего скилла.
В первых версия террарии не было чанков. Там был обычный массив из тайлов. Может потом добавили, хз.
Почему нет? Попробуй. Какой-нибудь DeepSeek поможет тебе набросать скрипты.
Да вот кстати важная тема. Если есть большой 3д уровень, то большие обьекты или ландшафт надо разрезать на более мелкие. Чтобы подгружать
при приближении игрока и выгружать при отдалении. И при выгрузки из физического 3д пространства все обьекты попадают в логическое пространство с сильно упрощенными расчетами их взаимодействий.
Помню видео где разработчик гта вайс сити делал код ревью для реверс инжинереной гта ревс. Расказывал что в команде был один поляк который спал прямо в офисе. И програмировал тяжелые вычисления в игре. Одиночкам такое трудно вытянуть. Может есть готовые решения, или отлаженые методы?

Поищи плагины или туториалы на ютубе - клоны майнкрафтов точно делали. А по-секрету тебе скажу что геймдев в одиночку вообще сложно вытянуть. Одна из самых комплексных, разносторонних и геморройных айтишных залуп.
Не знаю что там этот поляк программировал, но физика колёс есть в любом движке на выбор, даже в годотя-буилтин физике. По факту вся суть упрощения сводится к следующему - нпс и автомобили ездят по рельсам(заранее рассчитанным маршрутам), а как только вступают в контакт с игроком - сьезжают с рельс и начинают взаимодействовать с физикой. При таком подходе считать много не надо, хотя настроить взаимодействия заранее и управлять ими чтобы минимально давать нпс сходить с рельс - задача тяжёлая, но не по сложности вычислений, а по сложности организации. А поляк мог заниматься рендером или кастомной физикой и спать в офисе, да. Но сейчас это лишнее, твоя задача только правильно пнуть уже готовые решения по навигации, рендеру и подшрузкам локаций, физические решения. Это не сложно но требует время и усилия.
значит в первой версии не было 15к тайлсетов.
>А по-секрету тебе скажу что геймдев в одиночку вообще сложно вытянуть. Одна из самых комплексных, разносторонних и геморройных айтишных залуп.
Пиздеж, единственное что было сложно это рисовать для тех, кто не может рисовать. Сегодня вообще поебать, спрашиваешь у ии и получаешь свои тайлы.
маминому художнику НЕПРИЯТНО
У движка есть модульные части, одни достаточно простые, другие сложные, третьи пиздец сложные, четвертые душные но не очень сложные. Какие-то части движка нужны всем играм (рендер), какие-то подавляющему большинству игр (ui, физика), ещё какие-то нужны многим играм (навигация, сохранения, локализация, анимационная стейтмашина и т.д.) И все это имеет разные уровни сложности и разную степень проработаности, а так же допускают разные степени квалифицированности реализатора. Потому я хз что там делал конкретно поляк, а тот парень в явном виде спросил какой уровень квалификации требуется на данный момент чтобы повторить бородатую гташку, приведя в пример умного поляка. Ну я и ответил, что в общем-то небольшой, но широкий.
Чтобы не пришлось разрезать, просто не склеивай его изначально. Например домики, деревья спавнятся по координатам, значит ты можешь просто по чанкам показывать только те что надо. Делать модульно и т.д. Полагаться на гридмапы. (Районы могут быть разными гридмапами повернутыми под разными углами, чтобы не было однообразно)
Ландшафт скорее всего heighmap, а это 2д текстура, которую можно автоматически легко нарезать на тайлы.
Во вторых, в крупной игре надо разносить визуал и коллайдеры. Лучше если это будут отдельно массив коллайдеров и отдельно массив мешей.
Алсо, может быть постоянно загружен какой то лоуполи вариант коллайдеров. Я видел в геншине на отдалении титан спокойно ходит сквозь пол, потому что у него просто коллайдер одна большая коробка-поляна, и только при приближении всякие скалы начинают учитываться. Аналогично с навигацией если она отдельно от физики.
А так наверняка есть и готовые аддоны для разрезания, их уже столько клепают в том числе нейросетками что я за всеми не слежу. В 3-ке все аддоны знал.
1) Внимание на 1 видео. Вопрос, почему у меня пидорасит пропорции куба, когда он сбоку поля зрения? Пидорасит не только его, но и в целом картинку. Как фиксить?
2) Решил я короче использовать ресурсы для предметов. Типа удобно, модно, молодежно. Ресурс содержит ссыль на модельку glb. Модель и ее коллизия загружаются вот таким образом для каждого предмета на уровне:
var model = item_data.Load_item_model()
# Настройка меша
var new_mesh = Find_new_mesh(model)
%Item_MeshInstance3D.mesh = new_mesh.mesh
%Item_MeshInstance3D.transform = new_mesh.transform #
%Item_MeshInstance3D.material_override = new_mesh.material_override
# Загружаем коллизию
var mesh_aabb = %Item_MeshInstance3D.get_aabb()
var box_shape = BoxShape3D.new()
box_shape.size = mesh_aabb.size * 1.1
%Item_CollisionShape3D.shape = box_shape
%Item_CollisionShape3D.position = mesh_aabb.get_center()
func Find_new_mesh(node):
if node is MeshInstance3D:
return node
for child in node.get_children():
var result = Find_new_mesh(child)
if result:
return result
return null
Только вот некоторые модели проваливаются сквозь CSGBox3D (видео 2). При чем если их сначала заспавнить на RigidBody3D, то они не проваливаются через него (видео 3), а еще не проваливаются и через CSGBox3D, если их потом скинуть на него. Какая-то магия ебучая.
Дипотсосик посоветовал мне использовать ConvexShape вместо BoxShape3D. И это действительно помогает, но при этом полностью пидорасит коллизии других моделек.
Короче нахуй я вообще в эти ресурсы полез. Бля буду, лучший вариант - это тупа нахуярить сцен для каждого из предметов и настроить все индивидуально
1) Внимание на 1 видео. Вопрос, почему у меня пидорасит пропорции куба, когда он сбоку поля зрения? Пидорасит не только его, но и в целом картинку. Как фиксить?
2) Решил я короче использовать ресурсы для предметов. Типа удобно, модно, молодежно. Ресурс содержит ссыль на модельку glb. Модель и ее коллизия загружаются вот таким образом для каждого предмета на уровне:
var model = item_data.Load_item_model()
# Настройка меша
var new_mesh = Find_new_mesh(model)
%Item_MeshInstance3D.mesh = new_mesh.mesh
%Item_MeshInstance3D.transform = new_mesh.transform #
%Item_MeshInstance3D.material_override = new_mesh.material_override
# Загружаем коллизию
var mesh_aabb = %Item_MeshInstance3D.get_aabb()
var box_shape = BoxShape3D.new()
box_shape.size = mesh_aabb.size * 1.1
%Item_CollisionShape3D.shape = box_shape
%Item_CollisionShape3D.position = mesh_aabb.get_center()
func Find_new_mesh(node):
if node is MeshInstance3D:
return node
for child in node.get_children():
var result = Find_new_mesh(child)
if result:
return result
return null
Только вот некоторые модели проваливаются сквозь CSGBox3D (видео 2). При чем если их сначала заспавнить на RigidBody3D, то они не проваливаются через него (видео 3), а еще не проваливаются и через CSGBox3D, если их потом скинуть на него. Какая-то магия ебучая.
Дипотсосик посоветовал мне использовать ConvexShape вместо BoxShape3D. И это действительно помогает, но при этом полностью пидорасит коллизии других моделек.
Короче нахуй я вообще в эти ресурсы полез. Бля буду, лучший вариант - это тупа нахуярить сцен для каждого из предметов и настроить все индивидуально
>1) Внимание на 1 видео. Вопрос, почему у меня пидорасит пропорции куба, когда он сбоку поля зрения? Пидорасит не только его, но и в целом картинку. Как фиксить?
Братан, ты в игры-то играл? Это FOV. Указывается в настройках редактора и камеры.
Второй пункт лень читать, спать пойду.

а как по мне, то выше 90-95 наоборот руинит иммержен, тк будто смотрю в перевернутый бинокль
> Решил я короче использовать ресурсы для предметов. Типа удобно, модно, молодежно.
Тебе неудобно - не используй.
> Ресурс содержит ссыль на модельку glb. Модель и ее коллизия загружаются вот таким образом для каждого предмета на уровне:
> Короче нахуй я вообще в эти ресурсы полез. Бля буду, лучший вариант - это тупа нахуярить сцен для каждого из предметов и настроить все индивидуально
А что если ресурс будет содержать ссылку на готовую сцену? Тогда тебе не надо было бы маяться всей этой еботнёй, которую ты набойлерплейтил.
Тебе никто не запрещает нахуярить сцен, настроить их индивидуально, а после этого использовать ссылки на сцены в ресурсах!
> @export var visible_object: PackedScene
...
> if visible_object: var vis_obj_instns = visible_object.instantiate()
> if vis_obj_instns is Node3D: spawner_node.add_child(vis_obj_instns)
А почему ты думаешь что дело в ресурсе? Ты спавнил точно такие же объекты в сценах для теста? Какого размера коллайдеры объектов? Какой толщины коллайдер пола? Выглядит так, что они слишком мелкие, и просто успевают набрать большую скорость чтобы пробить коллайдер и пройти его не заметив. Советы тут стандартные -
1) не делать слишком мелкие коллайдеры. Пол можно сделать и 10-100 метров толщиной если не видно что под ним.
2) не спавнить объекты на огромной высоте, спавнить их в 1-2 см над поверхностью (найти рейкастом например). Или в более простой игре вообще только на уровне пола, а на зданиях запретить.
3) если таки нужна физика где могут набираться высокие скорости падения, включить CI (continous integration), хотя по идее это влияет на перформанс с каждым таким объектом.
4) возможно надо подобрать параметры safe margin, на которых объект уже считается столкнувшимся
5) Если объекты слишком мелкие, типа 1см, подумать над тем, чтобы отмасштабировать всю физическую часть игры раз в 10. Вот тут рекомендованные параметры физики >>1015240 →
Если пол слишком огромный, например километры, то подумать о разделении его на мелкие квадраты по 100м. но надо учесть проблему стыков плит. Насколько я понимаю ни в одном физ движке ее окончательно не решили, хотя и постарались сделать подпрыгивание на стыке менее заметным
Менять BoxShape на Convex в такой ситуации не нужно. Бокс - один из самых быстро рассчитываемых объемных коллайдеров (быстрее наверное только сфера), конвекс же это цикл по всем треугольникам-поверхностям и более тяжелые рассчеты. Теоретически может быть что более долгие рассчеты и стали мешать пролетать тонкий пол, если мое предположение верно
Что такое "конвекс пидорасит другие коллайдеры" без контекста - не понятно. В Хоппе куча домиков с конвекс коллайдерами и ничего не портится, можно скакать по всем крышам.
В твой код вникать лень, но смысл его существования немного ускользает. Ведь меш, материал и шейп коллайдера - это и так ресурсы, которые переиспользуются движком для всех объектов. Которая загружается всего единожды.
А почему ты думаешь что дело в ресурсе? Ты спавнил точно такие же объекты в сценах для теста? Какого размера коллайдеры объектов? Какой толщины коллайдер пола? Выглядит так, что они слишком мелкие, и просто успевают набрать большую скорость чтобы пробить коллайдер и пройти его не заметив. Советы тут стандартные -
1) не делать слишком мелкие коллайдеры. Пол можно сделать и 10-100 метров толщиной если не видно что под ним.
2) не спавнить объекты на огромной высоте, спавнить их в 1-2 см над поверхностью (найти рейкастом например). Или в более простой игре вообще только на уровне пола, а на зданиях запретить.
3) если таки нужна физика где могут набираться высокие скорости падения, включить CI (continous integration), хотя по идее это влияет на перформанс с каждым таким объектом.
4) возможно надо подобрать параметры safe margin, на которых объект уже считается столкнувшимся
5) Если объекты слишком мелкие, типа 1см, подумать над тем, чтобы отмасштабировать всю физическую часть игры раз в 10. Вот тут рекомендованные параметры физики >>1015240 →
Если пол слишком огромный, например километры, то подумать о разделении его на мелкие квадраты по 100м. но надо учесть проблему стыков плит. Насколько я понимаю ни в одном физ движке ее окончательно не решили, хотя и постарались сделать подпрыгивание на стыке менее заметным
Менять BoxShape на Convex в такой ситуации не нужно. Бокс - один из самых быстро рассчитываемых объемных коллайдеров (быстрее наверное только сфера), конвекс же это цикл по всем треугольникам-поверхностям и более тяжелые рассчеты. Теоретически может быть что более долгие рассчеты и стали мешать пролетать тонкий пол, если мое предположение верно
Что такое "конвекс пидорасит другие коллайдеры" без контекста - не понятно. В Хоппе куча домиков с конвекс коллайдерами и ничего не портится, можно скакать по всем крышам.
В твой код вникать лень, но смысл его существования немного ускользает. Ведь меш, материал и шейп коллайдера - это и так ресурсы, которые переиспользуются движком для всех объектов. Которая загружается всего единожды.
Это я к тому, что числа размера "120" в fov годота вводить не надо.
Начни с не таких амбициозных проектов. Просто змейку, потом какой нибудь топ-даун аля вампир сурвайлайк.