Шапка: https://hipolink.me/godothread
Предыдущий: >>977039 (OP)
Архивный: >>973473 (OP)
Алсо, в воскресенье скорее всего релиз на итче
Мимо отписывался пару раз про разработку небольшого хоррора
При экспорте проекта куда-то теряется json файлы. Пробовал и добавлять в фильтры экспорта *.json, и не добавлять. Результат один. Что я не так делаю?
>Сделай змейку лучше.
ВНЕЗАПНО, это сложнее, чем я думал.
1 - двигаются друг за другом, но съезжают.
2 - двигаются строго по маршруту, но отстают.
Алсо непонятно, что делать с (само)коллизиями...
>>980551 →
>Благодарю за идею
А у тебя змейка получилась?
Вот так. Вторую строчку, если что, я пустой тоже пытался оставлять. Результат такой же.
Любая змея похожа на сбежавший от кого-то член.
Не всё так просто.
Area3D может только регистрировать вхождение. Это подходит для хитбоксов/зоны влияния, но плохо для передвижения. С хитбоксами проблемы нет.
Если сделать каждый сегмент RigidBody3D, они будут мешаться друг другу, "спотыкаться" об окружающие объекты. Уже пробовал такое. Jolt тут не помогает.
У CharacterBody3D похожие проблемы + он какой-то медленный, когда много тел рядом находится. А это ситуация как раз когда все толкают друг друга.
StaticBody3D может подойти, но его придётся часто "телепортировать" и это может вызывать проблемы окружающих физических объектов, которые должны останавливаться/отталкиваться от StaticBody3D.
Впрочем, сначала нужно в сцену её поместить. Без физического окружения физику не протестируешь.
Так вот, я недавно на примере сапёра убедился, что я тупой. У меня ступор мозговины.
Есть бесплатный сапёр в интернете и там автор сделал двухкнопочное управление. Не нужно ни среднюю кнопку мыши нажимать, ни две одновременно. Ключевой геймплей состоит из двух действий. Старые сапёры разносят эти два действия по трём кнопкам. И я разносил тоже. Специально закодил обработку одновременного нажатия двух кнопок. И ни разу в голове не щёлкнуло, что в этом месте можно оптимизировать.
Вот так-то.
Вот и делай теперь игры после таких обескураживающих фактов.
а можыт змею сделать цельной колбаской и просто по чут чут скейлить модельку по одной оси...
Для этого и нужны гейм-дизайнеры и дизайнеры интерфейсов
> непонимании сапера
О, если ты его поймёшь, это такой кайф для тебя будет. Другие игры тупо не нужны. Там охуенной глубины геймплей и зашкаливающая реиграбельность. При двухкнопочном управлении! Гениально!
https://fatum-game.itch.io/noesis
Хуякс, кто-то игру сделал. Поздравляю. Я пока не играл, но пару мыслей напишу
>LCM
Если это левая-мышь-кнопка, то принятая аббревиатура LMB.
Еще можете под линукс-макось собрать. В годоте это делается парой кликов, а 20-30% прирос загрузок даст.
Если аккаунт на реддите есть, то там полно сабреддитов которые будут вам рады. Начиная от r/godot и r/indiegames и до чего-нибудь нишевого про хорроры.
>Если это левая-мышь-кнопка, то принятая аббревиатура LMB.
Спасибо, на странице исправил.
>Еще можете под линукс-макось собрать. В годоте это делается парой кликов, а 20-30% прирос загрузок даст.
Проблема в том, что я протестировать не смогу, придётся надеется, что всё работает.
>два действия по трём кнопкам.
Чё?
>обработку одновременного нажатия
Чёёё?
ЛКМ - открыть клетку (мина взрывается).
ПКМ - воткнуть/снять флажок (не взрывается).
Клетку с флажком открыть нельзя.
Если можно поставить "?", тогда:
ПКМ - флажок/"?"/пусто/флажок/"?"/... - цикл
Где там что-то ещё? Что ещё ты там выдумал?
>>1534
>непонимании сапера
Там всё очень просто: каждый номер обозначает количество заложенных мин на соседних клетках (теоретический максимум 8, минимум 0). Разные соседние клетки суммируют одни и те же мины, что помогает обнаружить точное положение этих мин.
Если у тебя такая ситуация (поле 3x3):
_ _ _
1 2 2
? ? ?
Тогда первый ? - пустой, на других - мины:
_ _ _
1 2 2
_ ✓✓
Ставишь флажки ✓ на все потенциальные мины.
Общий алгоритм игры:
1. Начинать проще всего с любого угла.
2. Помечаешь все очевидные мины флагами.
3. Открываешь все очевидно пустые клетки.
4. Повторяешь 2-3, пока есть очевидное.
5. В редких случаях приходится угадывать.
Играешь, пока не откроешь все пустые клетки.
Начинай с самого маленького уровня сложности.
спидранил сапёра на уроках через проектор
>два действия по трём кнопкам.
Чё?
>обработку одновременного нажатия
Чёёё?
ЛКМ - открыть клетку (мина взрывается).
ПКМ - воткнуть/снять флажок (не взрывается).
Клетку с флажком открыть нельзя.
Если можно поставить "?", тогда:
ПКМ - флажок/"?"/пусто/флажок/"?"/... - цикл
Где там что-то ещё? Что ещё ты там выдумал?
>>1534
>непонимании сапера
Там всё очень просто: каждый номер обозначает количество заложенных мин на соседних клетках (теоретический максимум 8, минимум 0). Разные соседние клетки суммируют одни и те же мины, что помогает обнаружить точное положение этих мин.
Если у тебя такая ситуация (поле 3x3):
_ _ _
1 2 2
? ? ?
Тогда первый ? - пустой, на других - мины:
_ _ _
1 2 2
_ ✓✓
Ставишь флажки ✓ на все потенциальные мины.
Общий алгоритм игры:
1. Начинать проще всего с любого угла.
2. Помечаешь все очевидные мины флагами.
3. Открываешь все очевидно пустые клетки.
4. Повторяешь 2-3, пока есть очевидное.
5. В редких случаях приходится угадывать.
Играешь, пока не откроешь все пустые клетки.
Начинай с самого маленького уровня сложности.
спидранил сапёра на уроках через проектор
> Что ещё ты там выдумал?
Не я, а Билл Гейтс выдумал, в классическом сапёре венды одновременное нажатие двух кнопок мыши на открытой клетке включало сонар, прощупывающий соседние клетки. При этом на левый клик по открытой клетке ничего не происходит. Позднее, когда появились трёхкнопочные мыши (с кнопкой на колёсике), сонар продублировали на третью кнопку.
Очевидно же, что двойное нажатие кнопок (или третья кнопка) не нужно. Гениальное решение - просто перенести сонар на ЛКМ.
> Помечаешь все очевидные мины флагами
> спидранил сапёра
Так ты риально не знал про сонар?
>сонар, прощупывающий соседние клетки
Так это же чит-код вроде бы был, нет?
>просто перенести сонар на ЛКМ
А зачем он нужен-то, если ломает игру?
Смысл сапёра - разминка для мозгов.
Если ты видишь мины, то это читерство.
> Так это же чит-код вроде бы был, нет?
Нет.
> ломает игру?
Это и есть игра. Сонар не видит мины. Если ты неправильно выставил флаги - при включении сонара они взорвутся с гейм-овером.
>Сколько времени ушло?
Полгода, но это с учётом того, что нас двое и мы оба работаем 5/2. Времени на игру оставалось не так уж и много. Плюс я с нуля изучал годот.
> Смысл сапёра - разминка для мозгов.
Вот например ситуация, где логически ничего не выяснишь. Только на удачу тыкать.
есть саперы без удачи, тыкай куда хочешь, гарантированно будет пустая клетка
Например я хочу сделать на годоте просмотрщик для ресурсов из разных игр. Открывать модели и проигрывать анимации.
Конечно.
Чтобы не быть голословным, например: импортер из HL1
https://github.com/DataPlusProgram/Godot-GoldSrc-MDL-Importer
Завезли поддержку маркдауна в скриптах. Теперь записи-тудушки удобней делать.
Спасибо. Буду посмотреть. Жаль нельзя загружать файлы откуда угодно, а только из папки проекта.
Открывать файлы можно (FileAccess. DirAccess с любым путем, не только res:// или user://), создавать модели в рантайме тоже можно (с помощью SurfaceTool, возможно GLTFDocument)
Падажжи бля, меня профессор Харис ебнул? Или что случилось под конец? Я провалился? Титры мне показали, но осталось ощущение что в игре присутствует другой финал.
А вообще годно.
лол, увидел твой пост, ради интереса загуглил дум импортер и он тоже существует
https://github.com/DataPlusProgram/GodotWadImporter
>Падажжи бля, меня профессор Харис ебнул?
Ебнули по голове гг другие сотрудники.
>Или что случилось под конец?
Ну герой сканирует профессора и обнаруживает, что у него нет никаких мыслей и его хуярят по затылку.
>осталось ощущение что в игре присутствует другой финал.
Нет, финал только один.
>А вообще годно.
Спасибо, анончик.
Если кому-то не впадлу, то можете создать пост с игрой? Хз, когда мой аккаунт разбанят. Можете просто написать, мол, челы сделали игру, вебм прикрепить и ссылку указать. Чёт даже обидно стало
https://fatum-game.itch.io/noesis
Никто не написал причину. Просто ошибка We had a server error.... Чекнул аккаунт в режиме инкогнито, а его приостановили, пост в ветке тоже пропал.
Может из-за того, что новый аккаунт. Но бля, как я иначе должен карму собирать, пиздец. Я даже забыл про неё
Если написать причину, почему тебя забанили, то здесь меня тоже забанят. Не раскисай, держись. Быть добру.
>Может из-за того, что новый аккаунт
Именно так. Есть различные статьи с советами по набору кармы.
https://dtf.ru/indie/1857195-prodvizhenie-igry-v-steam-i-vishlisty-reddit
https://dtf.ru/gamedev/1080281-chto-sdelat-chtoby-reddit-uznal-pro-vashu-igru
Была ещё годная статья на DTF с конкретными инструкциями как быстро надрочить карму, но я её не нагуглил. Может сам найдёшь.
Ночью закину. Забанили скорее всего автоматом, да, реддит легко заабьюзить ботами, поэтому он параноит по новым аккаунтам.
Отпишусь ИТТ со ссылкой потом.
>Создал пост с игрой в ветке /r/godot
А смысол?
>Можете просто написать, мол, челы сделали
А смысол???
Твоя целевая аудитория - разработчики на Godot?
>>1726
Смысл так заморачиваться? Если игра нужная, то банальный поиск по тегам на itch.io должен дать экспоненциальный рост со временем. Большинство жалобных постов "мою игру никто даже не смотрит" смотришь - а игра там реально никому не нужная. На нужных играх постоянно нытики "ну когда апдееейт", когда автор 3 года ничего не постил и не был онлайн.
Это ты пару тредов назад рассказывал как в тайне ото всех пилишь-перепиливаешь и снова перепиливаешь 10 из 10 шедевр, который слету, с первой попытки, возьмет игровой мир штормом и разорвет все чарты?
>экспоненциальный
Кек
Не, у меня нет такого шедевра...
Я мучаюсь выбором. Что придумаю - нинужно. Как разрабатывать игру, если нет нужных идей? Легко выдумывать какую-то никому не нужную фигню...
А если даже что-то нужно, это уже давно сделали.
Не сомневаюсь, ты придумаешь, сделаешь и взлетишь экспоненциально. А мы пока так пошуршим.
Большое спасибо, анончик.
>система с кармой полный кринж
Так это ж БАЗА многих классических форумов.
У неё два основных назначения:
- самомодерация сообщества: неугодных загоняют в глубокий минус, что ограничивает их возможности на форуме = меньше работы модераторам.
- стимуляция качественного постинга: люди обычно обожают смотреть на рост чисел, а за качественный контент ты получаешь больше лайков в карму = ты мотивирован постить больше и качественнее, и стараешься избежать гнева толпы (минусов).
Основной минус системы кармы: сообщество часто превращается в circle jerk, когда олдфаги наяривают друг другу карму на одно и то же мнение, а любые новые/нестандартные мнения отлетают в минуса.
Так что хоть и не без минусов, но смысл есть.
>Поделиться игрой с сообществом Godot
Кто твоя целевая аудитория? Сообщество Godot?
Вот здесь готовы играть в индюшатину:
https://reddit.com/r/indiegames
Вот здесь играют в бесплатное по запросу:
https://reddit.com/r/playmygame/
Вот здесь ждут релизнутые инди хорроры:
https://reddit.com/r/HorrorGaming/
Ну и дальше можно поискать, где твоя ЦА.
А пост в r/Godot - всё равно, что на гитхаб.
Ты пропустил третье, а пожалуй даже первое назначение - затруднить ботам жизнь. На реддите помимо кармы куча ограничений направленных на борьбу с. Не то чтобы это работало.
Забросил:
https://www.reddit.com/r/indiegames/comments/1geutko
Выглядит слишком дохло, поленился
Видосы нельзя, забросил ссылкой:
https://www.reddit.com/r/HorrorGaming/comments/1geuwpb
Давайте теперь всем тредом наблюдать что даст наибольший выхлоп.
>>1715
Принеси через пару дней аналитику с итча.
В отставании по фичам, в другом логотипе и в отсутствии разработчиков. Ответ без подвоха.
>Принеси через пару дней аналитику с итча.
Да с реддита уже 72 человека перешло. Я считаю, вполне неплохо
Спасибо ещё раз, анон. Выручил
>Кто твоя целевая аудитория? Сообщество Godot?
Нет, но они могут перейти на страницу игры, скачать и тем самым поднять игру на itch.io. Во-вторых, они могут кинуть её друзьям, в конфы и т.д., сарафанное радио никто не отменял. Я конечно полный ноль в маркетинге, но сообщество Godot не стоит игнорировать.
Я правильно понимаю, что общий принцип таков - мы делаем скрипт "базу" со словарями вида:
диалог_1 : {
вопрос_1 : "Ты пидор?"
ответы_1 : {
ответ_1_a : { текст : "А может ты пидр, епта?", след_вопрос : "вопрос_2", сигнал : нет}
ответ_1_б : { текст : "Только не бейте, лучше обоссыте", след_вопрос : "вопрос_3", сигнал : нет}
}
вопрос_2 : "Ты че, ахуел?"
ответы_2 : {
ответ_2_a : { текст : "Да, пошел нахуй", след_вопрос : "нет", сигнал : атака}
ответ_2_б : { текст : "Врешь, не возьмешь!", след_вопрос : "нет", сигнал : побег}
}
вопрос_3 : "Хуй будешь?"
ответы_3 : {
ответ_3_a : { текст : "Да", след_вопрос : "нет", сигнал : сосать_хуй}
ответ_3_б : { текст : "Нет", след_вопрос : "нет", сигнал : смерть}
}
}
Где игроку сначала отображается вопрос_1, и два варианта ответа: ответ_1_а и ответ_1_б. После выбора мы смотрим в параметры ответа и либо идем к следующему этапу диалога, либо завершаем его с каким-то эффектом (упрощенный пример)
Верно?
Есть несколько готовых фреймворков:
https://github.com/dialogic-godot
https://github.com/rakugoteam
+ масса новичков/заброшенных.
Если хочешь JSON, то лучше бери это:
https://hjson.github.io/ - удобнее для записи.
Можно писать историю с помощью Twine:
https://twinery.org/ и конвертировать в JSON:
https://github.com/lazerwalker/twison
Ну или написать свой велосипед на GraphEdit.
Есть ещё масса других способов, фреймворков...
>Верно?
Одного верного решения нет, делай как нравится.
У каждой фразы есть уникальный идентификатор. Все идентификаторы выстраиваются в разветвлённые деревья диалогов. Диалоговый менеджер на лету пересобирает деревья диалогов под меняющуюся ситуацию.
Разумеется напрямую редактировать файлы жсон будет неудобно, потому что там будет айди через айди на айди и айди погоняет. Нужно написать утилиты для работы с системой.
Хм. Думаю, за 500$ в месяц я смогу тебе написать такую систему месяца через четыре.
>Думаю, за 500$ в месяц я смогу тебе написать такую систему месяца через четыре.
Зачем так жирнить?
>айди через айди на айди и айди погоняет
Можно делать текстовые айди:
WHEN_PLAYER_ENTERS_THREAD: "здарова, ньюфаг"
Тогда и перевод на другие языки будет проще.
>пересобирает
>под меняющуюся ситуацию
Я думаю, большинству игр это не нужно.
Большинство игр сюжетно линейные, как палка. Разветвления только косметические, для вида.
Почему? Потому что развилки ведут к
https://ru.wikipedia.org/wiki/Комбинаторный_взрыв
А способ избежать этого - отказ от чёткого сюжета.
> Зачем так жирнить?
Скучно.
Ну не игры же делать?
Я весь день бетон таскал вёдрами. Хочу отдохнуть.
Спасибо за инфу, изучу
Сходи проветрись, может колодце тред заметишь.
Учи мемесы чтобы не быть батхертом
>Думаю решающим оказалось чувство общности-братства и желание поддержать товарища-годотера
...или желание посмотреть, что возможно сделать в 3D на игровом движке, который многие используют только для 2D и/или на очень базовом уровне.
Чел на 3 вскрыл мутную тему, так что тут без юриста и не разберешься.
С одной стороны, он хочет чтобы копирайт его репозитория (MIT) указали в форке. То есть, он добавил в начало LICENSE.md строчку "контрибуторы Блэйзиума". И вроде как по правилам Гитхаба, на котором все это действо происходит, контрибуторы соглашаются с лицензией форка, откуда берут пулл реквест: https://docs.github.com/en/site-policy/github-terms/github-terms-of-service#6-contributions-under-repository-license
С другой, в самих то файлах исходников он отказывается делать реплейс-замену, и там говорится только про копирайт Godot Foundation, а поскольку тот же гитхаб, пока репу не отвяжешь, считает ее форком основной репы, то для разработчиков редота-то этот PR выглядит как просто дифф файлов оригинального Годота с оригинальным копирайтом, и вроде как ничто и не намекает что они обязаны вписывать контибуторов Ьлейзиума.
TL;DR: копирайт на код PR всегда у автора этого PR, иногда бывает Contributor Agreement где автор PR может отказаться от прав, дефолтные правила Гитхаба говорят что контрибуторы отсылают под лицензией репы, но тут неоднозначно, какая лицензия, поскольку в репе написано одно, а в файлах - другое.
>в r/indiegames никакого сообщества по сути нет
Мне кажется, твоя игра/видео просто не цепляет.
Буквально только что наткнулся на пост:
https://reddit.com/r/indiegames/comments/1fqvx70/
1500+ лайков, 50+ комментариев
В чём секрет? Нужно делать фановый геймплей, а не бродилку по 3D ассетам с клеймом "хоррора".
А что толку с поддержки годотеров, если у игры не получается органически завлечь массовую целевую аудиторию? Это всё равно что накрутка...
Ничего не говорю про игру, ты молодец, но мнение относительно маркетинга у тебя, имхо, странное.
Посмотрел твой пост, а там говнище QTE. Почитал коменты - там и пишут что это говнище QTE которое надоедает после первых пару раз. Очередной пост который привлекает лайки мигающими бессмысленными картинками. Хз насколько он конвертируется в продажи, но хомячков конечно хватает.
>редот хакнули
Какое отношение эти школоло срачи имеют к Godot?
>stolen my PR
Не украли, а скопировали. Разницу понимать надо.
Украли == у тебя нет больше твоей вещи.
Копировали == оригинал остался у тебя.
Вот пиратство - это нелегальное копирование.
С лицензией смешно, там же везде MIT лицензия.
>>2026
>в файлах исходников делать реплейс-замену
Мне кажется, это нужно только если ты изменил их.
Если ничего не изменил, зачем менять заголовок?
Каков твой копирайченный вклад? Имя форка?
>С лицензией смешно, там же везде MIT лицензия.
MIT лицензия требует указывать авторство.
Блджад, это вообще практически единственное, что она требует. Пользуйся как хочешь, но укажи авторство. Как говориться, you had one job. Как можно было не выполнить единственное условие и не указать авторство?
Лицензии вообще все равно на то, какой именно был вклад. Она бездушная. В ней нет ничего про оценивание - ну мол это всего одна строчка, не так много же. Ну вот например тот чел перекрасил кнопочку в этом ПР. Имеет он право перекрасить кнопочку? Имеет. Он изменил код в файле main/main.cpp. Имеют ли право в редоте взять его код, но не указать авторство? (То, что он называет воровством). Тут вопрос неясный. Когда в редоте берут ПР из годота, коллизии не возникает, потому что они ссылаются на авторство контрибуторов годота и добавляют свою строчку. Когда авторы редота берут из блейзиума, получается коллизия, скажем так множественного наследования, потому что они должны указать и авторов годота, и себя (редота), и блейзиума, что они делать отказываются, ссылаясь на то, что в самом файле (main/main.cpp) копирайта блейзинума не вписано, там есть только копирайты оригинала годота. То есть я думаю что в редоте заблуждаются и нарушают правила гитхаба, отвечая (на скриншоте) что файлы репозитория существуют отдельно от репозитория и не покрываются лицензией репозитория. Но тут реально юрист нужен чтобы разобраться.
Тут вообще и у самого годота старая проблема, ведь в нем есть файлы с другими лицензиями, не МИТ, например Апач, которые требуют указывать авторство либ, а Хуан утверждает что достаточно написать МИТ Годот, что имхо не достаточно.
>другими лицензиями, не МИТ
Об этом тут написано, вкратце - есть готовый файлик:
https://docs.godotengine.org/en/stable/about/complying_with_licenses.html#third-party-licenses
>нарушают правила гитхаба
Смотреть нужно, что там скопировали, откуда и как, а не обсуждать громкие заявления каких-то ноунеймов.
Наверняка использовал "stolen" для кликбейта, мол:
>украли коды - теперь не можем без них работать(((
Только это всё к нам отношения не имеет, если мы пользуемся исходным Godot, а не его форком.
>Об этом тут написано, вкратце - есть готовый файлик:
Ага, есть, только об этом должно быть написано не в конце странички неразборчиво, а в начале капсом. А в доках к 3-ке там еще меньше.
>смотреть нужно, что там скопировали, откуда и как
Я об этом упомянул - это опасный образ мышления, многие опенсорс проекты на это нарывались, мол ну я же просто одну-две строчки у кого-то взял. зачем его указывать. А нет, даже этого достаточно.
>Наверняка использовал "stolen" для кликбейта, мол:
>украли коды - теперь не можем без них работать(((
Ты видимо скрин не читал. Там все видно кто что сказал.
>Только это всё к нам отношения не имеет, если мы пользуемся исходным Godot, а не его форком.
Откуда тебе знать, чем пользуется каждый посетитель треда. А кроме того, есть и новички, которые могут пока не знать и по чьему то совету выбрать другой форк.
>мы пользуемся исходным Godot, а не его форком.
Если кто-то и пользовался редотом, то после взлома весь редот выглядит загаженным. Хуй знает насколько глубоко под них подкопали. Встроят бекдор как недавно в XZ Utils и все идеи украдут!
Это тот фееричный случай, когда админ отлаживал ядро линукса, потому что у него комп стал загружаться на несколько миллисекунд дольше?
Почти - ssh коннектился дольше.
Но ладно, оставить шутки, все равно хакать нечего. Редот так и не осилил ничего релизнуть, все логотипы меняют.
Откуда я знаю, по чьему? Ютуб какой нибудь посмотрят, а там столько роликов на эту тему клепают даже на русском.
Я вот по маскоту форк выбираю. У Блазии все украшения в виде логотипа, и даже вырез под пупок - интересно, что у нее еще такой формы?
Ну и задротство, хоспаде. Лучше бы игры делали
Форк форка, над которым работает один шиз. Следующий шаг - форкнуть форк форка и поставить на него тульпу.
https://www.youtube.com/watch?v=UwHIgAAGB0s
Смотрим вместе.
https://www.youtube.com/watch?v=5Hog6a0EYa0
Объясните мне, что такое отношение реализации/внедрения/Implementation?
Прочел кучу инфы в интернете, пообщался с чатгпт, но так и не понял, нахуя это нужно, если есть наследование. Судя по описаниям - это 1 в 1 вещи. Просто называются разными заумными словами
Реализация - то, как что-то делается (сравнительно с интерфейсом, который, грубо говоря, описывает что делается)
Реализация скорее полагается на инкапсуляцию (которой в гдскрипте вообщем то и нет, если только себе на память помечать _названия)
А учитывая утиную типизацию, то получается больше похоже на PIMPL. То есть, можно использовать разные реализации, даже если наследования в прямом смысле нет. Например, можно вызывать if obj.has_method("fire") obj.fire(), даже если obj не является наследником какого-то базового класса FireAble, а просто содержит такую функцию. И переключаться между реализациями, меняя ссылку на другой объект.
> Реализация скорее полагается на инкапсуляцию (которой в гдскрипте вообщем то и нет
Инкапсуляция (in-capsule) - это не сокрытие!
Инкапсуляция не в синтаксисе, инкапсуляция в твоём коде.
Инкапсуляция (in-capsule повторюсь) - это когда модуль независим от остальных частей кода, весь его функционал не выходит за рамки "капсулы", модуля.
У собесиков своя атмосфера, им просто зазубривать слова надо, вне зависимости от значения.
И ты меня не заставляй!
>реализации/implementation
В каком контексте? Реализация (имплементация) - осуществление задуманного. В контексте ООП это может означать реализацию абстрактного класса.
Пример из классов Godot:
https://docs.godotengine.org/en/stable/classes/class_basebutton.html
Это базовая кнопка. Её нельзя использовать как есть, потому что у неё нет поведения. Но из неё можно создать собственную кнопку, реализовав методы:
>void _pressed() virtual
>void _toggled(toggled_on: bool) virtual
В них описывается поведение твоей новой кнопки.
Зачем абстрактные классы нужны? Потому что зачастую нужно одинаково взаимодействовать с совершенно разными объектами, которые обязаны реализовать определённый набор методов.
Обязаны, ибо без этих методов смысла в них нет, но заранее реализовать ты их не можешь, потому что реализация может быть разной в разных классах.
Честно говоря, я сам не очень разбираюсь в этих абстрактных классах, но общая задумка в том, чтоб компилятор тебе написал ошибку наподобие такой:
>Can't make instance of abstract class BlaBla! Implement method Say(text: String) before calling BlaBla.new().
В GDScript понятия абстрактных методов пока нет:
https://github.com/godotengine/godot-proposals/issues/989
Там см. примеры, как это можно обойти (assert).
Ещё слово "реализация" может использоваться как противопоставление "интерфейса" класса. Здесь интерфейс - это список публичных полей и методов. Например, is_hovered() у кнопки - это интерфейс, а реализация спрятана где-то в исходниках на C++.
Разделение на интерфейс и реализацию в ООП несёт смысл в контексте инкапсуляции: когда ты заранее утверждаешь интерфейс и стремишься его никогда не изменять, даже если реализация изменится. Это позволяет использовать объект одинаково извне, полагаясь только на стабильный интерфейс. Можно говорить о нарушении инкапсуляции, когда внешние классы полагаются на реализацию другого класса: например, ожидают какой-то побочный эффект, возникающий в следствии конкретной реализации, однако отсутствующий в заявленном интерфейсе.
Допустим, есть такой интерфейс:
>func pull_data()
Мы обнаружили, что pull_data() выполняется ровно 5 секунд, и использовали это знание в своём коде:
>pull_data()
>time += 5
Однако, автор класса с этим интерфейсом смог оптимизировать реализацию, и теперь она может завершить работу за 5 микросекунд (в миллион раз быстрее). Теперь наш внешний код будет выдавать некорректный результат - ибо полагался он не на интерфейс, а на реализацию чужого класса.
Пример смешной, а ситуация страшная - из-за таких ошибок в программах космические корабли теряли.
>внедрения/injection
Это вообще отдельная тема. Допустим, тебе нужна определённая зависимость, но ты не знаешь пока конкретные детали. Пускай пользователь сам определяет эти детали! Ты объявляешь:
>@export var platform: VehiclePlatform
А дальше пользователь сам укажет, какая ему платформа нужна: на колёсиках, на гусеницах, на механических ногах, на воздушной подушке... Тут единственное условие - совпадение интерфейса:
>platform.move(direction)
Через который ты к ней обращаешься. Большое преимущество в том, что ты можешь сделать много различных платформ и протестировать полностью независимо от того, что на них будет ездить.
Примеры DI из Godot: любые физические объекты, зависимые от вложенных в них форм коллизии; контейнеры и вложенные в них Control-ноды, без которых смысла в контейнерах нет (зависимость).
Могу ошибаться, поскольку я самоучка.
>реализации/implementation
В каком контексте? Реализация (имплементация) - осуществление задуманного. В контексте ООП это может означать реализацию абстрактного класса.
Пример из классов Godot:
https://docs.godotengine.org/en/stable/classes/class_basebutton.html
Это базовая кнопка. Её нельзя использовать как есть, потому что у неё нет поведения. Но из неё можно создать собственную кнопку, реализовав методы:
>void _pressed() virtual
>void _toggled(toggled_on: bool) virtual
В них описывается поведение твоей новой кнопки.
Зачем абстрактные классы нужны? Потому что зачастую нужно одинаково взаимодействовать с совершенно разными объектами, которые обязаны реализовать определённый набор методов.
Обязаны, ибо без этих методов смысла в них нет, но заранее реализовать ты их не можешь, потому что реализация может быть разной в разных классах.
Честно говоря, я сам не очень разбираюсь в этих абстрактных классах, но общая задумка в том, чтоб компилятор тебе написал ошибку наподобие такой:
>Can't make instance of abstract class BlaBla! Implement method Say(text: String) before calling BlaBla.new().
В GDScript понятия абстрактных методов пока нет:
https://github.com/godotengine/godot-proposals/issues/989
Там см. примеры, как это можно обойти (assert).
Ещё слово "реализация" может использоваться как противопоставление "интерфейса" класса. Здесь интерфейс - это список публичных полей и методов. Например, is_hovered() у кнопки - это интерфейс, а реализация спрятана где-то в исходниках на C++.
Разделение на интерфейс и реализацию в ООП несёт смысл в контексте инкапсуляции: когда ты заранее утверждаешь интерфейс и стремишься его никогда не изменять, даже если реализация изменится. Это позволяет использовать объект одинаково извне, полагаясь только на стабильный интерфейс. Можно говорить о нарушении инкапсуляции, когда внешние классы полагаются на реализацию другого класса: например, ожидают какой-то побочный эффект, возникающий в следствии конкретной реализации, однако отсутствующий в заявленном интерфейсе.
Допустим, есть такой интерфейс:
>func pull_data()
Мы обнаружили, что pull_data() выполняется ровно 5 секунд, и использовали это знание в своём коде:
>pull_data()
>time += 5
Однако, автор класса с этим интерфейсом смог оптимизировать реализацию, и теперь она может завершить работу за 5 микросекунд (в миллион раз быстрее). Теперь наш внешний код будет выдавать некорректный результат - ибо полагался он не на интерфейс, а на реализацию чужого класса.
Пример смешной, а ситуация страшная - из-за таких ошибок в программах космические корабли теряли.
>внедрения/injection
Это вообще отдельная тема. Допустим, тебе нужна определённая зависимость, но ты не знаешь пока конкретные детали. Пускай пользователь сам определяет эти детали! Ты объявляешь:
>@export var platform: VehiclePlatform
А дальше пользователь сам укажет, какая ему платформа нужна: на колёсиках, на гусеницах, на механических ногах, на воздушной подушке... Тут единственное условие - совпадение интерфейса:
>platform.move(direction)
Через который ты к ней обращаешься. Большое преимущество в том, что ты можешь сделать много различных платформ и протестировать полностью независимо от того, что на них будет ездить.
Примеры DI из Godot: любые физические объекты, зависимые от вложенных в них форм коллизии; контейнеры и вложенные в них Control-ноды, без которых смысла в контейнерах нет (зависимость).
Могу ошибаться, поскольку я самоучка.
>>void _pressed() virtual
>у неё нет поведения
Поправка - там, вроде, есть базовое поведение:
>Abstract methods are declared without an implementation and must be overridden in derived classes, while virtual methods provide a default implementation that can be optionally overridden. Essentially, abstract methods enforce that derived classes provide their own implementation, whereas virtual methods allow derived classes to either use the default behavior or provide their own.
(DuckDuckGo)
Хотел написать что ты просто из зависти к Блазии пририсовал вечно плоской годетке жопу, но потом заметил квадрипл, так что ты прав.
Делаю а
>Где мне получить ААА графику?
В редакторе графики, например, Blender:
1. Скульптишь хайполи из сферы.
2. Запекаешь нормали в лоупольку...
Потом импортируешь лоупольку в Godot.
В 2D проще, для пикрила железо не нужно.
Это Stable Diffusion? Или что-то другое? У меня ещё не получалось преобразовать скетч/набросок так, чтоб рандомных галлюцинаций/косяков не было.
Опиши хоть в общих чертах порядок действий. Вот слышал про ControlNet, ты его обучал на Годетте?
>>2343
>в сеть выложить
В какую сеть? Он уже "выложил в сеть" - Яндекс на картинки Годетты давно выдаёт треды в /gd/, лол.
Алсо, это кто-то другой. Я только свой кривой скетч выложил, а какой-то анон прогнал через img2img...
А что с обновлениями Godot? 3 октября вышла dev3. Думал, через недельку будет dev4. Но уже ноябрь...
Я никогда плагинами не пользовался и не особо понимаю как его использовать.
В интернете пишут что нужно функцию запускать через плагин запускать, но как загрузить звук, какую функцию запустить и тп непонятно. В интернете разная инфа.
Он типа проигрывает звук не через движок, а как то через ява скрипт, что избавляет от потрескиваний в браузере. На пк трещание не так заметно, но вот если через мобильник играть в браузере, это просто жопа
Или вы может как-то иначе фиксили звук для браузерных площадок
>Это Stable Diffusion?
Да
>ControlNet
Да
>ты его обучал на Годетте?
Нет
Убрал твои явные косяки, аля цветовых клякс и сформировал промт примитивный
1girl, cute, blush, black skin, tan
lips, thick thighs
green eyes, big eyes
hair bun, triple bun, blue hair, gradient hair
(blue polo shirt:1.1), white panties, black kneehighs, blue shoes, white socks
open mouth, tongue, surprised
solo, back, from behind, full body, grabbing, ass grab
Вкл кастом стили на аутистикс миксе
Вкл контролнет tile_colorfix Control Weight 0.5 Ending Control Step 0.5, tile_resample Control Weight 0.75 Ending Control Step 0.75. Везде Control Mode "My prompt is more important"
Нажал кнопку генерировать 4 картинки, отфотобашил сделав франкинштейна из этих сгенериных артов. Ушло 5 минут.
Год назад я ровно тоже самое делал, пики
Ползуюсь, но там надо править исходники чтобы заработало и файлы аудио отдельно хранить (грубо говоря там будет в папке music.mp3. и его надо прямо в папку экспорта копировать, а звуки из проекта не используются, так что для отладки придется что то придумать).
В этом форке что то дорабатывал чел https://github.com/MEnesCakar/godot_web_external_audio_motor
А, еще надо аудиолибу скачивать, в примере там howler.js.
Если что непонятно, после выхов смогу подсказать.
>Год назад я ровно тоже самое делал
Помню. Так вот, оказывается, почему у неё вместо оригинального синего рта банальный красный. А я думал, что это нейронка у тебя галлюцинацией цвет изменила. Там на оригинальной картинке у неё всё полностью синее, потому что она робот/андроид.
>white panties
Думал, это галлюцинация. Там не трусы, а "tan lines". Светло-серой линией просто границы обозначил.
Ты эту методику для игр используешь? Что-то уже получилось? Было бы круто, если бы можно было стабильно (в одном стиле) обрабатывать такие примитивные скетчи для 2D игры... На 2 GB GPU в реальном времени. Этакий Godot от мира GenAI...
Удалил стену нытья. Снова удалил стену нытья.
У меня теперь опять экзистенциальный кризис...
Смари, я вот скачал его https://github.com/goldfire/howler.js , получается условно этот архив нужно будет закинуть в уже экспортируемую папку?
Потом я так же в этой директории создаю папку со звуками.
А дальше как? Типа где я должен указать директорию к звуковому файлу?
Блин кароч я вообще тилтанул сегодня и спился. Буду рад если подробно ответишь как вообще это все работает и в каких прогах что писать, в будущем.
Я сам тоже пока буду курить это
>годот 3.5.2
2 месяца назад вышел Godot 3.6, попробуй...
>избавляет от потрескиваний в браузере
Это проблема хромиума, гугл что-то опять сломал:
https://github.com/godotengine/godot/issues/47453
>через мобильник играть в браузере
Лол, браузерные игры через мобильник -
>это просто жопа
Сплошной садомазохизм, вредный для телефона.
>Там на оригинальной картинке у неё всё полностью синее, потому что она робот/андроид.
Я тогда меньше работал с фотошопом и мне было проще убрать элемент который нейронка бы не так поняла. Сейчас же я бы попросту руками бы через слой маску покрасил бы рот в нужный цвет.
>Думал, это галлюцинация. Там не трусы, а "tan lines". Светло-серой линией просто границы обозначил.
Даж об этом не подумал лол, хотя такое можно спокойно сгенерить было бы
>Ты эту методику для игр используешь? Что-то уже получилось? Было бы круто, если бы можно было стабильно (в одном стиле) обрабатывать такие примитивные скетчи для 2D игры...
Да, релизнуть хочу через месяц, я порнодел
Плюс анимации захуярил, сча пересобираю сцену тупо по 2д, потому что спайн взяли за 40к деревянных, надо румы пересобрать.
Можно любой сложности делать арты под игру ток через нейронку, главное уметь в фотобаш, что приходит с опытом
Поделюсь с тредом видяшками
Так и так мы будем релизиться и поститься везде, в гд думаю создать тред и порассказывать про игру и нюансы, релиз то будет классический 0.1 под патреон
Алсо с анонами общаюсь даже в дсе, все потихоньку пилят чета свое, обсуждаем темы, делимся советами
>>2414
Кумерам добро, плотную кидаю попочку
>анимации
Это ведь один сплошной меш деформируется?
Зачем нужен Spine, если 2D меши есть и в Godot?
>порнодел
В смысле порно-геймплея или порно-картинок?
Во втором случае конкурентов намного больше.
>Это ведь один сплошной меш деформируется?
Там все разделено на слои по красоте
>Зачем нужен Spine, если 2D меши есть и в Godot?
Тебе надо пробнуть то и то и ты охуешь насколько все остальные проги по 2д анимации хуета. Мало того что спайн удобный, быстрее делается риг, анимация, дак еще и есть разные фичи, плюс полноценная синхронизация с движком, в отличии от другой костальной хуйни.
В смысле порно-геймплея или порно-картинок?
Игра, игра.
Конкуренции нигде нет, кумеры все схавают, ты им покажи сисиписи с сюжетом, они уже будут урурукать
Это в каких таких странах разрешено изготовление и распространение порнографии? Ты уверен, что хорошо изучил местное законодательство?
Напомню, Ельцин присоединился к международной "Конвенции о пресечении обращения порнографических изданий и торговли ими" в 1996 году как раз в стремлении подражать западному миру, после чего соответствующую статью и ввели в УК РФ.
Интересный вопрос, кстати. А кто тогда все эти порно игры в стиме делает? Или они как Неуловимый Джо все пока какого-нибудь конкретного порноразраба не захотят за жопу взять?
я посмотрел в википедии статью "порнография в Европе", явно запрещена порнография только в Исландии и Болгарии, а также бУССР и бБССР, в России и Великобритании запрещена только "нелегальная порнография", но нет определения легальности
не знаю, насколько можно доверять Википедии
1920x1080, 0:22
>Эх, вот бы и у нас ослабили эту часть законодательства...
Да вряд ли анонче, все наоборот еще больше закручивается и ет печалит. Пердолинг лютый приходится испытывать, куда не шагнуть везде препятствия и ограничения.
Ну ниче, нормалек. Прорвемся. Не зря ж я вон сколько борду капчую. И я, и аноны мои... Прорвемся!
>>2462
Можешь и сам найти списки этих стран.
Правила в отношении этого много где строго не соблюдаются, даже если оно есть.
Или ты считаешь что неважно куда трактор заведешь, все равно надо трястись?
Лучше игры делай
Выглядит потрясно. Надеюсь у тебя всё получится. Обязательно после релиза тред запили.
И главное не забывай про сюжет. Рисовка и анимации крутые, однако сюжет, ситуации, персонажи тоже очень важны.
>сюжет, ситуации, персонажи
Прямо таки главное. Все повторяют друг за другом. На самом деле надо прекратить пиздеть и просто включать голову хоть иногда. Что ему надо? Чтобы игра продалась тиражом. Что для этого нужно? Чтобы игроков чем-то заманить, и желательно удержать. Чем игроков можно заманить и возможно удержать? Существует более чем один способ. В казино нет ни сюжета ни персонажей, но вот люди там безвылазно просиживают пока не растратятся в ноль. Много вещей есть чем людей можно развлечь. В порнухе нет сюжета, но это не мешает ее беспрецедентной популярности. Вот ты ебешь женщину, весь сюжет в том что вставляешь пипиську в ее письку. Все. Это не Война и Мир. Не Анна Каренина. Это и есть вся история успеха. Достаточно это хорошо передать. И остальное приложится.
охуенно, привстал реально
Тоже ожидаю провала твоей игры. Вместе мы сила, бро 💪
Побомбил.
Делать уровни в тренчбруме или блендере это пиздец. Просто ебаный пиздец. После анрила хотелось простой и небольшой движок где можно сделать простую игрульку типа дефрага из ку3. но с геометрией сложнее, чем три куба. И что вы думаете? Нихуя нормально не сделать. Даже встроенный в движок кубогенератор делает суперхуевую геометрию для прототипирования, которая выжирает весь цпу. Это пиздец. Походу придется обратно на анрил идти.
Качай скилл. Есть куча способов быстро и просто прототипировать (sprytile для блендера), но это не отменяет того, что надо набивать руку чтобы это стало рутиной
Кроме того, очень просто писать свои тул скрипты. Я показывал как делать редактор уровня на CSGPolygon3D Про нагрузку цпу - так ты конвертируй csg в меши перед запуском, хоть готовыми ассетами. Все это делается очень легко.
Хз, я тупо на csg делаю, потом, когда доволен результатом, конверчу в обычные меши и генерирую им коллизии.
Ты дурачок или куда? Я сижу и ебусь с 3д. Годот я выбрал и пилил на нем 2д игрушки чтобы привыкнуть к движку и в нем освоиться, понимать что можно делать и что нельзя. Все для того, чтобы наконец запилить "игру мечты", но она в 3д. Дохожу и до 3д и... хуй за щеку. Так что ты можешь сходить нахуй с своими заявлениями, вот честно.
Я хз что у тебя там за проблемы, я несколько простых 3д игр сделал и все нормально было.
Короче.
Рассказывать сейчас некогда. В ассете есть проект с примером, но он не полный.
Вот что должно быть в папке экспорта, кроме созданного годотом. Папки со звуками, например mp3. В коде они указаны в словаре. Для проигрывания указывается только имя звука, .mp3 подставляется автоматически (в .js либе), и путь к папке тоже. То есть "beam" будет играть "Sounds/FX/beam.mp3"
Я пробовал поменять на ogg, но что от он в браузерах глючил, так что я все перевел на mp3
Библиотека howler.min.js минифицированная. howler.spatial.min.js, это библиотека для пространственного 2д звука. От нее можно избавиться, но надо ее загрузку убрать в коде. В TestePlugin.gd указано откуда грузятся либы, соответствернно там я поменял путь с addons/Web.../ на просто корень, потому что в экспорте они у меня в корне
Самое главное, что надо переделать - в демке аудиоменеджер инициализировался сразу при старте игры, в _ready(). В новом хроме так делать нельзя, будет ошибка инициализации аудиоконтекста до клика пользователя. Поэтому я там немного откладываю, чтобы инициализация и загрузка аудиофайлов была только после клика пользователя на веб игру. В реальном проекте там может быть сплешскрин, заставка, меню и тд.
Надо повнимательнее проверить, не грузятся ли звуки каждый раз при произведении, но пока руки не дошли.
Для тестов надо запускать все через сервер. например python -m http.server из папки экспорта. Запуск через годот веб версии не подхватывает папки, а запуск игры в винде ничего не играет, конечно, потому что там js либа. Потом как нибудь хочу добавить прослойку, чтобы на пека игрались звуки по обычному, чтобы тестировать удобнее было.
https://anonymfile.com/VpVQZ/web-externaladdondemo.zip
И что? Если у тебя баг, любое дальнейшее поведение непредсказуемо.
> несколько простых 3д игр
>>2626
Если бы вы в глаза не ебались и попробовали сделать игру с геометрией сложнее чем q2dm1 то жутко удивились бы насколько все хуево с 3д пайплайном годота. Ну тип давайте даже обратный пример: где крупные 3д игры с приличной графикой, ассетами, сложной геометрией на годоте? А нет их. А почему их нет? Может, причины есть какие, м?
>сделать игру с геометрией сложнее чем q2dm1
Нахуя сложнее то? Даже в современном кАААле персонажи бегают по примитивам, все замаскировано анимациями
иф куб ниже куб2: падать_на_жопа()
Хули ты мне ААА пихаешь, я спросил чем лично тебя обидел Тренчбрум для твоих инди задач? Ты же простую игру хотел сделать.
Так я и делал игры со сложной геометрией. Все легко делалось. Че с тобой не так то?
>Где? А нет их. А почему их нет?
А потому что я тебе в глаза нассал:
https://store.steampowered.com/app/1963610/Road_to_Vostok/
https://store.steampowered.com/app/2956040/PVKK_Planetenverteidigungskanonenkommandant/
https://store.steampowered.com/app/3052500/ColdRidge
https://store.steampowered.com/app/1733110/Of_Life_and_Land/
https://store.steampowered.com/app/2645830/Stunt_Xpress/
https://store.steampowered.com/app/2835350/No_Gasoline/
https://store.steampowered.com/app/2211170/Unrailed_2_Back_on_Track
https://store.steampowered.com/app/2217530/Engine_Roar
Давай, расскажи как у тебя графон и геометрия СЛОЖНЕЕ чем по ссылкам, и как ты в одно свое утиное ебло делаешь ААААаа шыдеверы, и как тебе яйца инструменты мешают и в штаны срут.
Sandfire геометрия сложнее q2dm1?
https://www.youtube.com/watch?v=0SfWxYyqqpw
Human Diaspora приличный графон?
https://www.youtube.com/watch?v=yd1_18c1e7s
В общем, видел такую идею дерева:
>Actor: CharacterBody
> - Controller: Node
И чтобы Controller мог быть ИИ или вводом игрока.
Типа, подключать-отключать ноды туда-сюда:
>Actor1
> - Brain # управляется ИИ
>Actor2
> - Player # управляется игроком
Да, так можно сделать. Но зачем?
Сегодня я думал, как двигать камеру между двумя такими персонажами. Подумал, что камеру можно отсоединить ото всех персонажей: просто двигать к персонажу с какой-то скоростью. А потом подумал, почему бы не сделать "ввода игрока" наследником камеры? Камерой-то игрок управляет. И персонаж управляется, только если камера возле него уже. Поэтому получается такое дерево:
>Player: Camera
>Actor1
>Actor2
Тогда ИИ можно никуда не удалять и ноды по сцене перекидывать никуда не нужно. Только собрать в "игроке" массив-список доступных героев:
>@export var actors: Array[Actor]
И выбирать одного из них.
Да, делает пошаговую миниигру пока.
Если тебе удобнее делай так.
Вообще делать надо так, как удобно, а не так, как советуют на двачах мутные типы, еванеглисты то одной, то другой аббревиатуры. Мне удобно ваще закинуть скрипт в корень дерева и дирижировать оттуда.
>удобно ваще закинуть скрипт в корень
Можешь нормально объяснить - чем удобнее?
Root нода недоступна из редактора.
Подменой скрипта ты лишаешься @export.
get_tree() - это глобальный доступ, т.е. опасный.
По всему выглядит как жутко неудобный костыль.
>Вообще делать надо так, как удобно
Никто не спорит, это просто один из способов.
1. КОНЦЕПТ.
1.1. Нужно придумать и записать, какую роль играет будущий уровень, как он должен повлиять на игрока, какие навыки требует и прочее подобное. Без этого пространство возможностей слишком велико - нет определённости, каким должен быть уровень, из-за чего получаются хаотичные нагромождения "всего". Найдите себе референсы из архитектуры, природы, похожих игр. Главное не копировать один в один.
1.2. Набросать на бумаге или в 2D редакторе уровень в формате плана сверху или сбоку, как удобнее. Это позволяет быстрее прикинуть масштаб и пропорции, возможные развилки, углы, мосты и тому подобное. Придумайте условные обозначения и следуйте им, особенно когда у вас много одинаковых объектов. 2D набросок очень легко исправить и при этом он достаточно хорошо передаёт суть будущего уровня.
2. ГРЕЙБОКС (механический прототип).
2.1. Используйте CSG фигуры с натянутой сетчатой трипланарной текстурой для грубого наброска в 3D. Игнорируйте детали. Если вам нужна машина - вам достаточно растянуть один куб. Здание - куб. Любое заграждение - куб. Но иногда нужны цилиндры, как, например, для круглой площади, фонтана. Также игнорируйте мелкие отклонения в величинах, дрочь циферок сейчас ничего не даст, только замедлит. Однако, ориентируйтесь на сетку и обязательно сохраняйте повторяющиеся объекты как сцены.
2.2. Запустите игру и протестируйте уровень. Нужно побегать, проделать типичные активности на этой упрощённой версии уровня, чтобы убедиться, что масштабы и пропорции работают для реализации задуманного в концепте. Если не работают - смело исправляете их, ведь серые кубы легко изменить. Необходимо добиться, чтобы уровень интересно игрался уже на этом этапе - этапе серых коробок.
3. ВАЙТБОКС (графический прототип).
3.1. Когда грейбокс доказал общий дизайн уровня, переходим к постепенной детализации моделей. Нет необходимости трогать 3D редактор, для многого хватит и CSG форм, но куда меньшего размера. Тут серые кубы и цилиндры начинают напоминать реальные объекты, пусть и без текстур. У машины появляются колёса, например, а у здания - окна.
3.2. С вайтбоксом тоже нужно тщательно играть, проверяя, не нарушают ли новые детальные модели изначальную концепцию из-за того, что их силуэт, отверстия и т.п. немного отличаются. Возможно, придётся снова двигать мебель, но это несложно. Возможно, придётся выбросить некоторые модели, однако, на них потрачено совсем немного времени.
4. ГРАФИКА.
4.1. Экспортируете вайтбокс-модели в GLTF и потом импортируете их, например, в Blender. Лучше всего делать это по отдельности, особенно если модели повторяются несколько раз в разных местах. Они пригодятся как эталон по масштабу/пропорциям.
4.2. Делаете поверх них полноценные модели с полноценными текстурами, но не обязательно до финального вида. Тут тоже можно разбить процесс на несколько итераций, чтобы подстраховаться.
4.3. Импортируете новые модели, собираете из них финальный вариант уровня и снова тестируете. Но серьёзные изменения сейчас уже недопустимы, т.к. отбрасывают вас на много часов назад.
Я ещё забыл упомянуть об оптимизациях. Часть оптимизаций может быть сделана в конце, однако некоторые требуют учитывать их ещё на стадии бумажного 2D концепта. В общем... всё сложно. Но компактный уровень со средней детализацией не должен тормозить на большинстве ПК. Просто не разбрасывайтесь полигонами, полупрозрачными материалами, отражениями, спецэффектами.
Вообще... В дизайне уровней много неочевидных тонкостей и нюансов. Но, описанный выше план должен избавить новичка от 90% головной боли, возникающей из-за того, что люди не знают, что и в каком порядке им нужно делать, лепя по интуиции.
И Godot в это удивительно хорошо вписывается.
>>2604
>уровни в тренчбруме или блендере это
Тренчбрум не трогал, но с блендером всё нормально.
>но с геометрией сложнее, чем три куба.
Прототип уровня всегда редуцируется до кубов...
>Даже встроенный в движок кубогенератор делает суперхуевую геометрию для прототипирования, которая выжирает весь цпу.
Может, ты слишком высокое число подразделений выбираешь? Или делаешь булевы операции, которых возможно было избежать? В любом случае, если ты понимаешь, как работают булевы операции в 3D, ты сможешь использовать CSG для сложных сцен. Для прототипа уровня (грейбокса) этого достаточно.
Простой пример, как избежать лишних тормозов:
>Scene: Node3D # это корень сцены, обычная нода
>_ Floor: CSGBox # это глобальный пол сцены
>_ Walls: Node3D # просто группа для удобства
>_ _ Wall1: CSGBox # уникальная стена
>_ _ Wall2: CSGBox # отдельная уникальная стена
>_ _ _ Doorway: CSGBox # дырка прохода в стене
>_ _ _ Door: Node3D # вложенная сцена двери
>_ WeaponBox: Area3D # вложенная сцена
>_ JumpPad: Area3D # вложенная сцена
Так у тебя разные коробки не будут "склеиваться".
>>2608
>конвертируй csg в меши перед запуском
>>2611
>конверчу в обычные меши
Аккуратнее там. CSG генерирует очень растянутые треугольники и иногда дырки - скорее всего, из-за неточности операций с плавающей точкой. И все треугольники отдельны друг от друга. Поэтому для оптимизации нужно переделывать меш в блендере. Однако, для прототипа игры это всё не страшно.
>>2617
У меня есть несколько замечаний по скриншоту.
1. Организация папок - в Godot принято собирать файлы, принадлежащие одному объекту, в папке объекта. Нет никакой необходимости сваливать графические ассеты в одну внешнюю папку где-то далеко от связанной сцены и скрипта. Когда всё необходимое лежит рядом, навигация удобнее. В редакторе оптимизированы относительные пути, например, не нужно указывать полный путь до конкретного файла в той же папке или глубже.
2. Глобальные события - тебе действительно так необходимо, например, глобальное "TO_PAUSE"? Ты можешь просто отобразить меню паузы, которое автоматически остановит всё то, что должно быть остановлено во время паузы. Никаким игровым объектам не нужно ждать/знать про паузу. То же касается всех остальных событий на скриншоте.
3. Конечный автомат меню с помощью стороннего аддона - зачем он тебе? Эти состояния игры и меню не настолько сложны, чтоб тебе нужны были все эти лишние телодвижения, ноды конечного автомата. Встроенный в AnimationTree конечный автомат тут справился бы не хуже, но любой конечный автомат в конкретной ситуации только усложняет работу. Ты реализовал решение отсутствующей проблемы. Не забывай, что ты можешь делать просто:
>signal exit_to_main_menu()
>exit_to_main_menu.emit()
И подключить всё через вкладку Node -> Signals, которая находится справа от Inspector. Или код:
>exit_to_main_menu.connect(_on_exit_to_main_menu)
Это главный механизм работы Godot и не нужно изобретать велосипеды на его замену. Соглашусь только, что имя "Signal" вместо "Event" запутывает.
Метод bind() вызывать без аргументов не нужно. Он необходим, когда тебе нужно забиндить какие-то дополнительные аргументы, которых нет в сигнале.
4. Вьюпорт - для чего он там? Делал пиксель-арт с UI в высоком разрешении? Если нет, то он избыточен. Корневой вьюпорт имеет все те же настройки и 2D рендерится нормально без лишних вьюпортов.
5. Менюшки без CanvasLayer - в Godot лучше каждое отдельное меню помещать в свой CanvasLayer или, как минимум, весь UI - это CanvasLayer. Тогда он не будет зависеть от Camera2D и его можно будет легче сортировать, не меняя порядка нод в дереве сцены.
В общем и целом складывается впечатление, что ты пытаешься натянуть пайплайн из Unreal на Godot, что приводит к таким костылям и сложностям. Тебе необходимо сначала разобраться в инструменте, а потом только решать, нужны ли все эти костыли. И в частности, простую 2D игрушку в Godot можно и нужно делать снизу вверх, а не с каких-то меню.
Алсо, тебе стоило сразу начать заниматься 3D. Вот я изначально вкатился в 3D и 2D игнорировал. Всё в порядке, особых проблем нет. Да, это не какой-то дорогущий движок, где всё сделано за тебя, однако необходимые базовые инструменты вполне хороши и даже позволяют многое подстраивать под себя.
1. КОНЦЕПТ.
1.1. Нужно придумать и записать, какую роль играет будущий уровень, как он должен повлиять на игрока, какие навыки требует и прочее подобное. Без этого пространство возможностей слишком велико - нет определённости, каким должен быть уровень, из-за чего получаются хаотичные нагромождения "всего". Найдите себе референсы из архитектуры, природы, похожих игр. Главное не копировать один в один.
1.2. Набросать на бумаге или в 2D редакторе уровень в формате плана сверху или сбоку, как удобнее. Это позволяет быстрее прикинуть масштаб и пропорции, возможные развилки, углы, мосты и тому подобное. Придумайте условные обозначения и следуйте им, особенно когда у вас много одинаковых объектов. 2D набросок очень легко исправить и при этом он достаточно хорошо передаёт суть будущего уровня.
2. ГРЕЙБОКС (механический прототип).
2.1. Используйте CSG фигуры с натянутой сетчатой трипланарной текстурой для грубого наброска в 3D. Игнорируйте детали. Если вам нужна машина - вам достаточно растянуть один куб. Здание - куб. Любое заграждение - куб. Но иногда нужны цилиндры, как, например, для круглой площади, фонтана. Также игнорируйте мелкие отклонения в величинах, дрочь циферок сейчас ничего не даст, только замедлит. Однако, ориентируйтесь на сетку и обязательно сохраняйте повторяющиеся объекты как сцены.
2.2. Запустите игру и протестируйте уровень. Нужно побегать, проделать типичные активности на этой упрощённой версии уровня, чтобы убедиться, что масштабы и пропорции работают для реализации задуманного в концепте. Если не работают - смело исправляете их, ведь серые кубы легко изменить. Необходимо добиться, чтобы уровень интересно игрался уже на этом этапе - этапе серых коробок.
3. ВАЙТБОКС (графический прототип).
3.1. Когда грейбокс доказал общий дизайн уровня, переходим к постепенной детализации моделей. Нет необходимости трогать 3D редактор, для многого хватит и CSG форм, но куда меньшего размера. Тут серые кубы и цилиндры начинают напоминать реальные объекты, пусть и без текстур. У машины появляются колёса, например, а у здания - окна.
3.2. С вайтбоксом тоже нужно тщательно играть, проверяя, не нарушают ли новые детальные модели изначальную концепцию из-за того, что их силуэт, отверстия и т.п. немного отличаются. Возможно, придётся снова двигать мебель, но это несложно. Возможно, придётся выбросить некоторые модели, однако, на них потрачено совсем немного времени.
4. ГРАФИКА.
4.1. Экспортируете вайтбокс-модели в GLTF и потом импортируете их, например, в Blender. Лучше всего делать это по отдельности, особенно если модели повторяются несколько раз в разных местах. Они пригодятся как эталон по масштабу/пропорциям.
4.2. Делаете поверх них полноценные модели с полноценными текстурами, но не обязательно до финального вида. Тут тоже можно разбить процесс на несколько итераций, чтобы подстраховаться.
4.3. Импортируете новые модели, собираете из них финальный вариант уровня и снова тестируете. Но серьёзные изменения сейчас уже недопустимы, т.к. отбрасывают вас на много часов назад.
Я ещё забыл упомянуть об оптимизациях. Часть оптимизаций может быть сделана в конце, однако некоторые требуют учитывать их ещё на стадии бумажного 2D концепта. В общем... всё сложно. Но компактный уровень со средней детализацией не должен тормозить на большинстве ПК. Просто не разбрасывайтесь полигонами, полупрозрачными материалами, отражениями, спецэффектами.
Вообще... В дизайне уровней много неочевидных тонкостей и нюансов. Но, описанный выше план должен избавить новичка от 90% головной боли, возникающей из-за того, что люди не знают, что и в каком порядке им нужно делать, лепя по интуиции.
И Godot в это удивительно хорошо вписывается.
>>2604
>уровни в тренчбруме или блендере это
Тренчбрум не трогал, но с блендером всё нормально.
>но с геометрией сложнее, чем три куба.
Прототип уровня всегда редуцируется до кубов...
>Даже встроенный в движок кубогенератор делает суперхуевую геометрию для прототипирования, которая выжирает весь цпу.
Может, ты слишком высокое число подразделений выбираешь? Или делаешь булевы операции, которых возможно было избежать? В любом случае, если ты понимаешь, как работают булевы операции в 3D, ты сможешь использовать CSG для сложных сцен. Для прототипа уровня (грейбокса) этого достаточно.
Простой пример, как избежать лишних тормозов:
>Scene: Node3D # это корень сцены, обычная нода
>_ Floor: CSGBox # это глобальный пол сцены
>_ Walls: Node3D # просто группа для удобства
>_ _ Wall1: CSGBox # уникальная стена
>_ _ Wall2: CSGBox # отдельная уникальная стена
>_ _ _ Doorway: CSGBox # дырка прохода в стене
>_ _ _ Door: Node3D # вложенная сцена двери
>_ WeaponBox: Area3D # вложенная сцена
>_ JumpPad: Area3D # вложенная сцена
Так у тебя разные коробки не будут "склеиваться".
>>2608
>конвертируй csg в меши перед запуском
>>2611
>конверчу в обычные меши
Аккуратнее там. CSG генерирует очень растянутые треугольники и иногда дырки - скорее всего, из-за неточности операций с плавающей точкой. И все треугольники отдельны друг от друга. Поэтому для оптимизации нужно переделывать меш в блендере. Однако, для прототипа игры это всё не страшно.
>>2617
У меня есть несколько замечаний по скриншоту.
1. Организация папок - в Godot принято собирать файлы, принадлежащие одному объекту, в папке объекта. Нет никакой необходимости сваливать графические ассеты в одну внешнюю папку где-то далеко от связанной сцены и скрипта. Когда всё необходимое лежит рядом, навигация удобнее. В редакторе оптимизированы относительные пути, например, не нужно указывать полный путь до конкретного файла в той же папке или глубже.
2. Глобальные события - тебе действительно так необходимо, например, глобальное "TO_PAUSE"? Ты можешь просто отобразить меню паузы, которое автоматически остановит всё то, что должно быть остановлено во время паузы. Никаким игровым объектам не нужно ждать/знать про паузу. То же касается всех остальных событий на скриншоте.
3. Конечный автомат меню с помощью стороннего аддона - зачем он тебе? Эти состояния игры и меню не настолько сложны, чтоб тебе нужны были все эти лишние телодвижения, ноды конечного автомата. Встроенный в AnimationTree конечный автомат тут справился бы не хуже, но любой конечный автомат в конкретной ситуации только усложняет работу. Ты реализовал решение отсутствующей проблемы. Не забывай, что ты можешь делать просто:
>signal exit_to_main_menu()
>exit_to_main_menu.emit()
И подключить всё через вкладку Node -> Signals, которая находится справа от Inspector. Или код:
>exit_to_main_menu.connect(_on_exit_to_main_menu)
Это главный механизм работы Godot и не нужно изобретать велосипеды на его замену. Соглашусь только, что имя "Signal" вместо "Event" запутывает.
Метод bind() вызывать без аргументов не нужно. Он необходим, когда тебе нужно забиндить какие-то дополнительные аргументы, которых нет в сигнале.
4. Вьюпорт - для чего он там? Делал пиксель-арт с UI в высоком разрешении? Если нет, то он избыточен. Корневой вьюпорт имеет все те же настройки и 2D рендерится нормально без лишних вьюпортов.
5. Менюшки без CanvasLayer - в Godot лучше каждое отдельное меню помещать в свой CanvasLayer или, как минимум, весь UI - это CanvasLayer. Тогда он не будет зависеть от Camera2D и его можно будет легче сортировать, не меняя порядка нод в дереве сцены.
В общем и целом складывается впечатление, что ты пытаешься натянуть пайплайн из Unreal на Godot, что приводит к таким костылям и сложностям. Тебе необходимо сначала разобраться в инструменте, а потом только решать, нужны ли все эти костыли. И в частности, простую 2D игрушку в Godot можно и нужно делать снизу вверх, а не с каких-то меню.
Алсо, тебе стоило сразу начать заниматься 3D. Вот я изначально вкатился в 3D и 2D игнорировал. Всё в порядке, особых проблем нет. Да, это не какой-то дорогущий движок, где всё сделано за тебя, однако необходимые базовые инструменты вполне хороши и даже позволяют многое подстраивать под себя.
>Однако, ориентируйтесь на сетку и обязательно сохраняйте повторяющиеся объекты как сцены.
Я хочу спросить, а разве базу уровня обычно не делают в каком Блендере, Тренчбруме, а не ебут кубы прямо на сцене в движке годота? Мне в свое время так сказали.
Я не он, но думаю что быстро ебануть пару гигакубов для теста базовых механик это быстрее, чем открывать блендер и заморачиваться на данном этапе
Это всё вкусовщина. В тренчбруме работают те, кто с тренчбрумом в годот пришёл.
В блендере у тебя редактор 3д, но нет геймплея. Но там удобно делать детальные модельки. Поэтому логично делать блокинг прототип в самом годоте, двигать платформы, стены, кубы, чтобы тестировать динамику геймплея, а потом уже заменять их на модельки из блендера.
Это явно итеративный процесс, потому что посмотрев, как выглядит результат, ты захочешь снова что-то подвигать.
Кубы для сцен в Godot специально для этого.
Только гении с огромным стажем могут просто взять и нарисовать интересный и играбельный уровень без проблем, да и то не всегда. Остальным необходимо постепенно реализовывать идеи в жизнь.
Это в принципе справедливо для любой творческой деятельности: рисование, скульптура и т.д. Сначала делаешь грубый набросок из общих форм, которые несложно поправить. Потом высекаешь из этих абстрактных фигур что-то более конкретное.
С уровнями в играх почти всё то же самое, только вместо откалывания кусочков снаружи ты чаще выдалбливаешь внутренности, делая ходы, дороги, туннели, комнаты, площади и т.п. Поэтому тут очень пригождаются булевы операции с фигурами:
https://ru.wikipedia.org/wiki/Конструктивная_сплошная_геометрия
Вместо точного моделирования горы с туннелем, ты можешь просто кинуть маленький куб на большой, растянуть маленький и дать ему "вычитание". Этого достаточно для базовой идеи "игроки идут через прямой туннель, потому что не могут обойти гору". Далее ты можешь кинуть NPC на выходе и будет "в конце которого игроков ожидает засада бандитов".
Конечно же, в Blender и других 3D редакторах есть булевы операции и они могут быть даже точнее, чем CSG-ноды Godot. Но как раз тут проявляется разница игрового уровня и рисунка/скульптуры: если рисунок можно просто оценить взглядом, игровой уровень проявляет свои преимущества и недостатки лишь в непосредственном игровом процессе. Визуально ты можешь сказать, что уровень красив, но на практике можешь обнаружить, что через туннель идти долго и скучно и засада в конце туннеля слишком очевидна. Получается, нужно как-то это переделать, например, сделать туннель изогнутым или разветвлённым.
Вот чтобы избежать лишних действий по переносу модельки туда-сюда и переключения мысленного контекста (хоткеи, положение меню, какие-то другие особенности программ и т.д.), тебе стоит делать всю начальную работу в Godot, прежде чем убедишься в играбельности уровня. Уже потом его можно будет украшать декорациями (детали, текстуры, эффекты), используя более подходящий редактор (Blender).
Кстати, в этом проблема многих ассет-флипов. Там разработчик берёт финальные модельки и пытается слепить из них уровень в редакторе. Даже если эти модельки подходят друг к другу и для конкретной планировки уровня, сложно сказать, доставляет ли уровень удовольствие за счёт его планировки, или это твоя подсознательная реакция на красивые и детализированные модельки. Мозг человека легко цепляется за внешние детали и имеет проблемы со взглядом под внешнюю шелуху. Результат влияет на ощущения игрока, хотя он не осознаёт причину.
Поэтому начинать нужно всегда с "кубов" и лучше заниматься этим как можно ближе к движку, на котором у тебя готовы основные механики. Игроки, пытаясь заняться геймдевом, сами до этого редко догадываются, т.к. видят лишь финальную графику.
Кубы для сцен в Godot специально для этого.
Только гении с огромным стажем могут просто взять и нарисовать интересный и играбельный уровень без проблем, да и то не всегда. Остальным необходимо постепенно реализовывать идеи в жизнь.
Это в принципе справедливо для любой творческой деятельности: рисование, скульптура и т.д. Сначала делаешь грубый набросок из общих форм, которые несложно поправить. Потом высекаешь из этих абстрактных фигур что-то более конкретное.
С уровнями в играх почти всё то же самое, только вместо откалывания кусочков снаружи ты чаще выдалбливаешь внутренности, делая ходы, дороги, туннели, комнаты, площади и т.п. Поэтому тут очень пригождаются булевы операции с фигурами:
https://ru.wikipedia.org/wiki/Конструктивная_сплошная_геометрия
Вместо точного моделирования горы с туннелем, ты можешь просто кинуть маленький куб на большой, растянуть маленький и дать ему "вычитание". Этого достаточно для базовой идеи "игроки идут через прямой туннель, потому что не могут обойти гору". Далее ты можешь кинуть NPC на выходе и будет "в конце которого игроков ожидает засада бандитов".
Конечно же, в Blender и других 3D редакторах есть булевы операции и они могут быть даже точнее, чем CSG-ноды Godot. Но как раз тут проявляется разница игрового уровня и рисунка/скульптуры: если рисунок можно просто оценить взглядом, игровой уровень проявляет свои преимущества и недостатки лишь в непосредственном игровом процессе. Визуально ты можешь сказать, что уровень красив, но на практике можешь обнаружить, что через туннель идти долго и скучно и засада в конце туннеля слишком очевидна. Получается, нужно как-то это переделать, например, сделать туннель изогнутым или разветвлённым.
Вот чтобы избежать лишних действий по переносу модельки туда-сюда и переключения мысленного контекста (хоткеи, положение меню, какие-то другие особенности программ и т.д.), тебе стоит делать всю начальную работу в Godot, прежде чем убедишься в играбельности уровня. Уже потом его можно будет украшать декорациями (детали, текстуры, эффекты), используя более подходящий редактор (Blender).
Кстати, в этом проблема многих ассет-флипов. Там разработчик берёт финальные модельки и пытается слепить из них уровень в редакторе. Даже если эти модельки подходят друг к другу и для конкретной планировки уровня, сложно сказать, доставляет ли уровень удовольствие за счёт его планировки, или это твоя подсознательная реакция на красивые и детализированные модельки. Мозг человека легко цепляется за внешние детали и имеет проблемы со взглядом под внешнюю шелуху. Результат влияет на ощущения игрока, хотя он не осознаёт причину.
Поэтому начинать нужно всегда с "кубов" и лучше заниматься этим как можно ближе к движку, на котором у тебя готовы основные механики. Игроки, пытаясь заняться геймдевом, сами до этого редко догадываются, т.к. видят лишь финальную графику.
Двадэ?
У меня вот так. Поскольку камера всего одна, то она находится отдельной нодой прям в корне дерева. Она умная и умеет следить за определённой нодой в физикс_процессе; через сигналы ей можно указать эту ноду. Таким образом можно, например, временно перефокусироваться с персонажа на какую-нибудь точку интереса. Кроме того, такой подход избавляет от проблем резкой (и непредсказуемой) смены кадра, когда надо переключиться на другой объект.
Контроллер игрока и AI-контроллер таки да, вешаются внутрь персонажа. Это, помимо прочего, позволяет легко протестить врага ещё до написания мозгов для него. А ещё рождает неожиданные механики, я так целый режим сделал. А ещё можно через сигналы давать контроллеру обратную связь: изменения ХП и всяких других параметров.
https://github.com/technicaljicama/godot-psp
А щас они пилят fusion engine на основе годота 1 для шиндовс 95 и симбиан
А ваши юнити так могут???
Самое занятное когда школьники, не имеющие ни ноута ни компа, реально делают игры на годоте запуская редактор на своем телефоне, на крошечном тачскрине. Некоторые еще 3д умудряются впихивать, делая модели тоже на телефоне.
И особенно я подофигел в последние месяцы, когда осознал окончательно какой огромный объем работы, и не только в плане именно разработки, но и в плане проектирования и гейм-дизайна, потребуется чтобы реализовать проект, особенно в желаемом качестве.
Также иногда возникает ощущение что возможно я переусложняю механики и это будет не так интересно как мне хочется, но это будет понятно по фидбеку игроков и если что буду упрощать, урезать системы комманд поинтов, кулдауна и т.д.
блин не тот тред :/
>Двадэ?
3D. Но я уже думаю забить, ибо потребуется сделать стопицот разных персонажей, у всех свои анимации. Главное, зачем? Кто будет в это играть кроме меня? Замотивируйте меня... Хочется что-нибудь делать.
>контроллер таки да, вешаются внутрь персонажа
Хммм... Мне просто не нравится, что придётся его перекидывать по дереву. Кажется, что "экономия на спичках", но стоит учитывать остальные события (одни снаряды способны съесть всё время кадра).
Кстати, стоило мне заняться этой идеей, как вдруг наткнулся на уже существующую игру от "наших":
https://store.steampowered.com/app/2051620/
Наверняка и другие подобные игры были. Но читать негативные отзывы про "тупых ботов, сливающихся противнику раньше тебя" очень обидно, как будто ты читаешь про свою собственную игру... В то же время понимаю, что "тупые боты" могут быть ради баланса.
>Мне просто не нравится, что придётся его перекидывать по дереву.
Альтернативный вариант: контроллер висит в корне дерева и общается с персонажем посредством сигналов. Может, так даже лучше, можно отслеживать вообще все пользовательские инпуты, а также события типа сворачивания окна.
Перекидывать это не ресурсоёмко, но бывает геморно.
>сделать стопицот разных персонажей, у всех свои анимации
Может с чего попроще начнешь? А то ты в соло уровень ААА игры собрался брать
>общается с персонажем посредством сигналов
Что? Смысол сигналов знаешь?
Код персонажа:
>крути_педали(куда?)
>прыгай_реще()
>стреляй_уже(куда?)
Код КОНТРОЛЛЕРА персонажа:
>func _physics_process():
>_ пёс.крути_педали(Input.чётамнажато())
>_ if Input.прыгнул: пёс.прыгай_реще()
Знать состояние персонажа контроллеру не нужно.
Вот ИИ-мозгам важно знать, что там с персонажем.
>>3149
>уровень ААА игры собрался брать
Делать всё из лоуполек - это не ААА.
Но я уже совсем мотивацию растерял...
>мотивация
Я сделал упор на выпуск максимально раннего и сырого билда, аля ранний доступ, чтобы получать мотивацию от игроков, 1 хорошего отзыва уже хватит чтобы забустить мотивацию делать дальше
но 1 плохой похоронит проект
1280x720, 0:21
Где ты там пропуки нашёл? Там автор видео быстро и много раз нажимает кнопку "шаг вперёд", которая делает ровно то, что и должна - один шаг вперёд и остановку. Если бы ты делал игры, знал бы, что это.
В юнити тоже есть такая функция.
это все еще игра в другом процессе, и близко не play mode. просто добавили паузу и возможность клика по игровым объектам в игре. грязный хак.
>игра в другом процессе
Так и должно быть. Как ты будешь тестировать игру, если у тебя "play mode" отличается от того, что будет в реальной игре? Т.е. тебе нужно запускать игру как реальную игру, если ты хочешь что-то тестировать.
>грязный хак
Ты знаешь, что Unity вынуждена делать под капотом, чтобы вернуть объекты в чистое состояние и чем это потенциально грозит? Не знаешь, если не заплатил миллионы за доступ к исходникам юнити.
Здесь ты получаешь 100% чистое состояние игры в изолированном процессе, а не какую-то имитацию.
фишка play mode в том, что пы просто запускаешь цикл обновления внутри редактора, и редактор, сцена и т.д. просто обновляется последними данными в реальном времени.
гонять json по сокетам (или как они там показывают состояние в редакторе) годот умел и до этого.
то есть, к примеру, я не вижу обновления на сцене в реальном времени, со всеми гизмо и т.д.
это не так эффективно для отладки как play mode.
Такое и не нужно. Это ломает состояние объектов в редакторе, ведет к утечкам и крашам и порче сцен.
>просто запускаешь цикл обновления внутри редактора, и редактор, сцена и т.д. просто обновляется последними данными в реальном времени.
Для этого в Godot используются @tool-скрипты:
https://docs.godotengine.org/en/stable/tutorials/plugins/running_code_in_the_editor.html
Если не ошибаюсь (я не проверял), в редакторе тебе может быть недоступна симуляция физики и Input, но всё остальное можешь менять как пожелаешь.
Например, если в игре у тебя поворот пушки зависит от параметров, таких как направление и дистанция выстрела, ты можешь быстро проверить это, вообще не запуская игру, просто меняя @export-параметр на панели инспектора своего @tool-скрипта. Игры нет, однако, твоя моделька пушки работает как в игре.
>>3357
>Это ломает состояние объектов в редакторе
Ну, ты ведь используешь @tool иногда. В Unity все привыкли к огромному костылю под капотом, что автоматически пытается вернуть всё в исходное состояние. Godot предоставляет тебе куда больше свободы и гибкости в этом плане, как я понимаю.
сцена просто сериаилузется в память, а в конце загружается, как если бы ты загрузил сцену из файла. это ни к чему не ведет.
это самая полезная функция play mode. я когда делал игры на unity, у меня все время были открыты окно сцены и игры рядом.
Нахуй идите со своими обновлениями. Они чет изменят, а мне потом код переписывать
>как если бы ты загрузил сцену из файла.
>это ни к чему не ведет.
Тоже пробовал что-то делать на юнити. Как-то раз потратил несколько часов на изменения. А когда я нажал "плей", все изменения исчезли, потому что я изменял не сцену на диске, а запущенную игру. Если правильно помню, это стало последней каплей. Так запутывать пользователя интерфейсом нельзя.
В Godot, если ты изменяешь сцену, то даже если игра запущена, твои изменения не отменяются. Наоборот, чтобы изменения отразились В ИГРЕ, Godot требует сохранить их на диск (Ctrl+S). А если перезапустить процесс игры из редактора, всё сохраняется на диск.
Т.е. Godot интуитивно понятнее и удобнее.
>сцена просто сериаилузется
В этом и проблема. Сериализуешь какой-то объект редактора или ссылку, а при десериализации его там нет, потому что по другому загрузилось.
>у меня все время были открыты окно сцены и игры рядом.
Ну так это и есть нормальное использование годота. Редактор и полноценно запущенная игра в своем процессе.
>это стало последней каплей
Какие мы нежные, так и видится зумерский поридж, не нюхавший в жизни реальной дичи. А жизнь, в том числе разработка и всякие айтишные приколюхи, она из такой дичи состоит, что иногда просто хуеешь с логики некоторых разработчиков и их кусков кода.
>не нюхавший в жизни реальной дичи
Почему движок обязан "вонять реальной дичью"?
Думаешь, на софте без багов UI/UX нельзя работать?
В godot можно подключать C# dll ?
Актуально ли использовать solid принципы и шаблоны проектирования?
Всё можно, но ты сначала базовый туториал пройди.
https://docs.godotengine.org/en/stable/about/introduction.html
https://docs.godotengine.org/en/stable/getting_started/introduction/index.html
И дальше по навигации в меню слева.
> но ты сначала базовый туториал пройди
Да это ему не нужно. Ты разве не видишь, что это просто левый чел прискакал чтобы собрать статистику?
>просто левый чел прискакал
Может, это новичок? Оценивает возможности.
>чтобы собрать статистику
Статистику чего? Активных постеров в треде?
да ты просто не разобрался как работает play mode. это реально полезная фича, которая ускоряет разработку 10x.
запущенную сцену нужно менять, чтобы видеть изменения в реальном времени (например, перетащить префаб в запущенную сцену, переместить объекты во время игры), плюс сама запущенная сцена может создавать и удавать новые объекты, загружать другие сцены.
Чего несешь?
Да ты просто не разобрался как годот работает. Все это делается в редакторе, и тут же изменения происходят в окне игры. А вообще, количество жанров игр где это нужно, крайне мало, так что это чисто фича для нубасов и окрщиков. Только подумай - если ты подвинул что-то во время игры, это равно читу. Теперь то, как ты подошел к этому месту, как враги подошли, как они стреляют, какие теперь тайминги, оказывается недостоверной информацией - а ты вместо переигрывания уровня думаешь что он у тебя работает как прежде. И двигая так по чуть чуть ты не ускоряешь, а замедляешь разработку. Ускорить в х20 раз бы тебе помогло обдумать принцип, как расставлять, а не вручную постоянно дергать.
> Ты знаешь, что Unity вынуждена делать под капотом, чтобы вернуть объекты в чистое состояние и чем это потенциально грозит? Не знаешь, если не заплатил миллионы за доступ к исходникам юнити.
Что?
когда ты запускаешь игру, ты видишь только то, что рендерится камерой, и можешь делать то, что написал в своих скриптах. если тебе нужны какие-то инструменты для тестов, отладки, их нужно делать самому.
в старых играх часто была консоль разработчика, в ней можно было прописать читы, команды для спавна разных предметов, переключение уровней.
play mode это такая консоль разработчика с супер способностями, потому что позволяет делать все, что делаешь во время разработки, и во время игры тоже.
если надо бессмертие, просто выбираешь объект игрока и включаешь чекбокс активирующий бессмертие. если надо какой-то предмет, просто перетаскиваешь на сцену. можно легко рисовать линии, примитивы прямо на сцене, выводить текст. например, можно рисовать траекторию пуль на сцене.
люди не понимают какое МОГУЩЕСТВО это тебе дает, как разработчику. в теме на реддите какой-то дурачок даже жалуется на эту фичу в юнити.
Это вообще другое, это чтобы фишки писать для редактора, ты предлагаешь по сути на тул скрипте написать запуск сцены с нуля.
Собрал в .exe, папка с исполняемым файлом весит 150 МБ. Почему так дохуя? Я перешел на Godot сегодня, потому что думал, что здесь объем будет меньше. Кто будет вообще качать играть в говно 2д игру которая в итоге буде занимать место как гта 5???
Это одна сцена и один спрайт. 2D-игра не должна весить 150 МБ.
Видимо, у тебя с иронией не очень.
Узнай уже про вкладку Remote в редакторе.
В 2024 это не большой.
3-я версия, GDScript, собранная без C# и 3D. Конечно 22 это не 6, как SDL3, но так и фич больше.
Это занимает полрубля от стоимость SSD, чел... Если у тебя клиент не может позволить себе полрубля на железо, он и игру у тебя не купит
Лучше ты мне дай ГАРАНТИЮ, что мы тут на тебя не впустую время тратим, что ты не кот который яйца лижет, а человек который реально игру напишет.
Размер исполняемого файла в годоте не меняется. Меняется твой пак контента.
А не сори баг был
Я что так много прошу, Мне только нужна колизия, анимация, и небольшой размер исполняемого фала кросплатворменый. А потом удивляються почему на ютубе столько людей сами пишут игровые движки.
Ты для какой платформы делаешь игру, для микроконтроллеров?
SSD на пол-терабайта стоит, как выпить кофе с пирожным в ресторане.
Самый нищебродский телефон продаётся с 64 ГБ на борту. Не мегабайт, а в тысячу раз больше. Ты не в 1996 году, проснись.
Да успокояся блять! Больше ничего не остаётся кроме go dot нормального. Наверно на нём и буду продолжать.
Я вообще не фанат годота, просто мимо шёл и увидел шизика, решил вернуть в реальность. У тебя ещё много заблуждений из 90-ых осталось, наверное.
Ну вообше дефолт неплохо выглядит на стиме. Я может затвра даже попробую. Тем болие что C++ есть вместо lua
Ясно, ну не буду мешать.
Нет нельзя, хуйня полная!
Ну делать без шейдеров это боль. Самое базовое - например перекрашивать что-то, а еще веселее если анимировать параметры. Дальше, эффекты вроде заморозки, водного искажения, пламени, молний, облачности, растворения. Обводка. Постобработка, глитчи, виньетки, хрома аберрация, блюр, CRT. Ну типа это все можно сделать ручками по пикселям или заготовленными картинками, но шейдером же удобней.
>часто была консоль разработчика
Думаю, если у тебя достаточно сложная игра, то тебе даже на Unity придётся писать свою консоль, либо искать готовую в магазине. Я поискал - есть даже платные, значит, спрос имеется. А для простейших игрушек подобная консоль просто не нужна.
>если надо бессмертие, просто выбираешь объект игрока и включаешь чекбокс активирующий бессмертие.
ОТКРЫЛ PLAYER.TSCN
НАЖАЛ ЧЕКБОКС БЕССМЕРТИЯ
НАЖАЛ CTRL+S
ИГРА СЧИТАЛА НОВЫЕ ПАРАМЕТРЫ
ТЫ БЕССМЕРТЕН
Или используй вкладку Remote.
>если надо какой-то предмет, просто перетаскиваешь на сцену.
ОТКРЫЛ WORLD_MAP.TSCN
НАЖАЛ ПЕРЕТАЩИЛ НА СЦЕНУ ITEM.TSCN
НАЖАЛ CTRL+S
ИГРА СЧИТАЛА НОВЫЕ ПАРАМЕТРЫ
У ТЕБЯ В ИГРЕ ПОЯВИЛСЯ ITEM.TSCN
Или добавляй предмет в инвентарь игрока.
>можно легко рисовать линии, примитивы прямо на сцене, выводить текст. например, можно рисовать траекторию пуль на сцене.
Это делается в скриптах. Вкл/выкл через @export.
3D: https://docs.godotengine.org/en/stable/tutorials/3d/procedural_geometry/immediatemesh.html
2D: https://docs.godotengine.org/en/stable/tutorials/2d/custom_drawing_in_2d.html
>Создал обычный 2D проект с одной сценой, одним спрайтом и одним скриптом для управления.
Так ты ж ничего не сделал. Даже 2D проект, если ты делаешь полноценную игру в хорошем разрешении, в конечном итоге может занимать гигабайты. Даже в пиксельартовом стиле. Пример: Starbound ≈3.2 ГБ, используя какой-то велосипед на C++ и SDL2.
>весит 150 МБ
https://docs.godotengine.org/en/stable/contributing/development/compiling/optimizing_for_size.html
Вкратце: можно выключить очень многое, что ты не собираешься использовать. Однако, до тех пор, пока ты не опубликуешь игру, иметь "всё в одном" удобно.
Плюс сжатие файлов NTFS сжимает EXE до ≈50%.
>>3447
>пишу игру для себя
В таком случае, тебе нет необходимости делать полноценный билд игры - ты можешь играть в неё, используя исключительно Godot Editor. Возможно создать специальный ярлык, чтобы запускать игру в "разобранном" виде, не дублируя никакие EXE.
Тогда у тебя будет один EXE под все твои проекты - остаётся только создавать ярлыки для запуска.
>>3449
>когда будет >= 100 сцен, размер исполняемого файла не вырастет на пару гигабайт?
Все твои данные хранятся в PCK. Во время экспорта Godot не компилирует свой EXE, а только изменяет мета-данные внутри копии "шаблона экспорта", как, например, имя твоей компании, версию билда и т.п.
PCK, в свою очередь, подобен ZIP, но это кастомный формат Godot. Также можно экспортировать в ZIP и упаковать все данные PCK внутрь EXE как ресурс.
>>3457
>небольшой размер исполняемого
Конкретно зачем? На микроконтроллер прошивать?
Если тебе нужен движок для микроконтроллера, то посмотри в сторону инструментов, подходящих для выбранного микроконтроллера. Типа, что там для Arduino подходит или какой у тебя там контроллер.
>>3484
>нет души
>>3489
>Ее в компьютере
"Души" вообще нет, это абстрактная концепция, придуманная для контроля тупого быдла, которое отказывается работать вплоть до попыток суицида. Лучший способ заставить раба работать - угрожать наказанием, которое настигнет даже после смерти. Внушать это, конечно, необходимо с малых лет, а то взрослое быдло без прошивки не особо поверит - а прошитое в детстве будет спорить до усрачки за внушённые в детстве абстрактные концепции. Вот древние люди просекли эту фишку и понеслось...
Что касается шейдеров - полезный инструмент, но разрабатывать сложно, особенно новичку. Лучше сфокусироваться на игровых механиках, отложив спецэффекты на потом, когда игра сформируется. Интересная игра будет интересна и без шейдеров.
>Создал обычный 2D проект с одной сценой, одним спрайтом и одним скриптом для управления.
Так ты ж ничего не сделал. Даже 2D проект, если ты делаешь полноценную игру в хорошем разрешении, в конечном итоге может занимать гигабайты. Даже в пиксельартовом стиле. Пример: Starbound ≈3.2 ГБ, используя какой-то велосипед на C++ и SDL2.
>весит 150 МБ
https://docs.godotengine.org/en/stable/contributing/development/compiling/optimizing_for_size.html
Вкратце: можно выключить очень многое, что ты не собираешься использовать. Однако, до тех пор, пока ты не опубликуешь игру, иметь "всё в одном" удобно.
Плюс сжатие файлов NTFS сжимает EXE до ≈50%.
>>3447
>пишу игру для себя
В таком случае, тебе нет необходимости делать полноценный билд игры - ты можешь играть в неё, используя исключительно Godot Editor. Возможно создать специальный ярлык, чтобы запускать игру в "разобранном" виде, не дублируя никакие EXE.
Тогда у тебя будет один EXE под все твои проекты - остаётся только создавать ярлыки для запуска.
>>3449
>когда будет >= 100 сцен, размер исполняемого файла не вырастет на пару гигабайт?
Все твои данные хранятся в PCK. Во время экспорта Godot не компилирует свой EXE, а только изменяет мета-данные внутри копии "шаблона экспорта", как, например, имя твоей компании, версию билда и т.п.
PCK, в свою очередь, подобен ZIP, но это кастомный формат Godot. Также можно экспортировать в ZIP и упаковать все данные PCK внутрь EXE как ресурс.
>>3457
>небольшой размер исполняемого
Конкретно зачем? На микроконтроллер прошивать?
Если тебе нужен движок для микроконтроллера, то посмотри в сторону инструментов, подходящих для выбранного микроконтроллера. Типа, что там для Arduino подходит или какой у тебя там контроллер.
>>3484
>нет души
>>3489
>Ее в компьютере
"Души" вообще нет, это абстрактная концепция, придуманная для контроля тупого быдла, которое отказывается работать вплоть до попыток суицида. Лучший способ заставить раба работать - угрожать наказанием, которое настигнет даже после смерти. Внушать это, конечно, необходимо с малых лет, а то взрослое быдло без прошивки не особо поверит - а прошитое в детстве будет спорить до усрачки за внушённые в детстве абстрактные концепции. Вот древние люди просекли эту фишку и понеслось...
Что касается шейдеров - полезный инструмент, но разрабатывать сложно, особенно новичку. Лучше сфокусироваться на игровых механиках, отложив спецэффекты на потом, когда игра сформируется. Интересная игра будет интересна и без шейдеров.
Годот конпелирует glsl шейдеры glslang'ом
>Вот древние люди просекли эту фишку и понеслось...
они были охотниками. их задачей было следить за поведением животных и находить уязвимости. сначала чтобы кушать, потом чтобы полностью подчинить одомашнив. так красиво все провернули, что попутно устроили шестое массовое вымирание биологических видов на планете. это относится и к собственному виду. одомашнивание чтобы утянуть из под носа ресурсы, и самих превратить в ресурс.
Продолжаю пилить свой проектик. Столкнулся с проблемой при использовании Line2D.
Пик 1 - скрин из игры, где корректно прорисовывается путь, точки не искажаются и следуют за гексами
Пик 2 (мой) - если присмотреться, то видно что точки искажаются при изменении угла. Как такое фиксить?
Или такое исправляется только шейдером?
В смысле это текстурированная ломанная линия? Хз, попробуй рисовать только отрезки по одному, а не всю линию целиком. Вообще имхо тут проще как то рисовать "спрайты вдоль линии", а не линию. Шейдером, наверное, тоже можно. Годот 4?
Был еще ассет SmartShape2D, может это оверкилл, но там вроде равномерно все текстурируется.
Алсо, если у тебя прям гексы и только гексы и это их ребро, то вообще можно нарисовать несколько тайлов границы и все, никакими лайнами не пользоваться.
Ну типа как у тебя железная дорога сделана.
1592x924, 0:12
>В смысле это текстурированная ломанная линия?
Ну вроде как да. Пытаюсь добиться результата, как на 1 пике
>Вообще имхо тут проще как то рисовать "спрайты вдоль линии", а не линию.
Идея, попробую завтра
>Годот 4?
Он самый
>>3542
Не, это не ребро. Как и жд пути. Они через центр гексов идут
На вебмке результат, которого хочу добиться
При этом новые узлы имеют, например, координаты (-10, -10, 20, 20).
Как сделать так, чтобы Viewport был в центре?
Синяя рамка
Имхо это сделано вот такими тайлами (можно сделать второй слой тайлов, с прозрачностью, с нужными наборами пар точек)
Синяя рамка - это разрешение экрана проекта, которое в Project settings - window задается.
Так называемое design resolution, которое потом может отскалироваться.
Поскольку это экран, то и координаты в нем от 0 до ширины.
Насколько я знаю, опции перенести этот вьюпорт нет. Видимо это режим для новичков, когда игра одноэкранная или какой то пиксельный платформер, когда можно считать от левого угла без проблем. Тебе проще пользоваться только камерой, а синюю рамочку отключить в настройках гизмо.
>>3575
Этот Viewport и его размеры легко получить через наследуемый метод GetViewport().GetVisibleRect().Size.X
В одном из гайдов по случайной генерации предметов, автор использовал его координаты и размер, вместо того что бы через хнепонятно какую жопу искать камеру или спрайт поля, который может меняться, также как и камера, и без добавления поиска по коллекциям.
А я вот думаю, что все таки нет.
Этот тулскрипт отказывается менять вьюпорт и рамка остается старой.
Поэтому я считаю, что синяя рамка показывает разрешение окна из проекта, а уже главный вьюпорт получает свой размер как производное от этого. А не сам вьюпорт. Это мое пользовательское предположение, в исходники я не заглядывал.
Я б отдельный делал. А ресайз использовал для всяких поверапов, прокачек и прочих модификаторов дальности.
А хер его знает. Это один из самых мистических вопросов.
По п.1 - ресайзить запрещено кстати, можно только менять экстенты/радиусы самих шейпов.
Вообще слышал мнение, что для такого лучше не пользоваться физикой, а делать свои проверки в визуальном, а не физическом тике.
Я бы лично всегда держал все коллижны и отключал ненужные. Но это стопудово подойдет только простым играм, а не тем, где сотни юнитов.
Если не ошибаюсь, тебе нужно 1 фрейм сделать паузу перед исполнением
Прям в реди в самом старте напиши там этот код что то вроде yield(get_tree(), "idle_frame")
Могу ошибаться, но там эта хуйня как-то ебануто работает
Тоже слышал что нельзя ресайзить, особенно нон-юниформ ресайз вреден. Но хуй знает, ресайжу как угодно половину своей физики - полет нормальной. С другой стороны, у меня примитивные капсулы/кубы.
>leftTop
>rightBot
Попроще можно как-то эти координаты получить? А не так как я:
var viewport = GetViewport();
var camera2D = viewport.GetCamera2D();
var visibleRect = GetViewport().GetVisibleRect();
var leftTop = new Vector2(
camera2D.GlobalPosition.X - visibleRect.Size.X/2,
camera2D.GlobalPosition.Y - visibleRect.Size.Y/2
);
var rightBot = new Vector2(
camera2D.GlobalPosition.X + visibleRect.Size.X/2,
camera2D.GlobalPosition.Y + visibleRect.Size.Y/2
);
Зачем тебе эти координаты? Не стоит прибивать свой геймплей к разрешению экрана игрока.
>>3550
>чтобы Viewport был в центре
https://docs.godotengine.org/en/stable/classes/class_camera2d.html#enum-camera2d-anchormode
>ANCHOR_MODE_FIXED_TOP_LEFT
Либо вообще не юзать Camera2D.
>>3575
>Видимо это режим для новичков
1. Рамка вьюпорта имеет значение для UI (Control). Дизайнишь UI ты в рамках стандартного Viewport.
2. Ты не обязан использовать Camera2D. Это только вспомогательная нода для упрощения некоторых манипуляций с "камерой" в 2D. Обязательна только Camera3D, поскольку без неё рендерится только 2D.
>>3588
>для разных атак в комбухе
Что у тебя за игра? Ты делаешь файтинг? Всё сильно зависит от конкретной игры, твоих дизайнерских решений относительно хитбоксов, их форм и т.д.
>>3613
>делать свои проверки в визуальном
Имхо, файтингам как раз нужны фиксированные обновления, чтобы игрок с 240 ФПС не мог играть быстрее против тех игроков, у кого только 60 ФПС.
И в целом это касается любого жанра. Не стоит привязывать управление к частоте кадров...
>проблемой при использовании Line2D
Line2D тут всё правильно отображает.
Если тебе нужны точки строго по гексагонам, то и отображай точки пути строго по гексагонам. Зачем излишне усложнять, если движение привязано к гексагонам? Лучше добавь обводку гексагонам - так игроки будут сразу знать, куда и как они могут идти. Гексагоны без обводки слишком сливаются.
>Зачем тебе эти координаты? Не стоит прибивать свой геймплей к разрешению экрана игрока.
Говно всякое должно спавнится по краям того что видит игрок.
И камера потом будет двигаться с игроком по карте.
>чтобы Viewport был в центре
>ANCHOR_MODE_FIXED_TOP_LEFT
На Viewport можно хуй забить, это не камера на него скрипты не повесишь.
>Либо вообще не юзать Camera2D.
Мне только в 2д надо.
Блять это же тривиальная задача, неужели все кто делает игры так углы вычисляют.
Похуй на ООП! наверно просто скрипт повешу на камеру и сделаю паблик переменные. В гейм деве как я понял хорошие практики нихуя не работают
>это не камера на него скрипты не повесишь
Ээээ, вроде можно и на root viewport вешать...
>спавнится по краям того что видит игрок
Конечно. Так в чём проблема?
>тривиальная задача
Конечно. Ты пробовал встроенное API?
https://docs.godotengine.org/en/stable/classes/class_camera2d.html#class-camera2d-method-get-screen-center-position
Просто непонятно, чего ты хочешь-то...
>>3669
Без внятного ТЗ - результат ХЗ. При чём тут ООП?
Должен предупредить, есть ещё СЛОИ, у которых может быть разная скорость относительно экрана, если ты хочешь параллакс на уровне. А у камеры дополнительно влияет на смещение zoom...
var p = camera2D.GlobalPosition;
var half = visibleRect.Size × 0.5f;
var leftTop = p - half;
var rightBot = p + half;
Вообще, почитай документацию внимательнее:
https://docs.godotengine.org/en/stable/classes/class_rect2.html#class-rect2-property-end
Там можно обойтись сложениями Vector2.
>>3671
Ты тоже почитай документацию...
Тебе разной документации накидали, но для начала тебе надо вот сюда заглянуть
https://docs.godotengine.org/en/stable/tutorials/rendering/multiple_resolutions.html
Например, что будет если твою игру запустить на 16:9, а что на квадратном мониторе? Получится разный геймплей, пототму что враг с края экрана летит разное время до центра.
>Лучше добавь обводку гексагонам - так игроки будут сразу знать, куда и как они могут идти. Гексагоны без обводки слишком сливаются
Гексагоны с обводкой будут создавать эффект настолки. Будет на интуитивном уровне понятно, что это не реальная карта местности, а просто клетки, которые сцепили между собой.
У меня на пиках тестовые текстурки офкорс
А та проблема, о которой ты говоришь как раз решается линией движения. Вот тут на вебмке показано >>3543
да пох
GetViewport().GetVisibleRect().Size
Меняется от размеров окна
(1152, 648)
(1152, 648)
(1152, 648)
(710, 648)
Главное что есть
GetCamera2D().GlobalPosition + Size/2
Кто-нибудь ИТТ уже использовал Kompute?
https://github.com/KomputeProject/kompute
Уже 4 года доступно, но ничего не слышно.
Заебала шизо нейронка и гайды в падло на youtube смотреть, помогите.
У меня было так
Player (CharacterBody2D)
├── Sprite2D
├── Camera2D
├── EnemySpawner
└── CollisionShape2D // хз зачем онм нен нужен был
Enemy (CharacterBody2D)
├── Sprite2D
└── CollisionShape2D
Спросил у нейронки как детектить вхождение Enemy
Насоветовала хуеты ебаной, добавь Area2D и CollisionShape2D
Сразу не разобрался и перенес текуший CollisionShape2D в Area2D
код:
public override void _Ready()
{
GD.Print("PlayerArea2d OnReady");
BodyEntered += OnBodyEntered;
}
private void OnBodyEntered(Node2D body)
{
GD.Print(body.Name);
}
Мучался мучался, нихкя не работало. Потом случайно добавил еще один CollisionShape2D И оказалость что так правильно
Как в итоге оказалось что нужно было так
Player (CharacterBody2D)
├── Sprite2D
├── Camera2D
├── EnemySpawner
└── CollisionShape2D //Disabled
└───Area2D
└─CollisionShape2D
Enemy (CharacterBody2D)
├── Sprite2D
└── CollisionShape2D
└───Area2D
└─CollisionShape2D
МНЕ ТОЛЬКО НАДО ЧТО БЫ Enemy НЕМНОГО ТОЛАЛи СЕБЯ И ВХОДИЛИ В ИГРОКА НАНОСЯ ЕМУ УРОН
На гадах на ютубе испольсуют Area2D вместо CharacterBody2D
А CharacterBody2D тогда для кого, только для игрока получается?
Почему кстатий в gd нет [code] Как в pr
Заебала шизо нейронка и гайды в падло на youtube смотреть, помогите.
У меня было так
Player (CharacterBody2D)
├── Sprite2D
├── Camera2D
├── EnemySpawner
└── CollisionShape2D // хз зачем онм нен нужен был
Enemy (CharacterBody2D)
├── Sprite2D
└── CollisionShape2D
Спросил у нейронки как детектить вхождение Enemy
Насоветовала хуеты ебаной, добавь Area2D и CollisionShape2D
Сразу не разобрался и перенес текуший CollisionShape2D в Area2D
код:
public override void _Ready()
{
GD.Print("PlayerArea2d OnReady");
BodyEntered += OnBodyEntered;
}
private void OnBodyEntered(Node2D body)
{
GD.Print(body.Name);
}
Мучался мучался, нихкя не работало. Потом случайно добавил еще один CollisionShape2D И оказалость что так правильно
Как в итоге оказалось что нужно было так
Player (CharacterBody2D)
├── Sprite2D
├── Camera2D
├── EnemySpawner
└── CollisionShape2D //Disabled
└───Area2D
└─CollisionShape2D
Enemy (CharacterBody2D)
├── Sprite2D
└── CollisionShape2D
└───Area2D
└─CollisionShape2D
МНЕ ТОЛЬКО НАДО ЧТО БЫ Enemy НЕМНОГО ТОЛАЛи СЕБЯ И ВХОДИЛИ В ИГРОКА НАНОСЯ ЕМУ УРОН
На гадах на ютубе испольсуют Area2D вместо CharacterBody2D
А CharacterBody2D тогда для кого, только для игрока получается?
Почему кстатий в gd нет [code] Как в pr
Там отступов не хватает
СЕЙЧАС БУДЕТ ШИЗА!!
Заебала шизо нейронка и гайды в падло на youtube смотреть, помогите.
У меня было так
Player (CharacterBody2D)
├── Sprite2D
├── Camera2D
├── EnemySpawner
└── CollisionShape2D // хз зачем онм нен нужен был
Enemy (CharacterBody2D)
├── Sprite2D
└── CollisionShape2D
Спросил у нейронки как детектить вхождение Enemy
Насоветовала хуеты ебаной, добавь Area2D и CollisionShape2D
Сразу не разобрался и перенес текуший CollisionShape2D в Area2D
код:
public override void _Ready()
{
....GD.Print("PlayerArea2d OnReady");
....BodyEntered += OnBodyEntered;
}
private void OnBodyEntered(Node2D body)
{
....GD.Print(body.Name);
}
Мучался мучался, нихкя не работало. Потом случайно добавил еще один CollisionShape2D И оказалость что так правильно
Как в итоге оказалось что нужно было так
Player (CharacterBody2D)
├── Sprite2D
├── Camera2D
├── EnemySpawner
└── CollisionShape2D //Disabled
....└───Area2D
........└─CollisionShape2D
Enemy (CharacterBody2D)
├── Sprite2D
└── CollisionShape2D
└───Area2D
....└─CollisionShape2D
МНЕ ТОЛЬКО НАДО ЧТО БЫ Enemy НЕМНОГО ТОЛАЛи СЕБЯ И ВХОДИЛИ В ИГРОКА НАНОСЯ ЕМУ УРОН
На гадах на ютубе испольсуют Area2D вместо CharacterBody2D
А CharacterBody2D тогда для кого, только для игрока получается?
Почему кстатий в gd нет [code] Как в pr
СЕЙЧАС БУДЕТ ШИЗА!!
Заебала шизо нейронка и гайды в падло на youtube смотреть, помогите.
У меня было так
Player (CharacterBody2D)
├── Sprite2D
├── Camera2D
├── EnemySpawner
└── CollisionShape2D // хз зачем онм нен нужен был
Enemy (CharacterBody2D)
├── Sprite2D
└── CollisionShape2D
Спросил у нейронки как детектить вхождение Enemy
Насоветовала хуеты ебаной, добавь Area2D и CollisionShape2D
Сразу не разобрался и перенес текуший CollisionShape2D в Area2D
код:
public override void _Ready()
{
....GD.Print("PlayerArea2d OnReady");
....BodyEntered += OnBodyEntered;
}
private void OnBodyEntered(Node2D body)
{
....GD.Print(body.Name);
}
Мучался мучался, нихкя не работало. Потом случайно добавил еще один CollisionShape2D И оказалость что так правильно
Как в итоге оказалось что нужно было так
Player (CharacterBody2D)
├── Sprite2D
├── Camera2D
├── EnemySpawner
└── CollisionShape2D //Disabled
....└───Area2D
........└─CollisionShape2D
Enemy (CharacterBody2D)
├── Sprite2D
└── CollisionShape2D
└───Area2D
....└─CollisionShape2D
МНЕ ТОЛЬКО НАДО ЧТО БЫ Enemy НЕМНОГО ТОЛАЛи СЕБЯ И ВХОДИЛИ В ИГРОКА НАНОСЯ ЕМУ УРОН
На гадах на ютубе испольсуют Area2D вместо CharacterBody2D
А CharacterBody2D тогда для кого, только для игрока получается?
Почему кстатий в gd нет [code] Как в pr
Зачем используешь C#, если в базе путаешься?
GDScript удобнее + по нему больше обучающего.
Начинай с документации:
https://docs.godotengine.org/en/stable/tutorials/physics/physics_introduction.html
https://docs.godotengine.org/en/stable/tutorials/physics/using_character_body_2d.html
https://docs.godotengine.org/en/stable/tutorials/physics/using_area_2d.html
>CollisionShape2D зачем
Вкратце, без Shape физика/коллизии не работают.
Как следует из названия, эта года задаёт форму.
>добавь Area2D и CollisionShape2D
Нейронка в целом правильно посоветовала.
CharacterBody нужен для кинематической физики.
Area - это сенсор/триггер, а также зона влияния.
Shape должен находиться в ПОТОМКАХ тела/зоны:
CharacterBody # физическое тело персонажа
_ CollisionShape # принадлежит телу
_ Area # датчик урона персонажу
_ _ CollisionShape # принадлежит датчику
Флаг Disabled отключает форму коллизии.
Внимательно изучи collision_layer/_mask.
В годоте 4 есть compute shaders
например https://github.com/DevPoodle/compute-shader-plus
Но честно говоря учитывая условия, что сначала делал под ведроид, сейчас веб игры, то даже хз когда до них доберусь. Это для тяжелых пека с 4090 все же.
>Зачем используешь C#, если в базе путаешься?
jetbrains будет под GDScript ?
>Начинай с документации
Да какая документация и так всё знаем всё умеем.
>CharacterBody и Area
Можно было совместить, не понимаю тогда зачем CharacterBody или CollisionShape2D
Получается Area всегда главный узел? Как проверять вхождение Area в Area?
Если так подумать 2д говно я могу всё на Area написать, У которого границ нет. Но как правильно?
Зачем тогда CharacterBody2D?
>Shape должен находиться в ПОТОМКАХ тела/зоны:
>CharacterBody # физическое тело персонажа
>_ CollisionShape # принадлежит телу
>_ Area # датчик урона персонажу
>_ _ CollisionShape # принадлежит датчику
Последние не до конца понял по шизе, завтра по тестирую
Какой главный узел персонажа, объектов, мобов?
>compute shaders
Так это шейдеры, а там AI/ML через Vulkan.
Или это одно и то же? Я не разбираюсь в деталях...
>Это для тяжелых пека с 4090 все же.
На 750 Ti у меня LLMки 0.5b ~ 1.5b шустро работают.
Мне нужно API для совсем малюсеньких нейронок...
Как я, по-твоему, буду их шейдерами вычислять?
Если совсем на пальцах
Character body - это тело, контролируемое "джойстиком"
Rigid body - тело, контролируемое физическими векторами (как тяга у ракеты)
Static body - неподвижное тело
Все тела выше - физические объекты, упирающиеся друг в друга как в препятствия
Character body - он как запрограммированый лифт, как платформа, просто всех толкает либо упирается. Его физические тела не отталкивают. Более того, в 4-ке по дефолту и чарактер не толкает RIgid-ы. https://kidscancode.org/godot_recipes/4.x/physics/character_vs_rigid/index.html
Area - область-пустышка, детектор. Она не сталкивается и не отталкивает, но триггерится когда в область входит другое тело или другая area (для этого есть разные сигналы)
Соответственно, если ты хочешь, чтобы риджида толкали - ты ему придаешь вектор силы (как бы пнув мяч в какой то точке). Если ты хочешь, чтобы чарактера толкали - то при столкновении ты его скорости прибавляешь какое то значение, потом убавляешь (аналогично как в платформере подлет прыжка со временем уменьшается на гравитацию).
Остается вопрос, в какой момент толкать. В своей игре я детекчу через Area, которая немного шире объектов. Но есть и другие способы. Например, у Character есть метод get_slide_collision получить все столкновения полученные при его движении с помошью move_and_slide (за 1 физический тик?). У Rigid тоже есть свой метод, надо включить contact_monitor и max_contacts_report и получать get_colliding_bodies за предыдущий кадр. Ну и наконец, можно использовать какую-то другую логику, например просто на рассчетах расстояний, раидусов, нахождений в клетках поля и тд.
>edited
Зачем столько элементов?
Да я не на контролёрах программирую! Но всё равно это много.
Я хотел простую 2д игру.
Это тред по годоту. Или формулируй вопросы понятней. Типа, можно ли одновременно запустить лламу на компьюте/вулкане и годот на вулкане? Наверное. Хз как это работает. По моему суть всех этих технологий, в том, чтобы расценивать видяху тоже как просто устройство, где ты выделаешь память через malloc, выполняешь какой то код.
>jetbrains будет под GDScript?
1. Встроенный редактор достаточно хорош.
2. Да, есть поддержка в Rider + доп.плагин:
https://www.jetbrains.com/help/rider/Godot.html
>Да какая документация и так всё знаем
Тогда в чём вопрос, садись и делай сам...
>Можно было совместить
Тело движется как одно целое, но может включать отдельных форм столкновения (шейпы коллизий).
Позже поймёшь, почему так, а пока учись.
>Какой главный узел
Зависит от геймплея/механик игры.
Area тестирует пересечение зон; обычно для более реалистичной физики нужны специальные тела. Автоматическая симуляция - RigidBody, подвижные персонажи - CharacterBody, статичное - StaticBody.
Подобное разделение обязанностей встречается во всех физических движках. Есть ещё SoftBody, и ещё более специфичные виды тел, но это не так важно.
Конечно, далеко не всем играм нужна физика тел. Стратегиям, например, часто достаточно одних Area. Мобильная гиперказуалка типа три-в-ряд вообще не нуждается в определении коллизий, т.к. всё можно определить обращениями к объектам Rect2.
Есть персонаж
....кто-то вошел в зону действия персонажа или пуля прилетела, нужно получить событие
....персонаж вошел в чужую зону, получил эффект или отлетел
Моб
....Персонаж ударил событие
....Другой моб вошел в зону его оттолкнуло
Как будет лучше в плане производительности, писать через код или через возможности движка?
>Тогда в чём вопрос, садись и делай сам...
Просто ною
Ну я и так всё делаю сам. Тут мне не разу годных советов не поступало
Если у тебя один на один, то вообще не важно.
>Это тред по годоту
Это тред годотеров для годотеров, а не "по годоту".
>Или формулируй вопросы понятней.
Вопрос был чётко сформулирован:
>Кто-нибудь ИТТ уже использовал Kompute?
Ну, вот ты не использовал. Зачем тогда отвечать?
>По моему суть всех этих технологий
Я спрашиваю про machine learning из Godot. Это специфическое API, которое, по идее, должно абстрагировать тебя от этих compute shaders и особенностей всяких там видеокарт, коих тыщи.
Ну т.е. compute shaders - это как писать код игры полностью вручную на ассемблере, без движка. А специфические библиотеки - это движок для ML.
Но я ищу не какой-то движок, а движок под Godot.
Чтобы комфортно из GDScript обращаться к нему.
>одних Area.
Как получить размеры?
Если спрайт 200x200 в основном прозрачный а CollisionShape2D 50x50 по пикселям (просто по тому что я так сделала, очертил границы).
Два вопроса:
У тебя в игре будут какие-то стены/препятствия?
Персонажи должны сталкиваться друг с другом?
Если "да" на любой - тебе нужен CharacterBody.
Дополнительно:
Вид "сбоку" и что-то должно падать и катиться?
Что-то должно правдоподобно отскакивать?
Если "да" на любой - тебе нужен RigidBody.
>лучше в плане производительности
Сколько юнитов ты планируешь?
<100: вообще без разницы.
250+: придётся попотеть.
1000+: лучше забей...
В числе "юнитов" также "пули", если их много.
>Как получить размеры?
>CollisionShape2D 50x50 по пикселям
Ты ж уже знаешь размер, чего ты хочешь?
А так, всё зависит от конкретного Shape2D.
https://docs.godotengine.org/en/stable/classes/class_shape2d.html
Я то знаю, но не знаю что лучше в плане производительности. Писать ifы или надеяться что разработчики не далбоёбы и сделали лучше меня.
>Don't chase your dreams...
>Finish whatever the fuck you started...
Дальше не смотрел. Очередная херня.
Во-первых, нахрена делать то, что тебе нахрен не упёрлось? Из-за таких советчиков Стим завален бессмысленными, никому не нужными играми.
Во-вторых, нахрена тянуть то, что ты уже осознал провальным и/или потерял всякий интерес? Так и получаются никому не нужные, провальные игры.
Блаблабла, "вы так больше научитесь" (чему?)...
Да это просто вредные советы, чтобы занять своих потенциальных конкурентов бесполезной работой.
Если у вас есть игра мечты, о которой вы всё своё свободное время думаете - ДЕЛАЙТЕ ЕЁ. Потому что никто кроме вас её сделать не сможет. А эти ваши платформеры и клоны дума никому не нужны.
Если вы начали делать игру и осознали, что это (игра или геймдев в целом) полнейшее говно - лучше уж на полпути забросить, чем спускать всё своё время на никому не нужный, мертворождённый продукт.
Думайте своей головой, а не советами с ютуба.
Переделал. Щас мультиплеер тестируем. Студия 100 воображаемых человек, все собрались, удивляются плавности мультиплеерных кнопок, хвалят. Во как.
Большинство туториалов на ютубе такие, в любой области. Пора бы понять цеховую структуру специалистов в англосаксонской культуре. Никто не будет делиться полезным опытом со своими потенциальными конкурентами, даже за большие деньги. Это тебе не СССР, где к каждому компьютеру шла подробная элементная схема.
Накинуть растягивателей времени типа длинных коридоров или фарма до часа.
this.AreaEntered += area =>
{
....Console.WriteLine(area.Name);
};
Полегче, у нас тут дружеская атмосфера.
А как они у тебя "прилипли"? Физически, какие они по типу? Или ты их добавляешь дочерними к игроку?
Они просто бегут и иногда прилипают к игроку, а потом бегут рядом с ним, несмотря на разницу в скорости.
Всё разобрался
>специалистов в англосаксонской культуре
Свой бред держи при себе. На западе дохуя леваков которые жопу свою рвут для блага человечества. FOSS разработка цветет и пахнет. Но тебе сука надо чтобы самые прожженные капиталисты начали раздавать тебе все бесплатно. Иначе запад бяка а совок потерянная шангрила.
>FOSS разработка цветет и пахнет.
FOSS не то, чем кажется. А в других сферах, за пределами софта, всё ещё хуже. Музыка, рисование, даже боевые искусства. Профи на своих мастер-классах и курсах никогда не раскроют своих секретов. Они в лучшем случае расскажут 90% общедоступной правды и намешают 10% лжи, чтобы запутать конкурентов. В то время, как у простого советского учителя можно узнать это на частном уроке совершенно бесплатно. К сожалению, западные практики давно проникли в наш мир, такие "мастера" у нас инфоцыганами зовутся.
> у нас инфоцыганами зовутся
Уже нет.
Уже повесточка просочилась и к нам, и практика отмен просочилась, и цыгане триггернулись на термин и требуют отменить.
Соевый, ты? Всем нормальным людям похуй на повестку. А как цыгана не назови, он цыганом останется. В одном названии цыган уже вся суть
>FOSS не то, чем кажется
Конечно-конечно, никаких объяснений, так понимаю, не будет.
>намешают 10% лжи, чтобы запутать конкурентов
Вод ведь гнилой запад.
>простого советского учителя
святые люди
Кому надо тот находит нужные источники и получает образование. А чурки вроде тебя только и ноют что не существует на свете достойного учения способного их чему-то научить. Это оказывается не ты тупая пизда, это учителя не те, и учение не то. И конечно во всем виноват запад. А своя пиздобратья которая не шмогла - святые мученики. Каких только дебилов не собирает этот тред. На опен сорс слетаются все лодари которых только видел свет.
>Поплакать можно?
Поплакай. У нас весь тред на этом держится.
А я сегодня придумал как организовать мир "игры мечты" так, чтобы не заботиться о масштабе игры.
Осталось спроектировать синглплеерные кнопки.
Кодил в начале на похуй. Потом спустя какоето время надоело копи пастить одно и тоже. Применил все свои знания в области наследования и разбил на класы.
[Сharacter]
.+Move
.+FlipSprite
....[Enemy]
......+GetDirectionToPlayer
......+GetPlayer
........[Mob1]
........[Mob2]
........[Mob2]
....[Player]
......+GetDirectionFromControl
Пофиксил баг залипания костылями которыей хуй пойми как работают.
Потом заметил еще баг что мобы ходят очередью несмотря на то что колижен овальный и мобы статусом повыше расталкивают медленую мелочь.
Но в итоге сами собираються в очередь к игроку.
Начал копать в сторону нахождения пути.
Увидил элемент поиска пути в редакторе.
На элементе написано: "Внимание, может быть удалён в следуших версиях движка!".
Ну ладно, похуй я себе думал.
Сидел весь день.
Гады говёные старые, нихуя нормально не работает.
Глобальная позиция игрока у далбоёбов обновляется через таймеры.
Все пидорасы использут не тот метод для mova. Если использовать его то у меня опять будет баг.
Кроме того использут свои костыли что бы скользило.
С моим наследованием хуй знает как стакать.
На всех видео поиск пути по точкам у меня всегда прямая линия хоть даже если делаю полность всё по копи пасте.
Нейронка тоже тупит ничег дельного сказать не может.
Хоть бери и сам делай свой велосипед для поиска пути.
ВОт почему оно всеглда всё так? Хочется делать всё по красоте но никогда не получается.
Кодил в начале на похуй. Потом спустя какоето время надоело копи пастить одно и тоже. Применил все свои знания в области наследования и разбил на класы.
[Сharacter]
.+Move
.+FlipSprite
....[Enemy]
......+GetDirectionToPlayer
......+GetPlayer
........[Mob1]
........[Mob2]
........[Mob2]
....[Player]
......+GetDirectionFromControl
Пофиксил баг залипания костылями которыей хуй пойми как работают.
Потом заметил еще баг что мобы ходят очередью несмотря на то что колижен овальный и мобы статусом повыше расталкивают медленую мелочь.
Но в итоге сами собираються в очередь к игроку.
Начал копать в сторону нахождения пути.
Увидил элемент поиска пути в редакторе.
На элементе написано: "Внимание, может быть удалён в следуших версиях движка!".
Ну ладно, похуй я себе думал.
Сидел весь день.
Гады говёные старые, нихуя нормально не работает.
Глобальная позиция игрока у далбоёбов обновляется через таймеры.
Все пидорасы использут не тот метод для mova. Если использовать его то у меня опять будет баг.
Кроме того использут свои костыли что бы скользило.
С моим наследованием хуй знает как стакать.
На всех видео поиск пути по точкам у меня всегда прямая линия хоть даже если делаю полность всё по копи пасте.
Нейронка тоже тупит ничег дельного сказать не может.
Хоть бери и сам делай свой велосипед для поиска пути.
ВОт почему оно всеглда всё так? Хочется делать всё по красоте но никогда не получается.
Вообще, наследование для актёров (персонажей, монстров, юнитов) обычно не рекомендуется. Это затрудняет создание новых вариантов актёров.
>....[Enemy]
>......+GetDirectionToPlayer
>......+GetPlayer
Што? Почему у тебя Enemy отдает кому-то наружу направление на игрока и ссылку на игрока? Он же наоборот, должен получать извне эту информацию?
>....[Player]
>......+GetDirectionFromControl
Опять же, нет особого смысла в этом методе, когда можешь вызвать свой Move() из PhysicsProcess:
https://docs.godotengine.org/en/stable/classes/class_input.html#class-input-method-get-vector
>нахождения пути
>Внимание, может быть удалён
Что ты используешь, NavigationAgent2D? Зачем? Ты ж вроде как хотел отказаться от физики совсем, потому что у тебя полноценных стен на сцене нет? Эти ноды навигации работают в первую очередь со статичной геометрией. Если тебе нужно просто двигать мобов в направлении игрока, по прямой - навигация не нужна.
Что ты вообще делаешь, клон Vampire Survivors?
Много разных жанров в 2D, от жанра зависит код.
>велосипед для поиска пути
Поиска пути где? Ты хоть скриншот уровня дай.
Для простых уровней из клеток (со множеством туннелей, стенок, комнат, дверей) хорошо это:
https://docs.godotengine.org/en/stable/classes/class_astar2d.html
https://docs.godotengine.org/en/stable/classes/class_astargrid2d.html
А раз уж ты на C#, то в C# могут быть какие-то более продвинутые библиотеки поиска пути. Нет нужды изобретать свой велосипед в данной ситуации.
>ВОт почему оно всеглда всё так?
Потому что ты вместо последовательного изучения официальной документации берёшь попавшееся под руку видео 5-летней давности от Васяна, и пока не понимаешь, какие вопросы бесполезно задавать современным LLM (не поймут, ляпнут бред); вместо внимательного изучения вопроса и работы головой копипастишь код из интернета и жалуешься на него.
У тебя проблемы не с Godot, игрой или геймдевом.
У тебя систематические проблемы с обучением.
Я тоже через подобное проходил, много лет назад...
Вообще, наследование для актёров (персонажей, монстров, юнитов) обычно не рекомендуется. Это затрудняет создание новых вариантов актёров.
>....[Enemy]
>......+GetDirectionToPlayer
>......+GetPlayer
Што? Почему у тебя Enemy отдает кому-то наружу направление на игрока и ссылку на игрока? Он же наоборот, должен получать извне эту информацию?
>....[Player]
>......+GetDirectionFromControl
Опять же, нет особого смысла в этом методе, когда можешь вызвать свой Move() из PhysicsProcess:
https://docs.godotengine.org/en/stable/classes/class_input.html#class-input-method-get-vector
>нахождения пути
>Внимание, может быть удалён
Что ты используешь, NavigationAgent2D? Зачем? Ты ж вроде как хотел отказаться от физики совсем, потому что у тебя полноценных стен на сцене нет? Эти ноды навигации работают в первую очередь со статичной геометрией. Если тебе нужно просто двигать мобов в направлении игрока, по прямой - навигация не нужна.
Что ты вообще делаешь, клон Vampire Survivors?
Много разных жанров в 2D, от жанра зависит код.
>велосипед для поиска пути
Поиска пути где? Ты хоть скриншот уровня дай.
Для простых уровней из клеток (со множеством туннелей, стенок, комнат, дверей) хорошо это:
https://docs.godotengine.org/en/stable/classes/class_astar2d.html
https://docs.godotengine.org/en/stable/classes/class_astargrid2d.html
А раз уж ты на C#, то в C# могут быть какие-то более продвинутые библиотеки поиска пути. Нет нужды изобретать свой велосипед в данной ситуации.
>ВОт почему оно всеглда всё так?
Потому что ты вместо последовательного изучения официальной документации берёшь попавшееся под руку видео 5-летней давности от Васяна, и пока не понимаешь, какие вопросы бесполезно задавать современным LLM (не поймут, ляпнут бред); вместо внимательного изучения вопроса и работы головой копипастишь код из интернета и жалуешься на него.
У тебя проблемы не с Godot, игрой или геймдевом.
У тебя систематические проблемы с обучением.
Я тоже через подобное проходил, много лет назад...
>......+GetPlayer
Получить игрока из групы
>......+GetDirectionToPlayer
Получить направление в сторону игрока
>......+GetDirectionFromControl
>Опять же, нет особого смысла в этом методе, когда можешь вызвать свой Move() из PhysicsProcess:
Меня так учили разбивать на куски потом на кусочки потом на микробы.
И не удобно когда весь PhysicsProcess процес засран, особено если у них у всех почти одно и тоже
>Что ты используешь, NavigationAgent2D
NavigationRegion2D для карты
Для мобов
NavigationAgent2D
NavigationObstacle2D
>отказаться от физики
от физики я может и отказался но поиск пути очень важен в любой игре
>Для простых уровней из клеток (со множеством туннелей, стенок, комнат, дверей) хорошо это:
Сука блять, блять, да пиздец блять.
А если надо что бы босы толкали говно по тунелям?
Да и похуй на босов есть куча вариантов кода мобы должы уметь обходить друг друга.
>Потому что ты вместо последовательного изучения официальной документации
Да говно документация, там почти нихкуя нет примеров для C# а то что есть тоже говно.
Документация это подсказка а не талмуд как жить по жизни.
Иди сиди изучай талмуд 10 лет а потом его снова перепишут и потом снова изучай.
>У тебя проблемы не с Godot, игрой или геймдевом.
>У тебя систематические проблемы с обучением.
>Я тоже через подобное проходил, много лет назад...
А сдесь прсото мать твою ебал.
Мне дваче еще никогда ни разу в жизни ничего полезного не советовал и не помога.
Хотя ладно вру, один раз было, в другой тематике и то случайно потому что я случайно наткнулся на пост.
>......+GetPlayer
Получить игрока из групы
>......+GetDirectionToPlayer
Получить направление в сторону игрока
>......+GetDirectionFromControl
>Опять же, нет особого смысла в этом методе, когда можешь вызвать свой Move() из PhysicsProcess:
Меня так учили разбивать на куски потом на кусочки потом на микробы.
И не удобно когда весь PhysicsProcess процес засран, особено если у них у всех почти одно и тоже
>Что ты используешь, NavigationAgent2D
NavigationRegion2D для карты
Для мобов
NavigationAgent2D
NavigationObstacle2D
>отказаться от физики
от физики я может и отказался но поиск пути очень важен в любой игре
>Для простых уровней из клеток (со множеством туннелей, стенок, комнат, дверей) хорошо это:
Сука блять, блять, да пиздец блять.
А если надо что бы босы толкали говно по тунелям?
Да и похуй на босов есть куча вариантов кода мобы должы уметь обходить друг друга.
>Потому что ты вместо последовательного изучения официальной документации
Да говно документация, там почти нихкуя нет примеров для C# а то что есть тоже говно.
Документация это подсказка а не талмуд как жить по жизни.
Иди сиди изучай талмуд 10 лет а потом его снова перепишут и потом снова изучай.
>У тебя проблемы не с Godot, игрой или геймдевом.
>У тебя систематические проблемы с обучением.
>Я тоже через подобное проходил, много лет назад...
А сдесь прсото мать твою ебал.
Мне дваче еще никогда ни разу в жизни ничего полезного не советовал и не помога.
Хотя ладно вру, один раз было, в другой тематике и то случайно потому что я случайно наткнулся на пост.
Лол. Хрестоматийный Даунинг-Крюгер. Просто.
>Да говно документация, там почти нихкуя нет примеров для C#
А теперь вспомни, как тебе всем тредом говорили писать на гдскрипт. Но ты конечно проигнорировал, but then:
>Мне дваче еще никогда ни разу в жизни ничего полезного не советовал и не помога.
Тоже сейчас пилим порно дрочильню в 2D. Единственное пришлось пока на DragonBones остановиться для анимации для первого проекта и он пойдет.
Навигация в годоте вызывала много холиваров, потому что состоит из двух частей, которые не очень между собой координируются.
А именно, есть навигация (поиск пути), который не учитывает другие юниты; а есть collision avoidance - избегание других юнитов, которое не учитывает навигацию. В результате юниты могут выйти за пределы (в примере я не использую физику) А еще проблема в том, что поиск пути пытается его привести в точку, а избегание препятствий от нее уводит, так что он никогда не дойдет, нужно как то умно обрабатывать это условие.
В 4.3 добавили к NavigationObstacle параметр affect_navigation_mesh
То есть возможный воркфлоу - перезапекать навигейшн меш на лету, добавив юнитам обстаклы? Хз, надо попробовать
Еще подводный в том, что у агента радиус, то есть он может быть тлько круг/сфера, поэтому в какой то момент может понадобиться переключать на полигон обстакла и обратно.
Я на двачь захожу уже бухой в говнину. Иногда даже не помню что писал.
Можешь скинуть проэкт?
https://ru.wikipedia.org/wiki/Проблема_XY
Если хочешь, чтобы мы тебе помогли с игрой, опиши:
- какой жанр игры (РПГ, рогалик, шутер, шут-ем-ап);
- какой вид камеры у тебя (сбоку, сверху и другие);
- какие механики составляют фундамент игры.
Сейчас ты непонятно что пытаешься сделать.
>поиск пути очень важен в любой игре
Ошибаешься. Многим играм не нужен поиск пути.
Например, юниты противника могут:
- всегда стоять неподвижно, как мишени;
- бежать по прямой, убиваясь от игрока;
- ходить по строго заданному маршруту;
- двигаться чисто по физике, как мячики.
Это не делает их тупыми. Всё зависит от жанра.
>А если надо что бы босы толкали говно
Вот ты сначала продумай эту фичу в своей игре.
Повторюсь: в СВОЕЙ игре, а не в абстрактной.
>кода мобы должы уметь обходить друг друга
В AStar можно "выключать" узлы, но подумай:
- КОГДА юниты должны осознавать препятствие?
- что, если препятствие НЕВОЗМОЖНО обойти?
- что плохого в том, чтобы они ходили насквозь?
И другие вопросы в контексте конкретной игры.
>нет примеров для C#
API одинаковое для любого языка.
>Документация это подсказка
Правильно. А ты игнорируешь эти подсказки.
>Мне дваче еще никогда ни разу в жизни
Нужно правильно формулировать свои проблемы.
>>4340
>Навигация в годоте
ИМХО, навигация в общем случае нерешаема.
Ну да, ты можешь написать супер-ИИ-навигатор...
Но для 99% игр это будет лютый оверкилл, так ведь?
Так что я даже не думаю о "навигации в Godot".
Нужно думать о навигации в конкретной игре.
https://ru.wikipedia.org/wiki/Проблема_XY
Если хочешь, чтобы мы тебе помогли с игрой, опиши:
- какой жанр игры (РПГ, рогалик, шутер, шут-ем-ап);
- какой вид камеры у тебя (сбоку, сверху и другие);
- какие механики составляют фундамент игры.
Сейчас ты непонятно что пытаешься сделать.
>поиск пути очень важен в любой игре
Ошибаешься. Многим играм не нужен поиск пути.
Например, юниты противника могут:
- всегда стоять неподвижно, как мишени;
- бежать по прямой, убиваясь от игрока;
- ходить по строго заданному маршруту;
- двигаться чисто по физике, как мячики.
Это не делает их тупыми. Всё зависит от жанра.
>А если надо что бы босы толкали говно
Вот ты сначала продумай эту фичу в своей игре.
Повторюсь: в СВОЕЙ игре, а не в абстрактной.
>кода мобы должы уметь обходить друг друга
В AStar можно "выключать" узлы, но подумай:
- КОГДА юниты должны осознавать препятствие?
- что, если препятствие НЕВОЗМОЖНО обойти?
- что плохого в том, чтобы они ходили насквозь?
И другие вопросы в контексте конкретной игры.
>нет примеров для C#
API одинаковое для любого языка.
>Документация это подсказка
Правильно. А ты игнорируешь эти подсказки.
>Мне дваче еще никогда ни разу в жизни
Нужно правильно формулировать свои проблемы.
>>4340
>Навигация в годоте
ИМХО, навигация в общем случае нерешаема.
Ну да, ты можешь написать супер-ИИ-навигатор...
Но для 99% игр это будет лютый оверкилл, так ведь?
Так что я даже не думаю о "навигации в Godot".
Нужно думать о навигации в конкретной игре.
Короче да эта хуйня в динамически создаваемых объектах не работает! Всем спасибо за внимание.
Навигация - это конечно хорошо, но надо и рейкасты кидать, а то у твоих мобов видимость ноль, идут по приборам.
Так-то вкладывание child-нод в parent-ноды - это база, фундамент всего движка. Как можно не догадаться о банальном выкладывании "дырки" (то, что тебе нужно обходить стороной) в "площадь" (то, где ты ходишь)?
Это проблема в обучении. Ты взялся за объективно сложную тему (навигация), толком не разбираясь в фундаментальных концепциях (что такое "ноды" и почему они вкладываются друг в друга). Если бы ты последовательно изучал движок, такие вещи были бы для тебя очевидными - понятными без слов.
>>4355
>не работает
Не зря эти ноды помечены как "experimental". Это как садиться на лавочку с табличкой "окрашено" и потом жаловаться, что у тебя теперь вся одежда в краске.
Сразу предупреждаю, что "deprecated" ещё хуже, чем "experimental" и ты не должен таким пользоваться в новых проектах, тем более для обучения движку.
>>4356
>а то у твоих мобов видимость ноль
Совсем наоборот получается. Если ты используешь навигацию по AStar или navmesh как способ просто получить путь из А в Б, твои мобы заранее узнают правильный маршрут, даже если по логике игры не должны. Особенно глупо это будет выглядеть в игре, которая требует от игрока прятаться и ходить по "секретным" проходам: ведь мобы будут в 100% ситуаций сразу нацеливаться на игрока, вместо естественного поиска методом проб и ошибок.
Поэтому "навигация" в играх, если она вообще нужна конкретной игре, всегда должна быть очень сильно заточена под геймплей конкретной игры. Тут нельзя создать решение, подходящее всем пользователям из коробки без ковыряния в мелких деталях и при этом без затратных алгоритмов/раздутия движка.
Алсо, из моего опыта, лучше сделать слой абстракции, который будет находиться между твоими юнитами и конкретной реализацией навигации. Чтобы ты мог без особого труда переключиться на другой способ, не переделывая логику своих мобов.
Т.е. вместо "сервера навигации" Godot нужно делать собственный "менеджер навигации" и уже из него, при необходимости, обращаться к функциям Godot.
Конечно, это всё - сложная тема для новичка. Благо большинство игр вообще не требуют навигации... Ну, либо обходятся простейшим AStar на сетке...
Так-то вкладывание child-нод в parent-ноды - это база, фундамент всего движка. Как можно не догадаться о банальном выкладывании "дырки" (то, что тебе нужно обходить стороной) в "площадь" (то, где ты ходишь)?
Это проблема в обучении. Ты взялся за объективно сложную тему (навигация), толком не разбираясь в фундаментальных концепциях (что такое "ноды" и почему они вкладываются друг в друга). Если бы ты последовательно изучал движок, такие вещи были бы для тебя очевидными - понятными без слов.
>>4355
>не работает
Не зря эти ноды помечены как "experimental". Это как садиться на лавочку с табличкой "окрашено" и потом жаловаться, что у тебя теперь вся одежда в краске.
Сразу предупреждаю, что "deprecated" ещё хуже, чем "experimental" и ты не должен таким пользоваться в новых проектах, тем более для обучения движку.
>>4356
>а то у твоих мобов видимость ноль
Совсем наоборот получается. Если ты используешь навигацию по AStar или navmesh как способ просто получить путь из А в Б, твои мобы заранее узнают правильный маршрут, даже если по логике игры не должны. Особенно глупо это будет выглядеть в игре, которая требует от игрока прятаться и ходить по "секретным" проходам: ведь мобы будут в 100% ситуаций сразу нацеливаться на игрока, вместо естественного поиска методом проб и ошибок.
Поэтому "навигация" в играх, если она вообще нужна конкретной игре, всегда должна быть очень сильно заточена под геймплей конкретной игры. Тут нельзя создать решение, подходящее всем пользователям из коробки без ковыряния в мелких деталях и при этом без затратных алгоритмов/раздутия движка.
Алсо, из моего опыта, лучше сделать слой абстракции, который будет находиться между твоими юнитами и конкретной реализацией навигации. Чтобы ты мог без особого труда переключиться на другой способ, не переделывая логику своих мобов.
Т.е. вместо "сервера навигации" Godot нужно делать собственный "менеджер навигации" и уже из него, при необходимости, обращаться к функциям Godot.
Конечно, это всё - сложная тема для новичка. Благо большинство игр вообще не требуют навигации... Ну, либо обходятся простейшим AStar на сетке...
>Многим играм не нужен поиск пути
Три в ряд? Сапер? Арканоид? Ну да, им не нужен, а чему-то посложнее уже нужен
Многим играм с врагами он не нужен, потому что у них есть - рейкасты, маршруты для патрулирования. Арена файты, вампир сурвайвалы где враги просто ломятся по прямой.
Ради смеха можно посмотреть, в каких релизнутых играх /gd есть пасфайндинг. Он даже в арчтавере не нужен, там судя по всему ломятся напрямую и скользят вдоль стен. Будет смешно если во всем гд он есть в каком нибудь халвере для анимации неигрового компаньона.
Не, хорошо конечно что его можно сделать, вот в моей игре мечты он играет большую роль в тактике, но вот в десятках игр что я делал много лет он реально не понадобился.
Короче, либо враги пролетают сквозь стены и это выглядит идиотски, либо стучаться в стену и тупят и это выглядит идиотски. В лучших традициях дагестан технолоджи и браузерок с я.игр.
дай угадаю, делал дерьмо на мобилки, чтобы поднять бабла?
>Три в ряд? Сапер? Арканоид?
>чему-то посложнее уже нужен
Stardew Valley:
- все NPC бродят по хардкоженным путям;
- если встать на пути, NPC проходят насквозь;
- если на пути объект - NPC его уничтожают;
- монстры в подземелье ходят взад-вперёд;
- мобильный порт: соплями приклеенный A★ (?).
>Крайне положительные (98% из 662,433)
Terraria:
- NPC ходят влево-вправо и редко прыгают;
- застревают в 99% случаев и не могут выйти;
- телепортируются, когда находятся за экраном;
- мобы используют ту же примитивную логику;
- мобы чаще летают ПОЗАДИ физической карты;
- у игрока вообще нет какого-либо поиска пути.
>Крайне положительные (97% из 1,071,055)
Вот две популярнейших игры без поиска пути.
Что ещё скажешь? Они не сложнее "три в ряд"?
Даже в серии GTA (3/VC/SA) пешеходы:
- едут по невидимым рельсам 99% времени;
- от "испуга" часто бегут в стену и застревают.
Машины там тоже тупо прут на таран 99% времени.
Т.е. в знаменитых ААА нет полноценной навигации.
>Три в ряд? Сапер? Арканоид?
>чему-то посложнее уже нужен
Stardew Valley:
- все NPC бродят по хардкоженным путям;
- если встать на пути, NPC проходят насквозь;
- если на пути объект - NPC его уничтожают;
- монстры в подземелье ходят взад-вперёд;
- мобильный порт: соплями приклеенный A★ (?).
>Крайне положительные (98% из 662,433)
Terraria:
- NPC ходят влево-вправо и редко прыгают;
- застревают в 99% случаев и не могут выйти;
- телепортируются, когда находятся за экраном;
- мобы используют ту же примитивную логику;
- мобы чаще летают ПОЗАДИ физической карты;
- у игрока вообще нет какого-либо поиска пути.
>Крайне положительные (97% из 1,071,055)
Вот две популярнейших игры без поиска пути.
Что ещё скажешь? Они не сложнее "три в ряд"?
Даже в серии GTA (3/VC/SA) пешеходы:
- едут по невидимым рельсам 99% времени;
- от "испуга" часто бегут в стену и застревают.
Машины там тоже тупо прут на таран 99% времени.
Т.е. в знаменитых ААА нет полноценной навигации.
https://www.youtube.com/watch?v=IO003UjrZEE
А у этого чувака boids на рейкастах и облетают препятствия на тайлмапе, что вполне может заменить навигацию.
https://www.youtube.com/watch?v=oFnIlNW_p10
Ох уж эти проблемы шарповиков
>равняться
Ты хотя бы успех GTA SA повтори...
В тему навигации. Вроде в прошлом году пробовал перепройти GTA SA и заметил очень забавный баг навигации противников. Ситуация: бандиты против игрока, нет ни машин, ни пешеходов - просто пустая дорога; убегаю от бандитов по середине дороги, и бандиты изначально тоже были на дороге... Но как только я от них отдалился, они перестроились на тротуар, преследуя по "рельсам" пешеходов. Даже несмотря на то, что могли бы быстрее догнать по прямой, ведь автомобилей вокруг не было.
Навмешем такое поведение не сделать. Во-первых, пешеходные дорожки - это точки/линии маршрута, независимые от общей проходимости ландшафта. Во-вторых, там явно какая-то логика, пытающаяся выбрать между бегом по прямой и линиям дорожек. Навмеш в такой же ситуации заставит NPC бежать строго по прямой, поперёк/посередине дороги...
Допустим, кто-то хочет повторить это в своей игре - естественно ему нужно начинать с постановки этой задачи ("пешеходы должны бегать по пешеходным дорожкам, избегая проезжей части, когда могут"), а не с использования встроенного в движок навмеша.
Кстати, в GTA 5 ИИ сильно деградировал, особенно у полицейских, по крайней мере, по отчётам игроков, и сравнивая в основном с GTA IV, где пытались всё реалистично сделать в т.ч. в плане ИИ у NPC. И по физике машин/регдол они тоже всё урезали. Так что равняться можно разве что в графическом плане.
Ещё вспомнилось, как мирные NPC в GTA 5 убегают от назойливого игрока. Если идти за пешеходом и сталкиваться с ним, он может напугаться и начать убегать... Вот только бежать он может только в двух направлениях и медленнее игрока. Если ты его вдруг обгоняешь - пешеход делает резкий разворот на 180°, убегая в противоположном направлении по той же дорожке... И так их можно крутить на одном месте бесконечно, пока случайно не упустишь из виду.
Т.е. даже в GTA 5 все пешеходы ходят по "рельсам" и особенного выбора пути у них нет. Да и зачем менять способ, который успешно работал в прошлых играх?
Алсо, касательно транспорта, тоже есть интересные наблюдения. Например, в GTA IV машины на мосту, пересекающим трамвайную линию, "пугаются" и внезапно пытаются объехать какое-то невидимое препятствие - на самом деле, они не различают проезжающий снизу трамвай от преград на мосту. Возможно, у них двухмерная навигация?
В GTA V машины оценивают препятствия простым рейкастом, из-за чего часто пытаются увернуться в неудачное время, виляя на соседнюю полосу и в результате создавая лишние ДТП с игроком. Игроки думали - это специально во вред игроку, но скорее всего, это лишь неудачная ошибка в логике NPC.
Также в GTA V на некоторых мостах можно поставить автобус по диагонали так, что проезжающие машины пытаются силой протиснуться и в итоге вылетают с моста на землю под мостом. Зачастую взрываясь. Т.е. навигация тут только даёт путь через мост, а машина протискивается чисто по физике, вообще не оценивая риск слететь куда-то вниз с моста (наличие опоры). Выжившие вообще игнорируют случившееся, тупо продолжая движение по ближайшей дороге...
В общем, скажу так - почаще наблюдайте за тем, что происходит в существующих играх, анализируйте их. Вкатившись в геймдев сложно смотреть на игры как простой игрок, не пытаясь докопаться до их работы.
Кто-то тут свою GTA на Godot делал, как успехи?
>Кто-то тут свою GTA на Godot делал, как успехи?
Я пока только интерфейс делаю, хочу чтобы много онлайновых игроков учитывало...
ОХУЕННО! СПАСИБО! ВПЕРВЫЕ НА ДВАЧЕ ПОМОГЛИ
>В GTA V машины оценивают препятствия простым рейкастом, из-за чего часто пытаются увернуться в неудачное время, виляя на соседнюю полосу и в результате создавая лишние ДТП с игроком. Игроки думали - это специально во вред игроку, но скорее всего, это лишь неудачная ошибка в логике NPC.
Давно не играл, но вроде в 3/VC так же было. Чуть заезжаешь на встречную полосу и нпс сворачивает как еблан будто я прям на таран иду
>все NPC бродят по хардкоженным путям;
Нет, они идут по нему только если на пути нет препятствий, если поставить на пути сундуки, но оставить хотя бы один возможный маршрут, то они пойдут по нему обходить сундуки до первой свободной точки в их первоначальном маршруте. но да, это добавили только с обновлениями
>если на пути объект - NPC его уничтожают;
Только если объект никак нельзя обойти или он мешает событию
>монстры в подземелье ходят взад-вперёд;
Монстры, если увидят игрока, бегут за них. Скелеты или мумии, например. И они не сносят руду/ящики/т.д, а идут по пути к игроку
>Terraria
Это игра с видом сбоку. Туда впендюрить поиск пути даже в голову человеку не придет, так как никакого сложного пути для моба нет и не может быть. Он либо идет в сторону игрока, либо перепрыгивает препятствие.
>Даже в серии GTA (3/VC/SA) пешеходы
Не играл в эти игры лет 15, но в других 3д играх тех лет нпс ищут путь, чтобы, как минимум, обойти игрока или подойти к нему.
>Это игра с видом сбоку. Туда впендюрить поиск пути даже в голову человеку не придет
На годоте давно сделан пасфайндинг для платформера.
https://snoringcatgames.github.io/exampler/addons/squirrel_away/dist/index.html
https://github.com/SnoringCatGames/surfacer
Утка здорового человека
Работает.
Как вы находите время заниматься godot? Последний месяц максимум, что могу себе позволить - это 3/4 часа в воскресенье и 2-3 часа в течение рабочей недели.
В остальное время либо занимаюсь делами, либо сплю. Сеймы есть?
Просто хочу поныть. К концу ноября должно стать полегче
Времени хотя бы начать что-то делать нет. Успел только установить Годот. Работа, приготовить поесть, поесть, сделать домашние дела, чуть-чуть поиграть - всё, времени не остаётся, можно только заменить "поиграть" на "пытаться начать делать игру", но я вспоминаю, что никогда не пограммировал (sql не погроммирование, а wordle, написанный на пайтоне, не считается) и падаю в обморок. Читаю треды в /gd/ и мечтаю, рисую в голове механики игры.
А ты чекал спайн? В спайне риг, анимация просто какой-то лютый кайф. Автосоздание меша и т.д
Ускоряет очень люто, убирая лишний дроч с ригом.
Драгонбонес как-то еще более криво кстати работает с годот, более костыльный что ли, он вообще не поддерживается ласт года.
Готовь сразу на неделю, замораживай или раскладывай в банки или пластиковые ланчбоксы, ставь в холодильник с низкой температурой, не выше 5 градусов.
Поел — пустую тару обратно в холодильник, чтобы не воняло в раковине.
Раз в неделю выделяй один день на мытьё и приготовление еды на следующую неделю.
Как минимум два часа сэкономишь.
Ещё забыл сказать - ссы и сри в ведро, раз в неделю выноси.
С последним пунктом я уже справился.
пн-пт
10:00 - подъем и сразу за работу
10:00 - 19:00 - Работа (из дома). Также где-то в этом промежутке завтракаю и небольшой перекус днем, т.к. на обед нет времени. Параллельно стажируюсь. Свободен только тогда. когда отхожу с утра посрать на 5 минут.
19:00 - 21:00 - выполняю задания по стажировке.
После делаю дела по дому, готовлю поесть, ужинаю.
Соответственно "освобождаюсь" часам к 23:00 в лучшем случае, когда уже мозг тупа не работает, глаза больше не могут смотреть в экран, запястья болят от туннельного синдрома, а поясница отваливается.
В таком состоянии заниматься godot просто не хочется.
А если стажировка затягивается, то закончить вообще могу только к часу ночи.
Потом сон и все
осуждаем такое
Ну давай отдадим час на посрать/пожрать/умыться. То есть ты беспрерывно работаешь 8 часов? Это же ебануться можно. Нахуй такая работа нужна?
> собираюсь уволиться
Я так уволился в 2017ом, и нихуя не поменялось. Сижу, двачи скроллю. Желаю тебе не попасть в ловушку прокрастинации.
> >удобно ваще закинуть скрипт в корень
> Можешь нормально объяснить - чем удобнее?
Идеальное место для шины сигналов, ИМХО. ИМХО!
> get_tree() - это глобальный доступ, т.е. опасный.
Поэтому глобально-опасные вещи должно делать само tree в своём инжектированном скрипте. И ты как кодер всегда знаешь, где у тебя собраны все самые опасные штуки. В твоей игре слишком много вызовов get_tree() ? - Пришло время задуматься об инжекте туда скрипта.
> Root нода недоступна из редактора.
Доступно как поле tree-объекта. Доступно как get_node("/root") но есть нюанс, рутноду можно переименовать. Зачем? Чтобы никто не догадался! И тогда он будет доступен как get_node("/_your_branded_root_node_name_")
Таким образом у нас есть аж два места для хранения всяких глобально-опасных штук. Два естественных синглтона, которые никак не уберёшь, и которые не надо создавать.
Алсо, у scenetree есть колбэк, обрабатывающийся в начале каждого фрейма. Там тоже можно кое чего интересного сообразить.
https://docs.godotengine.org/ru/4.x/classes/class_mainloop.html#class-mainloop-private-method-process
https://docs.godotengine.org/ru/3.x/classes/class_mainloop.html#class-mainloop-method-idle
И ещё. Инжект скрипта в майнлуп - это первый шаг на пути к созданию своего майнлупа. Зачем? А вот хочу!
>покупает огромный монитор
>работает в скукоженном окошке на 1/2 площади
Это типичное поведение или личное предпочтение?
>должно делать само tree
Как? Нет, конечно, я понимаю - при желании можно полностью всю игру в одном .gd файле разработать, движок это позволяет. Но зачем? Чем больше кода собирается в одном месте, тем сложнее становится переиспользовать его, вносить какие-то изменения. Поэтому разные люди придумали в разное время:
- процедуры/функции/методы;
- юниты/модули/библиотеки;
- структуры/объекты/классы.
И прочее подобное. Чтобы РАЗДЕЛЯТЬ независимые сущности по разным местам, чтоб упростить с ними взаимодействие. И Godot следует той же самой идее, предлагая ноды, ресурсы, сцены и всё остальное.
Но, чтобы это всё тебе хоть как-то помогало, нужно придерживаться некоторых правил... На мой взгляд, самое важное - "не складывать всё в одном месте".
Чем плох глобальный доступ? Ты складываешь в единственном месте всё, что можно было поделить.
Чем плох "божественный объект"? Ты складываешь в единственный объект всё, что можно было поделить.
Чем плоха та же "шина сигналов"? Ты складываешь в объект этой "шины" всё, что можно было поделить.
И так далее, для любой свалки "всего".
Т.е. проблема всегда одна - у тебя есть инструменты разделения кода, данных, ресурсов и т.п. по чётким группам, а ты вместо этого валишь всё в кучу... Т.к. использование инструментов кажется тяжёлым, это сваливание в кучу привлекает, но инструменты эти возникли как раз потому, что сваливание в кучу не практично в долгосрочной перспективе. Конечно, на маленькие проекты (неделя-две) это всё не влияет.
>В твоей игре слишком много вызовов get_tree() ? - Пришло время задуматься об инжекте туда скрипта.
У меня нет обращений к get_tree() кроме того, что необходимо для паузы и выхода из игры - но они происходят из определённых мест, близко к корню дерева сцены. Ибо нет необходимости напрямую обращаться к объекту, который расположен ниже на десяток или даже больше слоёв абстракции. Это приблизительно как если пытаться сознательно манипулировать мышечными клетками кишок - организм вместо этого имеет десяток абстракций, избавляя тебя от полностью сознательных вызовов кишки.мышца[999].клетка[999999].сократить(сила).
Рассматривай дерево сцены как слои абстракции. Нормально обращаться к корню из ноды, которая является корнем main scene, но если ты пытаешься обращаться к корню сцены из "листьев", сидящих на длинной ветке в несколько нод - ты явно нарушаешь созданные тобой слои абстракции. Вместо попыток перенести код в корень, нужно понять причину, по которой ты пытаешься нарушить порядок слоёв.
>аж два места для хранения
Просто не создавай эти глобальные штуки... Как минимум, без крайней необходимости. При желании можно и микроскопом себе руку в кровавое месиво превратить - это не значит, что нужно микроскопы из мягкого материала делать. Godot даёт тебе набор инструментов, а правила безопасного обращения ты должен понимать сам из других источников/опыта.
Конечно, лучше бы документация Godot заранее предупреждала о потенциальных проблемах. Вроде, частично добавили предупреждений, но не везде.
>у scenetree есть колбэк
Это то же самое, что колбэки каждой ноды. Плюс их вызов зависит от структуры дерева (пока это дерево работает в одном потоке; многопоточность, конечно, нарушит порядок выполнения этих колбэков).
>созданию своего майнлупа. Зачем? А вот хочу!
Да ты можешь хоть свой движок на x86 ассемблере изобретать с нуля, если хочешь. Зачем это открыто навязывать тем, кто хочет сделать игру на Godot? Понятно, что возможность есть, об этом напрямую документация говорит. Но не понятно, зачем это использовать - и к чему это может привести...
>должно делать само tree
Как? Нет, конечно, я понимаю - при желании можно полностью всю игру в одном .gd файле разработать, движок это позволяет. Но зачем? Чем больше кода собирается в одном месте, тем сложнее становится переиспользовать его, вносить какие-то изменения. Поэтому разные люди придумали в разное время:
- процедуры/функции/методы;
- юниты/модули/библиотеки;
- структуры/объекты/классы.
И прочее подобное. Чтобы РАЗДЕЛЯТЬ независимые сущности по разным местам, чтоб упростить с ними взаимодействие. И Godot следует той же самой идее, предлагая ноды, ресурсы, сцены и всё остальное.
Но, чтобы это всё тебе хоть как-то помогало, нужно придерживаться некоторых правил... На мой взгляд, самое важное - "не складывать всё в одном месте".
Чем плох глобальный доступ? Ты складываешь в единственном месте всё, что можно было поделить.
Чем плох "божественный объект"? Ты складываешь в единственный объект всё, что можно было поделить.
Чем плоха та же "шина сигналов"? Ты складываешь в объект этой "шины" всё, что можно было поделить.
И так далее, для любой свалки "всего".
Т.е. проблема всегда одна - у тебя есть инструменты разделения кода, данных, ресурсов и т.п. по чётким группам, а ты вместо этого валишь всё в кучу... Т.к. использование инструментов кажется тяжёлым, это сваливание в кучу привлекает, но инструменты эти возникли как раз потому, что сваливание в кучу не практично в долгосрочной перспективе. Конечно, на маленькие проекты (неделя-две) это всё не влияет.
>В твоей игре слишком много вызовов get_tree() ? - Пришло время задуматься об инжекте туда скрипта.
У меня нет обращений к get_tree() кроме того, что необходимо для паузы и выхода из игры - но они происходят из определённых мест, близко к корню дерева сцены. Ибо нет необходимости напрямую обращаться к объекту, который расположен ниже на десяток или даже больше слоёв абстракции. Это приблизительно как если пытаться сознательно манипулировать мышечными клетками кишок - организм вместо этого имеет десяток абстракций, избавляя тебя от полностью сознательных вызовов кишки.мышца[999].клетка[999999].сократить(сила).
Рассматривай дерево сцены как слои абстракции. Нормально обращаться к корню из ноды, которая является корнем main scene, но если ты пытаешься обращаться к корню сцены из "листьев", сидящих на длинной ветке в несколько нод - ты явно нарушаешь созданные тобой слои абстракции. Вместо попыток перенести код в корень, нужно понять причину, по которой ты пытаешься нарушить порядок слоёв.
>аж два места для хранения
Просто не создавай эти глобальные штуки... Как минимум, без крайней необходимости. При желании можно и микроскопом себе руку в кровавое месиво превратить - это не значит, что нужно микроскопы из мягкого материала делать. Godot даёт тебе набор инструментов, а правила безопасного обращения ты должен понимать сам из других источников/опыта.
Конечно, лучше бы документация Godot заранее предупреждала о потенциальных проблемах. Вроде, частично добавили предупреждений, но не везде.
>у scenetree есть колбэк
Это то же самое, что колбэки каждой ноды. Плюс их вызов зависит от структуры дерева (пока это дерево работает в одном потоке; многопоточность, конечно, нарушит порядок выполнения этих колбэков).
>созданию своего майнлупа. Зачем? А вот хочу!
Да ты можешь хоть свой движок на x86 ассемблере изобретать с нуля, если хочешь. Зачем это открыто навязывать тем, кто хочет сделать игру на Godot? Понятно, что возможность есть, об этом напрямую документация говорит. Но не понятно, зачем это использовать - и к чему это может привести...
Чё не так?
У него чистое окно кода, как будто на 24 дуймовом мониторе.
И еще по бокам доп окна редактора в большом размере.
Такие здоровые мониторы покупают не для того что бы потом огромный шрифт читать и вертеть головой на 360.
А вместо 3 - 4 обычных, которые к тому же крепить куда-то надо.
Дело в том, что сидя так близко, ничего по бокам видно и не будет - шея отвалиться башкой вертеть. А так он его может как телевизор использовать, сидя на диване издалека.
Я у себя еще вдохновляющий арт с локациями или пиксельартом на обои кручу - вот тут у него косяк, всего 3 картинки в цикле.
>>4567
Там двухметровый молодой пацан с отличным здоровьем, хорошей внешностью и бешеной трудоспособностью в своём собственном доме недалеко от центра города (см. первое видео) где-то в Вирджинии, США - его за 14-дюймовый монитор посади, всё равно будет работать. Пропитому скуфу который живёт в кладовке родительской хрущёвки ничего уже не поможет...
Для конкретики - допустим, эмулятор NES/Famicom, на некропеку, на некроведро, в веб версию
>cycle accurate эмулятор
Ты бы хоть вот эту ссылку приложил:
https://retrocomputing.stackexchange.com/questions/1191
Что-то простое потянет, но зачем? троллейбус.jpg
>>4602
>эмулятор NES/Famicom
>Ricoh 2A03 @ 1.79 MHz
>Ricoh 2A07 @ 1.66 MHz
Условно, тебе нужно эмулировать как минимум 2 миллиона инструкций на процессоре, способном выполнять 3 миллиарда инструкций в секунду. Это означает, у тебя в запасе около 1000 инструкций. Я предполагаю, что интерпретатор GDScript в среднем затрачивает меньше 1000 инструкций, но результат зависит от того, что нужно сделать на GDScript для эмуляции одной инструкции целевого процессора. Дополнительно учитывай что у нас тут 64-битные переменные для всего, и код бегает по RAM...
Также, инструкция/цикл - не фиксированное число. Некоторые инструкции выполняются за цикл, другие требуют несколько циклов процессора. И разница в архитектурах (x86/ARM) очень большая, поэтому у мобильных процессоров всё сильно по-другому.
>некропеку
>некроведро
>в веб версию
Это всё слишком абстрактные понятия.
Мне кажется, в эмуляции самое сложное - раздобыть описание старого железа и разобраться в нём. Т.е. ты можешь написать proof of concept на GDScript, потом переписать на C/C++ для скорости. Главное тут - это понимать, что ты там вообще эмулировать собрался.
Или ты хочешь новый процессор придумать?
>>
984577
Сумашедший, пьняый, боты ?
Блять что это за objet прибежало?
>Ты бы хоть вот эту ссылку приложил:
Ну если на пальцах, то это не просто эмулятор, который выполняет инструкции по тактам, но еще и разделяет сами инструкции на несколько тактов, и там учитывает что значение в памяти или на экране может поменяться в процессе инструкции. Так что наверное оверхед раза в 2-3.
> интерпретатор GDScript в среднем затрачивает меньше 1000 инструкций,
Да это здравый рассчет, скорее всего 1000 это очень мало времени.
>Это всё слишком абстрактные понятия.
Ну хз, что-то не топовое. Для компа наверное что-то 10 летней давности, для мобилок что-то типа флагмана 6 летней давности или современного ультрабюджетника, что там, G30 проц. Веб версия всегда в разы медленнее это я уже усвоил.
>в эмуляции самое сложное - раздобыть описание старого железа и разобраться в нём
Это все есть навалом в принципе и на форумах и в репозиториях детально описано.
>Т.е. ты можешь написать proof of concept на GDScript, потом переписать на C/C++ для скорости
Ну вот тут вопрос получается в том, что может быть просто не тратить время и сразу писать на C++, но это конечно минус, потому что требует пересборки движка, а это лишний барьер для других - все такие проекты получают меньше распространенность. Я и сам часто скипаю если аддон на с++ или с# или там форк какой то с модулями.
> но зачем?
Ну тут 2 направления можно сделать, либо объединенный эмуль, потому что сейчас на каждый ретрокомп десятки разных эмулей причем устаревших, часто Вин или Лин-онли и так далее. Второй вариант - IDE. В принципе я нашел 2 челиков которые что-то в таком направлении делают но у них зачаточное состояние. У одного не запустилось, у другого получилось 10 фпс на i7-12650H что значит 30-60 фпс на некропеке точно не будет.
>объединенный эмуль
Не изобретай велосипед, всё давно есть:
https://github.com/Swordfish90/Lemuroid
Работает за счёт множества разных эмулей.
Лично я во много разных игр с него поиграл.
>Второй вариант - IDE.
Зачем делать игры под NES на Godot?
Лучше проблемы с базовым Godot реши...
>требует пересборки движка
Можно же готовые .DLL/.SO закидывать.
Для Android, вроде, нужно билдить с Gradle.
>Не изобретай велосипед, всё давно ест
И где у него дестоп и веб версия?
И еще нюанс - GPL. Я конечно фанат Столмана, но для коммерческой разработки MIT/BSD уже привычнее
>Зачем делать игры под NES на Godot?
Потому что на годоте удобно делать тулзы и гуй, а в удобных инстроументах удобно делать продвинутые игры для старого железа. Опять же потому что существующие тузлы зачастую устарели, какой нибудь win32 мамонт который даже темную тему не поддерживает.
А еще можно сделать - тудумс - компилятор из гдскрипта. Есть же компиляторы для 2600 из бейсика под их "движок-конструктор".
>Можно же готовые .DLL/.SO закидывать
Хм, через GDExtension/GDNative, надо подумать. По идее Github Action будет все собирать.
>коммерческой разработки
Ты упоролся, коммерческий эмулятор делать?
Погугли дела на разработчиков эмулятора Switch.
>удобно делать тулзы и гуй
Подключи эмулятор к Godot, если очень надо.
>компилятор из гдскрипта
Скорее/лучше это будет транспилятор...
https://en.wikipedia.org/wiki/Source-to-source_compiler
>Ты упоролся, коммерческий эмулятор делать?
Ну вообще то я по работе делал несколько раз. Это вопрос прав, например можно его продать нужным людям. А можно просто собирать донаты к примеру. Не знаю че там у свича, но в ретро эмуляторах обычно саму эмуляцию (схемотехнику) давно никто не охраняет, ромы биоса охраняют но в целом всем тоже похуй, а еще есть варианты. внезапно, опенсорс биосов, вот эти ребята меня вообще впечатлили, переписать 8-16кб ассемблера с нуля по спекам. А свищ это современное, он вроде продается в наши дни.
>Подключи эмулятор к Godot, если очень надо.
Ну это скучно, да и контроля меньше. Например если отладчик делать.
>корее/лучше это будет транспилятор...
Смотря как делать, конечно, потому что часто я вижу что после конвертации в ассемблер/машкод еще делают piphole микрооптимизации, не как настоящая оптимизация когда может целый алгоритм переписать другими вещами, а просто шаблонные последовательности инструкций на более экономные.
>GTA V
>почаще наблюдайте за тем, что происходит в существующих играх
Вместо того чтобы пойти и посмотреть в исходники GTA5 https://archive.org/details/gta-v-source-code_202312, мы все должны запустить игру и наблюдать за тем чем занимаются нпк, делая заметки в блокнотик если заметим что-то странное.
Там исходные коды GTA5 которые давно украли и выложили в сеть. Их даже можно скомпилировать в рабочую игру. При чем тут вообще гдскрипт, и почему говноисходники?
>посмотреть в исходники GTA5
1. Это нелегально, ты преступник даже если просто посмотришь в эти исходники, ещё до компиляции. Естественно, о копировании можешь забыть...
2. В чужих исходниках всегда сложно разобраться.
3. Даже если разберёшься - геймдизайн по кодам прочитать нереально, его нужно ЧУВСТВОВАТЬ. Вот именно поэтому геймдизайнеры делают прототипы, самостоятельно играют в них и оценивают идеи в непосредственном опыте игры. Бестолку смотреть в исходные коды, если ты не играешь в саму игру.
>должны запустить игру и наблюдать
Ты же в чужие игры играешь? Или ты из числа тех эффективных менеджеров, которые ни разу в жизни не играли в "эти детские игрушки", но при этом гордо называют себя разработчиками игр? Настоящий геймдизайнер должен иметь богатый опыт игры. И главное в этом опыте - быть наблюдательным, а не потреблять в полусонном состоянии с дивана.
>делая заметки в блокнотик
Ты в любом случае должен вести документацию по собственному проекту/проектам. Будет полезным документировать свои наблюдения из чужих игр - например, чтоб ссылаться на них в своём диздоке.
>>4642
>почему говноисходники?
Не знаю, о чём говорит тот анон, однако Рокстар уже неоднократно обвиняли в кривом, дырявом и очень костыльном коде GTA. Они явно забили болт на код, фокусируясь только на добавлении контента - типа дополнительных машинок, одежды, миссий и т.п.
Т.е. не стоит брать GTA V как пример хорошего кода. Однако, геймдизайну у неё вполне можно поучиться - удовлетворить столько людей сразу нужно суметь. И несмотря на критику, они всё же учли ошибки GTA IV.
А какие есть примеры хорошего кода в играх, кроме игр Кармака? Рогалики еще навернеое пишут чисто.
Пришлось костыли подставлять.
> modes.about_to_popup.connect(func(): modes.position.x = new_game.position.x + new_game.size.x)
Снова.
Ёбаная жизнь. Опенсорсная.
С такой детальной информацией, проще всего не полагаться на всякие попапы, а просто сделать отдельную сцену под это, и показывать/скрывать/двигать как обычную подсцену.
Я больше не про подробную инфу, а про всплывающее окно при наведении на некоторые ссылки в тексте где бы они ни были, которое тоже может порождать всплывающие окна. Плюс где-то хранить инфу о том, что нужно выводить для меча или орка
Всплывающие окна над всплывающими окнами - это вообще так себе идея. Лучше как в редакторе годота панель инспектора.
Ну а по твоему вопросу - готового не попадалось. Ты имеешь в виду какой-то аддон по типу инвентаря? В принципе это MVC или MVVC паттерн. У тебя где-то есть сами данные в игре, типа сколько урона у меча. Может быть json, может еще что-то. И надо сделать какое-то кастомное отображение этого. Вообще, тут два подхода может быть. Или каждый объект хранит свое описание и просто возвращает его фнукцией типа get_description_text(). Или наоборот какой-то конструктор собирает строчки и перебирая все объекты сам знает какую инфу о каких типах объектов писат, и берет уже только значения урона у объекта и т.д
Самый прямолинейный способ это какой нибудь шаблонизатор, когда строчки вида "This {objname} deals {dmg} damage" и потом применять к ним string.format или регексы.
Не было отдельного треда, помню, что это было в движкосраче, а вот когда - уже сложный вопрос
>Всплывающие окна над всплывающими окнами - это вообще так себе идея.
Ты только что интерфейс двача
Ну не знаю как панель инспектора отработает мой желаемый сценарий
Я навожу курсок на лог, в котором
Витя бьёт вас и наносит 4 огненного урона
Я навожу курсор на Витя
Витя это орк, он снаряжен мечом, одеждой
Я навожу на орк
Орк - раса славящаяся своей силой и агрессией
Я навожу на раса
Все существа принадлежат той или иной расе. Она влияет на характеристики и особенности существ.
Я навожу на существа или существ
Существа - игровые объекты, имеющие возможность совершать действия и обладающие душой
Я навожу на объекты
Объекты это объекты, заебал
>Я навожу на орк
И промахнувшись все закрывается или открывается что-то другое, и все надо начинать сначала.
В любом случае, в чем вопрос? В годоте есть как встроенный механизм через _make_custom_tooltip так и свое можно накостылять через всякие mouse events
>>4784
Это кое-как работает только потому, что ты наводишь на самую первую или самую последнюю ссылку. Когда их несколько, или ссылки в середине поста, тогда и начинается веселье.
>в чем вопрос?
На первую половину ответ видимо _make_custom_tooltip, но остаётся вопрос как сделать текст, у некоторых слов которого это окошко откроется.
В RichTextLabel есть какой-то функционал meta. С сигналом по наведению мыши или клику. Я им не пользовался и насколько он хорош не знаю.
https://stackoverflow.com/questions/77208994/is-there-a-way-to-detect-mouseover-over-specific-words-in-richtextlabel-or-any
Как вариант можно навасянить через FlowConatiner, разбивая части предложений на отдельные Label - и уже обрабатывать mouse entered над ней.
Вспомнил еще "замечательное" свойство Mouse over - его нечем сделать на мобилке, там нет мыши.
> В RichTextLabel есть какой-то функционал meta. С сигналом по наведению мыши или клику. Я им не пользовался и насколько он хорош не знаю.
В версии 3.0.6 он был хорош, я на его основе делал диалоговую систему с кликабельными ключевыми словами, и участвовал в ТВГ, и занял второе место, с конца.
Я ковырял разные варианты, сам за Spine, но пока на демку не выйдем, будем довольствоваться тем что есть из бесплатного. Доки подготовили, геймплей расписали, код написал, блять с художниками беда, хрен найдешь. Понятно что на энутзиазме мало кто хочет, но че поделать будем ковыряться. Я и так на проекте и код пишу и арты для девок генерю(генерил, научил как пользоваться SD в облаке, сейчас другие генерят, но вяло и медленно), вот уже DragonBones анимацию изучил, получается. Короче если художника и UIщика не найдем, пилить будем долго.
Пизда жиза анончик, тоже кодер и весь арт в стейбле сделал, плюс сам анимирую. Но честно говоря, спустя полтора года тыканья в арт, я теперь не боюсь и ручками сам что-то порисовать, сделать. Раньше думал, мол ай баля найму в будущем художников, будут допиливать арт. В итоге у меня есть графический планшет, рука поставлена и рисовать. В итоге смотрю туториалы рисовак чтоб закрывать нейрокосяки ручками. Никогда не думал что я стану чета рисовать и изучать рисование.
>SD в облаке
Тоже так делал, пока полтора года назад не купил видяху под эти дела. Мы в проекте вдвоем работает, другу расшариваю нейронку через градио, он генерит удалено на моем компике.
>DragonBones
Как же там душно реализован риг, что пиздось, я в итоге в блендер сбегал пока не плюнули и не купили спайн. Но я и до этого блендер хорошо знал.
>UIщика
Кста, одна из самых душных тем
Но я выкрутился тем, что по факту спиздил концепт интерфейса из вувы и гашни, где он довольно минималистичный с абстракциями и партиклами.
>Пилить будем долго
Мы уже почти прошли через весь ад и выкакаем скоро 0.1(лол), пайплайн настроен, так что с кайфом все идет, всю попоболь прошли. Но даже чтоб 0.1 высрать надо какое-то ебанутое количество усилий потратить
>Никогда не думал что я стану чета рисовать и изучать рисование.
Та же фигня. Уже и рисовать начал и UI пробую с китайских дрочилен в pinterest стырить.
>SD
Что посоветуешь, есть смысл controlnet изучать? Говорят он лучше для контроля генерации.
>Мы уже почти прошли через весь ад и выкакаем скоро
Удачи анончик, чтоб все сраслось!
>Субменю второго уровня сбивается
ИМХО, хороший UI/UX требует избегать создания субменю второго уровня. Представь себя на месте пользователя - навёл мышь на одну кнопку, навёл на вторую кнопку, навёл на третью... А, нет, не навёл, а промахнулся, теперь нужно начинать всё сначала. Поэтому нужно избегать субменю в целом, тем более многоуровневых, даже если у тебя сложная утилита.
А в играх такие меню лучше вообще не делать.
Как уже сказали выше - это всё не очень удобно для пользователя, если у тебя окошки исчезают сами. Но ничего принципиально сложного в таком UI нет.
Тебе нужен RichTextLabel и теги [url=строка], либо специальный метод push_meta(), а потом смотри:
https://docs.godotengine.org/en/stable/classes/class_richtextlabel.html#class-richtextlabel-signal-meta-clicked
Ты можешь показывать сжатую информацию по meta_hover_started, скрывая по meta_hover_ended, и открывая подробное окошко по meta_clicked. Все эти события возвращают то, что ты [url=написал здесь], либо объект, который ты отправил push_meta(сюда).
Чтобы упростить себе жизнь, делаешь систему с универсальными методами наподобие таких:
>get_brief_information(what: String) -> String:
>get_full_description(what: String) -> String:
Которая сочиняет текст для RichTextLabel со всеми необходимыми тегами, включая [url=what]. Тогда обработчики meta_ можно сделать примерно так:
>func _on_meta_hover_started(meta):
>_ brief_info.popup(get_brief_information(meta))
>func _on_meta_hover_ended(_meta):
>_ brief_info.hide()
>func _on_meta_click(meta):
>_ var w := create_window(get_full_description(meta))
>_ get_parent().add_child(w) # или куда тебе надо
Здесь create_window использует сцену-шаблон, что полностью самостоятельна; принимая любой текст, заключает его в RichTextLabel. Собственно этот код находится внутри какого-то компонента это сцены (скорее всего, удобнее сделать его наследником RichTextLabel, чтобы вставлять в любом месте UI), создавая своего рода рекурсию. Тогда ты можешь открывать любое количество окон на любую тему.
Ну а brief_info - всегда существующее окно, которое временно отображает короткую информацию. Может быть, создаёт окно с подробной информацией, если пользователь успел на него кликнуть?.. Много чего можно придумать, но нужно тестировать эти идеи.
>открыть issue на гитхабе
https://github.com/godotengine/godot/issues/73285
>>4882
>они не оправдывают баг
Я не оправдываю баг, баг есть баг.
Но ты что-то перемудрил в своём UI, если требуется субменю второго уровня. Это всегда неудобно. Ты б вместо жалоб на Godot лучше пересмотрел свой UI.
Алсо, могу предположить, что этот баг до сих пор не пофиксили, потому что никому в голову не приходит стакать попап меню дальше первого субменю. В том смысле, что это не критическая проблема для UI, тем более в контексте игрового движка.
>UI пробую
Главное сделай внимаемый уровень, не прыгай выше головы. Подбери хороший шрифты и разных текстур любопытных, аля сердечок, полосочек, пиктограмм и т.д
>controlnet изучать
А без этого невозможно будет добиться чего-то адекватного от нейронки. Да там и изучать нечего честно говоря. Я вообще методом тыка нашел более оптимальные варианты использования. Алсо, контролнет tile самый важный на самом деле, он дает возможность сохранить цвета, дык еще и пропорции лучше сохраняет. У нас пайплайн заключается в скетчинге и прогонке через контролнет тайл, а дальше убирание нейрокосяков, В итоге цвет можно контролировать и анатомию на этапе скетчинга.А еще стиль меняет, потому что этот стиль, чтобы не было джинириками, сам стиль намиксован только под 1.5, его не повторить на след моделях, только обучать лору если(в будущем так и сделаем), ну а скетчем на SDXL, сперва была пони, теперь на нуб переходим.
>Удачи анончик, чтоб все срослось!
Спасибо, у тебя тоже все получится.
Могу бесконечно об этом говорить честно говоря.
Пикрейлет литерили мем нарисуйте круг, а теперь сову
На пиках некоторые этапы пропущен, 3 и 4 пик чисто тесты
И еще не в тему, но нахуя они в 4.3 тайлмапу кишки выпустили, я сначала даже не вкурил как на другой слой переключиться.
>>4863
>сейчас другие генерят, но вяло и медленно
Лол, в чём смысл? Сам кнопку нажать не можешь?
>если художника не найдем, пилить будем долго
Лол x2, рисование - самое долгое и затратное.
>UIщика
>>4869
>одна из самых душных тем
>спиздил концепт интерфейса
Что вам двоим мешает юзать Control ноды Godot? Разработка ГУЯ - самое тривиальное в геймдеве. Абсолютно любая веб-макака справится за вечер.
>Но даже чтоб 0.1 высрать надо какое-то ебанутое количество усилий потратить
Лол x3, вот, просто посмотрите на эту Godot-игру:
https://coolnsfwgames.itch.io/pau-your-virtual-pet
Графониум - полный улёт, я б даже купил такое.
Геймплей - 99% кода в простейших мини-играх.
ГУЙ - ну тип нашлёпал кнопок, лол, чё вам надо?
Анимации 100% сделаны в Godot - ваще ништяк!
Коментов дохрена, народ просит обновлений.
Я лично подрочил и буду ждать обновлений.
Почему Ерохин может так, а вы жопу рвёте для 0.1? Серьёзно, потом будете писать плаксивую статью:
>Как смлить джва года жисни в расрампотку имгры с помосью мнямронок и абаслаца с ремлисом 0.0.1
Пока вы чистите вилкой нейроарт, Ероха релизит 1.0, собирая вокруг себя аудиторию из текущих тянучек, кунчиков и даже тех, кто ещё не определился...
>>4863
>сейчас другие генерят, но вяло и медленно
Лол, в чём смысл? Сам кнопку нажать не можешь?
>если художника не найдем, пилить будем долго
Лол x2, рисование - самое долгое и затратное.
>UIщика
>>4869
>одна из самых душных тем
>спиздил концепт интерфейса
Что вам двоим мешает юзать Control ноды Godot? Разработка ГУЯ - самое тривиальное в геймдеве. Абсолютно любая веб-макака справится за вечер.
>Но даже чтоб 0.1 высрать надо какое-то ебанутое количество усилий потратить
Лол x3, вот, просто посмотрите на эту Godot-игру:
https://coolnsfwgames.itch.io/pau-your-virtual-pet
Графониум - полный улёт, я б даже купил такое.
Геймплей - 99% кода в простейших мини-играх.
ГУЙ - ну тип нашлёпал кнопок, лол, чё вам надо?
Анимации 100% сделаны в Godot - ваще ништяк!
Коментов дохрена, народ просит обновлений.
Я лично подрочил и буду ждать обновлений.
Почему Ерохин может так, а вы жопу рвёте для 0.1? Серьёзно, потом будете писать плаксивую статью:
>Как смлить джва года жисни в расрампотку имгры с помосью мнямронок и абаслаца с ремлисом 0.0.1
Пока вы чистите вилкой нейроарт, Ероха релизит 1.0, собирая вокруг себя аудиторию из текущих тянучек, кунчиков и даже тех, кто ещё не определился...
>мешает юзать Control ноды Godot
Вопрос же не в тех. аспекте, а в визуальном
Мне такое не нравится от слова совем.
Это не моя игра мечты, очевидно же.
>Графониум - полный улёт, я б даже купил такое.
Выглядит не дрочибельно вообще.
>ГУЙ - ну тип нашлёпал кнопок, лол, чё вам надо?
Все так, но не отменяет того, что у графон хуже игр 2000 года.
>Анимации 100% сделаны в Godot - ваще ништяк!
Там даже анимаций нет как таковой, статичные спрайты, которые просто меняются. У него даже тити не трясутся когда гладишь. Анимация в 2 фпса, аж больно глазам.
>Коментов дохрена, народ просит обновлений.
Да честно говоря на любой контент найдется спрос
>Я лично подрочил и буду ждать обновлений.
Вообще не дрочибельно.
>Ероха релизит
щито поделать, мы не ерохи, мы сидим на дващах тащемта
>нахуя они в 4.3 тайлмапу кишки выпустили
https://godotengine.org/releases/4.3/#highlights-new-tilemaplayer-node
>Layers have become more flexible
>Before this release, if you wanted to add layers to your TileMap, you had to add them in the inspector. We simplified this by creating a new TileMapLayer node to replace the old approach completely.
>Aside from being more intuitive to use, this is now more in line with Godot Engine's design philosophy in general.
>For your convenience, you can convert your existing TileMap nodes into TileMapLayer nodes with one click directly in the editor. The deprecated node type is still supported for the time being, if you prefer.
>Может пояснит мне кто, какое блять практическое предназначение у серых полос в фуллскрине.
https://docs.godotengine.org/en/stable/tutorials/rendering/multiple_resolutions.html
>Games should use the Exclusive Fullscreen window mode, as opposed to Fullscreen which is designed to prevent Windows from automatically treating the window as if it was exclusive fullscreen.
>Fullscreen is meant to be used by GUI applications that want to use per-pixel transparency without a risk of having it disabled by the OS. It achieves this by leaving a 1-pixel line at the bottom of the screen. By contrast, Exclusive Fullscreen uses the actual screen size and allows Windows to reduce jitter and input lag for fullscreen games.
>When using integer scaling, this is particularly important as the 1-pixel height reduction from the Fullscreen mode can cause integer scaling to use a smaller scale factor than expected.
>фпс лочится на 30 и пока не свернуть и развернуть игру, лок не пропадет. Сил уже сука нет. О локе в 30 фпс я и раньше писал итт, попытался отследить из за чего это происходит, не смог, гуглил, тоже нихуя.
Попробуй переустановить драйверы для GPU.
>Это не моя игра мечты, очевидно же.
Ты ж порно-"slop" делаешь, о какой "мечте" речь?
>Там даже анимаций нет как таковой
У него такие же анимации как у тебя (в сексе). Да, выполнены грубовато, но для версии 0.1 сойдёт. Наверняка делал торопясь, не зацикливаясь. Тут аудитория важнее, чем наличие трясущихся сисек.
>на любой контент найдется спрос
Тогда зачем так сильно париться ради 0.1 версии? Вываливаешь самосвал контента, на него слетается целевая аудитория и ты еженедельно подваливаешь дополнительный контент, сваливая всё добро в одну громадную кучу как настоящий творец искусства:
https://ru.wikipedia.org/wiki/Дерьмо_художника
>Мне такое не нравится от слова совем.
>Выглядит не дрочибельно вообще.
>что графон хуже игр 2000 года.
>Вообще не дрочибельно.
>>4911
>Перетолстил
Хорош копингом заниматься, всё там дрочибельно, даже после фап-марафона можно додрочить на это, а лично мне почти 30 - представьте как школьники стачивают свой агрегат до мозолей на руках. Суть порнухи не в "качестве" арта, а в стимуляции мозга, поэтому быть гениальным художником или юзать костыли в виде 3D/нейросетей нет необходимости. Почитайте про супернормальные стимулы:
https://en.wikipedia.org/wiki/Supernormal_stimulus
Это фундамент всего арта и особенно порнухи. Если осознаете эту тему, прочувствуете на своём опыте - сможете рисовать сверхсексуальную порнуху в MS Paint, двигая мышку левой ногой, подвешенные к потолку за правую и надрачивая себя с двух рук.
И тебе спасибо!
Допустим, я хочу создать не особо сложную городскую сцену, где есть ровный асфальт, а есть неровные газоны. И вот по поводу газонов чота я не понял, а как их сделать-то? Ну то есть, нужна какая-то нода вида "плоская решётка из геометрии", чтоб ей можно было на ходу поднимать-опускать полигончики. Вроде есть MeshInstance3D, в нём создать PlaneMesh или QuadMesh, а дальше-то что? Или это не то?
Важное уточнение. Хотелось бы обойтись БЕЗ аддонов/плагинов и всякого такого. А то с ними вечно какая-то хуйня.
Use this: https://docs.godotengine.org/en/latest/classes/class_surfacetool.html
Либо сделай готовый меш в блокбенче/блендере и экспортируй в годот.
Если только для визуала, можно сделать шейдер, который сдвигает вершины. Так можно вообще не то что газон, а целый мир нарисовать
https://www.youtube.com/watch?v=3U3pLKNqxBw
Но если ты по нему ходить хочешь, то проще поставить аддон террейна
>Ты ж порно-"slop" делаешь, о какой "мечте" речь?
У него даже нет патреона, о чем речь? Сколько заработал то?
>У него такие же анимации как у тебя (в сексе).
Нет. У него даже десятков слоев нет.
>но для версии 0.1
У него 1.0 версия
>Тут аудитория важнее
Сколько он заработал то? Где патреон его?
>Зачем так сильно париться
Потому что я создаю то, на что и сам бы подрочил.
>Вываливаешь самосвал контента, на него слетается целевая аудитория и ты еженедельно подваливаешь дополнительный контент
С чего ты взял что я так не буду делать?
>всё там дрочибельно
Нет
>аже после фап-марафона можно додрочить на это
Нет
>Почитайте про супернормальные стимулы
Вряд ли ты после прочтения стал дрочить на лоускил медскилзы.
>сможете рисовать сверхсексуальную порнуху
Покажи лучше свои работы
>орнуху в MS Paint, двигая мышку левой ногой
Неиронично такие есть, японцы любят медскилзить хорошо порнуху, но то что ты показал лютая недрочибельная хуйня.
>Почему Ерохин может так, а вы жопу рвёте для 0.1?
Так это же ероха... у него наверняка есть ютуб канал и твиттер с миллионом подписчиков. А кто будет играть в игру начинающего ноунейм анона?
я уверен ероха и с игры из туториалов сделает хит на 100 миллионов долларов
>It can be used to construct a Mesh from a script
Не то. Надо из редактора.
>готовый меш в блокбенче/блендере
Тоже не подходит.
Надо состыковать газоны со всеми остальными окружающими объектами. А с таким подходом это вообще нереально. Разве что вообще всю сцену собирать в блендере. Вот к этому варианту я щас подхожу. Всё равно приходится каждую модельку через него прогонять, дабы очистить от всякого иерархического говна типа Sketchfab/model83ugu7r439j8uhw8f748ygb/MODEL/huyna/export/010001
Хорошо. Я... Пересмотрю свой UI. Сделаю как обычно. Как в миллионе других игр. Сделаю так, чтобы ничем не отличалось. Игрокам слишком сложно протянуть мышку по трём попапам. Трам-па-пам. Ясно.
> Input.action_press("ui_down")
https://docs.godotengine.org/ru/4.x/classes/class_input.html#class-input-method-action-press
> Не реагирует
Ой, сорян, думал это упрощёная версия обсуждаемого тремя тредами ранее:
> If you want to simulate _input, use parse_input_event instead.
https://docs.godotengine.org/ru/4.x/classes/class_input.html#class-input-method-parse-input-event
> var cancel_event = InputEventAction.new()
> cancel_event.action = "ui_cancel"
> cancel_event.pressed = true
> Input.parse_input_event(cancel_event)
Спасибо! Чет впринципе так и думал что нужно эвент экшн создать, но как дальше развить так и не понимал. Щас всё как надо работает.
А документация не открывается, видимо впн нужно ставить
>А документация не открывается, видимо впн нужно ставить
Сервер слабый, через раз грузит. Уже давно такая хуйня.
Вот спасибо. Как то я упустил этот момент c ClickMask.
Тогда вопрос вдогонку, как реализовать ui подобного плана, где кнопки треугольные и расставлены грань к грани.
> вопрос вдогонку, как реализовать ui подобного плана, где
В обратитесь в арт-студию. Всего за 100 косарей мы вам предложим UI/UX, и корпоративную айдентику.
Понял? Понял ссуть сраказма?
Пох на "Сарказм", мне интересно как технически подобное реализовать. Как нарисовать это к UI дизанерам
>неровные газоны
Есть несколько способов:
- нарисовать или сгенерировать шумом карту высот, шейдером по этой карте высот сдвигать вертексы;
- сдвигать вертексы в меше из обычного кода, потом сохранить результат на диск, если карта статичная;
- слепить меш в блендере или импортировать.
Как сделать из кода:
1. Берёшь простую плоскость:
https://docs.godotengine.org/en/stable/classes/class_planemesh.html
2. Увеличиваешь ей число subdivide_ чтобы у тебя получилась плотная сетка из квадратиков.
3. Конвертируешь в ArrayMesh, достаёшь данные:
https://docs.godotengine.org/en/stable/classes/class_arraymesh.html
4. Двигаешь вершины в коде как пожелаешь. Можно брать данные для сдвига из Noise.get_noise_2d():
https://docs.godotengine.org/en/stable/classes/class_fastnoiselite.html
5. Чтобы сгенерировать нормали автоматически:
- загружаешь в SurfaceTool.create_from...
- используешь generate_normals()
- возвращаешь commit()
6. Для генерации физики:
- грубо и быстро: Mesh.create_trimesh_shape()
- медленно, но оптимально для карты высот (нужно заполнять "вручную", принимает только высоты, но оптимизирована для подобных "неровных" карт):
https://docs.godotengine.org/en/stable/classes/class_heightmapshape3d.html
>>4977
>Надо из редактора.
Делай @tool-скрипт и используй из редактора. Для процедурной генерации из шума код тривиальный. Результат можно сохранить как ArrayMesh, удалив из получившейся сцены свои tool-скрипты. Или даже экспортировать для блендера, если нужно.
>состыковать газоны со всеми остальными
Тут две основных ситуации:
- если стыкуются газон с газоном, то можно в коде поправить вершины одного или обоих мешей;
- если стыкуется газон с дорогой, то у её будет что-то наподобие бордюра или обочины, куда ты можешь спокойно засунуть краешек своего газона.
Также как вариант можно сделать один такой меш, полностью покрывающий карту, но если у тебя карта большая, лучше будет порезать её на части, иначе огромное число треугольников будет на горизонте.
В целом, сделать удачный ландшафт сложно, поэтому люди ищут готовое решение и просят у Godot сделать встроенный Terrain3D для подобного рода карт.
>неровные газоны
Есть несколько способов:
- нарисовать или сгенерировать шумом карту высот, шейдером по этой карте высот сдвигать вертексы;
- сдвигать вертексы в меше из обычного кода, потом сохранить результат на диск, если карта статичная;
- слепить меш в блендере или импортировать.
Как сделать из кода:
1. Берёшь простую плоскость:
https://docs.godotengine.org/en/stable/classes/class_planemesh.html
2. Увеличиваешь ей число subdivide_ чтобы у тебя получилась плотная сетка из квадратиков.
3. Конвертируешь в ArrayMesh, достаёшь данные:
https://docs.godotengine.org/en/stable/classes/class_arraymesh.html
4. Двигаешь вершины в коде как пожелаешь. Можно брать данные для сдвига из Noise.get_noise_2d():
https://docs.godotengine.org/en/stable/classes/class_fastnoiselite.html
5. Чтобы сгенерировать нормали автоматически:
- загружаешь в SurfaceTool.create_from...
- используешь generate_normals()
- возвращаешь commit()
6. Для генерации физики:
- грубо и быстро: Mesh.create_trimesh_shape()
- медленно, но оптимально для карты высот (нужно заполнять "вручную", принимает только высоты, но оптимизирована для подобных "неровных" карт):
https://docs.godotengine.org/en/stable/classes/class_heightmapshape3d.html
>>4977
>Надо из редактора.
Делай @tool-скрипт и используй из редактора. Для процедурной генерации из шума код тривиальный. Результат можно сохранить как ArrayMesh, удалив из получившейся сцены свои tool-скрипты. Или даже экспортировать для блендера, если нужно.
>состыковать газоны со всеми остальными
Тут две основных ситуации:
- если стыкуются газон с газоном, то можно в коде поправить вершины одного или обоих мешей;
- если стыкуется газон с дорогой, то у её будет что-то наподобие бордюра или обочины, куда ты можешь спокойно засунуть краешек своего газона.
Также как вариант можно сделать один такой меш, полностью покрывающий карту, но если у тебя карта большая, лучше будет порезать её на части, иначе огромное число треугольников будет на горизонте.
В целом, сделать удачный ландшафт сложно, поэтому люди ищут готовое решение и просят у Godot сделать встроенный Terrain3D для подобного рода карт.
Можно рисовать много чего из кода:
https://docs.godotengine.org/en/stable/tutorials/2d/custom_drawing_in_2d.html
Но учитывай, что:
- слишком большое число операций может сильно замедлять рендеринг, т.к., видимо, нет растеризации (можно вручную растеризировать через SubViewport);
- вывод текста какой-то сложный, я не разобрался;
- многие эффекты лучше шейдерами делать.
Можешь объединить все свои треугольные кнопки в единственной ноде, потомке Control. Добавлять их и настраивать через инспектор или свои child-ноды. Некоторые типы меню лучше подходят к этому, как, например, радиальное (кнопки - секторы круга).
Для кликабельных зон можно детектить положение курсора и прогонять по своим формулам... Ну, или использовать Area2D с CollisionPolygon2D, но сразу учитывай, что Area2D не является потомком Control.
Короче говоря, технически можно сделать кнопки абсолютно любой формы и поведения. Хоть жидкие, пересекающие из одной формы в другую. Но зачем? Возможно, ты тратишь силы не туда, если слишком озабочен формой кнопок в меню твоей игры?
Т.е. лучше накидать обычных кнопок и заняться разработкой интересного геймплея, графики и т.д. Большинство популярных игр имеют классические прямоугольные кнопки и никто на это не жалуется. Треугольный велосипед рискует оказаться не таким удобным и отлаженным, вызывая проблемы и ещё больше времени требуя на багфиксы/отладку меню.
И будет смешно, если твою игру запомнят только за причудливые кнопки, совершенно забыв саму игру.
Не опускайся до изобретения "уникальных" колёс, если твоя цель - разработать полноценную игру.
>Короче говоря, технически можно сделать кнопки абсолютно любой формы и поведения. Хоть жидкие, пересекающие из одной формы в другую. Но зачем? Возможно, ты тратишь силы не туда, если слишком озабочен формой кнопок в меню твоей игры?
Тут согласен с тобой анончик, это вопрос не моей игры, а любопытство, чтобы знать на будущее.
>И будет смешно, если твою игру запомнят только за причудливые кнопки.
Интерфейс будет честно спизжен с pinterestа, точнее взят за реф. Я цель ставлю сделать готовый продукт и не скатываться в разработку игру мечты и прочую ересь.
Так же как и в вебе. Берёшь таблицу и верстаешь ячейками. Где надо объединяешь.
Все ровно так же. Тебе надо вызывать не ui_cancel, а функцию, которую ты вызываешь и из ui_cancel, и из этого обработчика.
>>4989
Документация встроена в годот. Там есть сквозной поиск по функциям, нодам. Блин, правда нет ссылок на онлайн туториалы, а там часто полезные примеры. Недоработка.
Также есть такая кнопочка с лупой справа в инспекторе.
И переход по Ctrl+Click по названиям в редакторе скриптов.
Вообще говоря доки лежат в отдельной репе.
Ее можно скачать оффлайн (апдейтится по понедельникам)
Или поднять зеркало. Может кто то уже сделал.
https://github.com/godotengine/godot-docs
>шумом
Дак мне не шумом надо, а вручную - тут вершинку поднять, там опустить. Тут холмик нарисовать у забора, там канавку перед бордюром. И всё это так, чтобы видеть: где забор, а где бордюр.
Но крч я понял, что в самом годоте нет инструментов для такого редактирования. Ок.
1152x720, 2:39
Дело в том что ты хочешь террейн. Террейна в ядре годота не будет никогда, только аддонами. Были планы сделать официальный аддон который будет поддерживаться основной командой.
Сделать свой то не сложно
https://www.youtube.com/watch?v=AK951MB9kXM
Сначала делаешь такое гизмо, чтобы таскать отдельные вершины (такой я вроде даже видел). Потом захочешь "кисть" которая будет рисовать их горками. Потом захочешь хранить оптимальнее, то есть не в виде меша, в виде текстуры карты высоот heightmap. Потом захочешь лоды. И коллайдеры. И вуаля ты сделал еще один аддон террейна.
Вот например чувак делает аналог крокотайла.
https://github.com/QJPG/GodotNode2Tile
И там видно что он двигает отдельные вершины тайлов, а значит даже так можно собрать "ломаную" канаву.
Или вот например. https://www.reddit.com/r/godot/comments/17gclin/godot4_access_to_a_meshinstance3d_plane_to_edit/
https://github.com/spimort/TerraBrush
Приятный террейн на сишарпе, надо будет пощупать
>зеркало
Лол, по "Godot docs mirror" гуглится это:
https://github.com/the-mirror-gdp/
Вот только эти предатели решили свалить:
>As of November 2024, we've made the extremely difficult decision to transition from Godot but we have exciting things in store. Check out our "Thank You & Technical Reflections" below.
Ничего себе, как же мы теперь без роблокса на годоте.
Обещали в следующем обращении сказать, чего же именно им в годоте не хватало.
800x600, 2:38
>в самом годоте нет инструментов для такого
Всё что надо - есть, и GDScript шустро работает.
>>5050
>Потом захочешь лоды.
ИМХО, самое сложное - бесшовные LODы.
>гизмо, чтобы таскать отдельные вершины
Вообще не нужно, лучше сразу делать это:
>кисть которая будет рисовать
>в виде текстуры карты высот
Чтобы абстрагироваться от таскания вершин.
>коллайдеры
Это самое лёгкое в Godot...
> обсуждаемого тремя тредами ранее
А обсуждалось, кстати напомню, что при помощи такой генерации фейковых инпут-ивентов, можно реализовать шину событий поверх Input. Инпут-ивенты можно генерировать такие, которые реальным инпутом вообще не ввести, и к ним можно данные прицеплять, можно унаследоваться от InputEvent и скармливать инпуту полноценные объекты с состоянием.
>Террейна в ядре годота не будет никогда
Хуясе. При том, что террейны присутствуют в каждой второй 3д-игре, это очень странное решение для движка, который стремится занять нишу 3д.
Лан, пошёл я в блендер. А то в статичную карту впихивать велосипедные скрипты - такое. А все плагины для меня избыточны, да к тому же написаны на плюсах = лишняя заморочка по пересборке темплейта.
Ну да, если карта статичная, проще террейн в блендере. Да весь уровень проще в блендере. Всё что статично одной большой сценой и импортируй.
>Всё что статично одной большой сценой и импортируй
Это нормальный способ по производительности? Или лучше по кускам?
Все современные форматы импорта-экспорта поддерживают иерархию сцены. Таким образом даже импортированная целиком из блендера сцена у тебя внутри годота предстанет в виде иерархии (дерева нод). То есть, зная имена отдельных блендеровских объектов, ты можешь им отдельно что-то поменять и даже заанимировать.
Окей, спасибо.
Правильный способ для террейна - это специализированный аддон с лодами, основанный на heightmap, ну серьезно.
Если говорить про одним мешем или частями, то делить. Потому что освещение, тени лучше работают. Иначе будет ситуация, что движок будет рассчитывать освещение по всей, возможно сложной ломаной поверхности, даже для частей которые не видны.
>Если говорить про одним мешем или частями, то делить
Блять, а анон выше сказал, что одним мешем норм будет. Ты же про любые сцены говоришь, не только про террейн? Допустим у меня пара комнат из подземелья со статичными пропсами, как мне поступить?
Он имел в виду, что ты в блендере можешь использовать деление на объекты, и при импорте иерархия сцены сохранится.
tl;dr версия - типизируй свой код?
>очень странное решение
Тысячу раз обсуждали уже на GitHub... И здесь тоже.
Вкратце:
- Godot ориентирован на уже работающих с ним пользователей, а не на посторонних вкатунов. Это основное в принятии решений "нужно/не нужно".
- Godot против лишних фич, которые будут нужны и использоваться меньшинством пользователей. Все нуждающиеся могут скачать аддон, модуль и т.п.
- Godot против попыток в ультимативное решение абсолютно всех проблем, потому что это означает перегрузку свистелками и перделками для всех с минимальной пользой тем, кому это всё нужно.
Рассматриваем heigtmap terrain:
- Для чего чаще всего используют Godot? 2D игры.
- Нужен ли террейн большинству? Нет, не нужен.
- Можно ли использовать как аддон? Да, можно.
- Можно ли сделать универсальное решение, что подойдёт большинству нуждающихся, и при этом не раздует движок на сотню мегабайт, перегрузив код и ГУЙ сотней дополнительных фич? Нельзя.
Нет никакой ультимативной реализации террейна, который бы подошёл 100% нуждающихся игр без создания 100500 субрешений и раздувания движка. А реализация, покрывающая 5% игр с террейном будет каплей в море 2D игр и 3D игр без террейна.
Поэтому они не торопятся вводить террейн в ядро движка и правильно делают. Другой вопрос, что некоторые из уже имеющихся фич по-хорошему необходимо убрать в отдельную сборку/аддон, но, видимо, они им пока что ничем не мешают. Вот визуальные скрипты выбросили - ибо реально бесполезная и мешающая фигня получилась, а желающие (которых не нашлось!) могли бы и как внешний аддон продолжать развивать. Так и тут.
>в статичную карту впихивать скрипты
Тебе же уже объяснили - скрипт нужен только для создания и модификации меша. Потом ты его как обычный статичный меш хранишь, без скриптов. И беспокоиться по поводу скриптов не нужно, с них не такая большая нагрузка, пока они бездействуют.
>А все плагины для меня избыточны
В чём избыточность? Чего ты боишься?
>да к тому же написаны на плюсах
Есть варианты на GDScript, если нужно. C++ просто значительно быстрее и преимуществ от GDScript в конкретной задаче террейна как бы и нет. Но если террейн статичный, то этот код в билде не нужен.
>лишняя заморочка по пересборке темплейта.
Если там dll в папке - ничего пересобирать не надо. Пересборка потребуется только под web + мобилки. Опять же, только если код аддона зачем-то нужен в финальной версии игры - редактор террейна может выдавать статичный меш без какого-либо кода.
>очень странное решение
Тысячу раз обсуждали уже на GitHub... И здесь тоже.
Вкратце:
- Godot ориентирован на уже работающих с ним пользователей, а не на посторонних вкатунов. Это основное в принятии решений "нужно/не нужно".
- Godot против лишних фич, которые будут нужны и использоваться меньшинством пользователей. Все нуждающиеся могут скачать аддон, модуль и т.п.
- Godot против попыток в ультимативное решение абсолютно всех проблем, потому что это означает перегрузку свистелками и перделками для всех с минимальной пользой тем, кому это всё нужно.
Рассматриваем heigtmap terrain:
- Для чего чаще всего используют Godot? 2D игры.
- Нужен ли террейн большинству? Нет, не нужен.
- Можно ли использовать как аддон? Да, можно.
- Можно ли сделать универсальное решение, что подойдёт большинству нуждающихся, и при этом не раздует движок на сотню мегабайт, перегрузив код и ГУЙ сотней дополнительных фич? Нельзя.
Нет никакой ультимативной реализации террейна, который бы подошёл 100% нуждающихся игр без создания 100500 субрешений и раздувания движка. А реализация, покрывающая 5% игр с террейном будет каплей в море 2D игр и 3D игр без террейна.
Поэтому они не торопятся вводить террейн в ядро движка и правильно делают. Другой вопрос, что некоторые из уже имеющихся фич по-хорошему необходимо убрать в отдельную сборку/аддон, но, видимо, они им пока что ничем не мешают. Вот визуальные скрипты выбросили - ибо реально бесполезная и мешающая фигня получилась, а желающие (которых не нашлось!) могли бы и как внешний аддон продолжать развивать. Так и тут.
>в статичную карту впихивать скрипты
Тебе же уже объяснили - скрипт нужен только для создания и модификации меша. Потом ты его как обычный статичный меш хранишь, без скриптов. И беспокоиться по поводу скриптов не нужно, с них не такая большая нагрузка, пока они бездействуют.
>А все плагины для меня избыточны
В чём избыточность? Чего ты боишься?
>да к тому же написаны на плюсах
Есть варианты на GDScript, если нужно. C++ просто значительно быстрее и преимуществ от GDScript в конкретной задаче террейна как бы и нет. Но если террейн статичный, то этот код в билде не нужен.
>лишняя заморочка по пересборке темплейта.
Если там dll в папке - ничего пересобирать не надо. Пересборка потребуется только под web + мобилки. Опять же, только если код аддона зачем-то нужен в финальной версии игры - редактор террейна может выдавать статичный меш без какого-либо кода.
>как же мы теперь без роблокса на годоте
Мне они не нравятся по многим причинам, но идея была в том, чтоб сделать опенсурс конструктор игр, позволяющий экспортировать в обычный движок.
С одной стороны, у конструкторов игр чрезвычайно сниженный порог входа - это почти игры для детей, несмотря на возможность сделать игру. По той же причине позволяют сверхбыстро прототипировать геймдизайнерские идеи. Поэтому они привлекают больше людей, чем классические движки.
Но у них обычно есть серьёзные ограничения, из-за которых некоторые идеи нереализуемы вообще или требуют сложных обходных путей. И сделанное в конструкторе игр обычно невозможно изменять на низком уровне, или это очень сложно. Невозможно экспортировать в классический игровой движок.
Теперь представь, что ты скачиваешь абсолютно бесплатную игру, в которой ты можешь играючи настраивать какие-то параметры, создавать новые локации, объекты, игровые механики, персонажей. Конечно, ты натыкаешься на ограничения - но ты проделал половину работы и делаешь экспорт - в форматах, понятных ванильному Godot. Теперь ты открываешь проект в Godot и погружаешься в "низкоуровневое" доделывание некоторых идей - совершенно без ограничений конструктора.
Разве это не было бы фантастическим дополнением к базовому Godot? Разве не привлекло бы больше новых разработчиков игр на базовый Godot?
Это было бы полезно для всех, от новичков (проще вкатиться в геймдев) до профи (прототипирование).
Т.е. базовая идея гениальна, но исполнения нет.
> Вот визуальные скрипты выбросили - ибо реально бесполезная и мешающая фигня получилась, а желающие (которых не нашлось!) могли бы и как внешний аддон продолжать развивать. Так и тут.
Там кстате запилили блокскрипт. Он визуальнее визуального. Но пока что аддон в зачаточном состоянии.
https://godotengine.org/asset-library/asset/3095
https://www.youtube.com/watch?v=WlUN7Zz0Djg
Кстати, предлагайте арт на перекат. Позже перекачу.