Godot #51 # OP 954699 В конец треда | Веб
Добро пожаловать! Добро пожаловать в Годотред-51!
Сами вы его выбрали, или его выбрали за вас - это лучший тред из оставшихся. Я такого высокого мнения о Годотреде, что решил перекатить его здесь, в /gd/, столь заботливо предоставленной нам Абу. Спасибо, Абу! Я горжусь тем, что называю Годотред своим домом.
Итак, собираетесь ли вы остаться здесь, или же вас ждёт геймдевелопинг, добро пожаловать в Годотред-51. Тред любви, взаимопомощи и кэша процессора!Шапка: https://hipolink.me/godothread
Предыдущий: >>951925 (OP)
Архивный: >>949247 (OP)
2 954723
Не перегибаю ли я с круглыми меню?..

>>54699 (OP)

>добро пожаловать в Годотред-51.


А здесь безопасно?
3 954729
>>54723
Перегибаешь, вспомни где круглые меню используются в основном: обычно для каких-то быстрых действий в забитый экшеном момент, типа переключения оружия.
4 954750
>>54723
Годно!
Причеши, оформи - и на ассетлиб. Базарю, станешь легендой.
>>54723

>Не перегибаю ли я


Вынеси как можно больше фич в опции, пусть конечный девелопер конфигурирует на свой вкус.
>>54729

>где круглые меню используются в основном


А кому-то захочется круглое меню в пошаговой игре, тут-то ему свистоперделки и пригодятся.
>>54723
Воот, а потом принимайся за карусель-контрол. Есть такой паттерн.
.png269x31
5 954754
Глупый вопрос, почему у меня софтварный курсор под кнопкнами отрисовывается? Эти кнопки я создаю динамически, может какое-то свойство пропустил? Вроде проблема не с z-индексом, у кнопок он 0, у курсора максимальный поставил. top-level тоже пробовал включать.
6 954757
>>54754

>софтварный курсор


Как ты его создаёшь? Двигаешь ноду за мышкой?
.png5 Кб, 358x107
7 954759
>>54757
Да. Причем в главном меню такие же кнопки и там все норм, но там они обычные. Эти создаю в пикрелейтеде вот так
for i in len(answers):
var _option_node = Button.new()
_option_node.text = answers["text"]
_option_node.theme = load("res://Scenes/UI/dialogue_button_theme.tres")
_option_node.alignment = HORIZONTAL_ALIGNMENT_LEFT
_vbox.add_child(_option_node)
_option_node.connect("pressed", _on_answer_selected.bind(answers["next"]))

в теме настроены только цвета, шрифты и тд.
8 954762
>>54759
Раньше в трёшке это реализовывалось путём организации ноды-спавнера в дереве так, чтобы она по дизайну находилась под курсор-нодой, и всё, что в ней спавнится, так же оставалось там. В четверке добавили возможность вручную задавать z-индексы. То есть курсору сразу задаёшь индекс 100500 и он гарантированно будет поверх всех. ХЗ, что у тебя не получается. УМВР.
9 954773
>>54729

>быстрых действий


>типа переключения оружия


Хех, в GTA Online они максимально всрали их меню переключения оружия: категорий много и почти в каждой категории можно купить десяток пушек, которые можно листать только по одной штучке, из-за чего быстрота выбора полностью теряется. Радиостанции тоже всрали, но их хотя бы можно скрыть по вкусу, и то на эту фичу 10 лет ушло.

В нашумевшем Palworld (сделан на Unreal) билдменю максимально всратое потому, что на каждом колесе фиксированное число кнопок, и они переключаются последовательно нажатиями кнопок влево-вправо, а страниц-категорий дохрена, т.е. у них там обратная проблема колеса оружия из GTA Online.

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

Я читал, что круглые меню в играх появились из-за консолей, на которых сложно листать списки, а вот окружность стиком легко доступна. Но ты подумай: преимущество круглого меню в том, что все кнопки одинаково удалены от центра и их фактический (т.е. тактильный) размер намного больше визуального. Идеальный способ ввода для мыши и лентяев.

Если сравнить:

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

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

Главная проблема тут - юзеру необходимо целиться мышкой в желаемую кнопку. Чем меньше кнопка, тем сложнее прицелиться; чем больше кнопка, тем шире взмахи мышкой, но широкие взмахи всегда сложнее контролировать. В ОС даже придумали специальное ускорение курсора для решения этой проблемы, но в компьютерных играх это решение только мешает. Круглое меню решает проблему, позволяя без прицеливания махнуть мышкой и попасть в сектор; прицеливаться нужно только в центр, если он есть.

Круглые меню не панацея, но показалось интересным попробовать сделать из них что-то большее, чем одно нажатие на сектор круга. Может быть, даже можно реализовать инвентарь с переносом предметов? В инвентарях часто не хватает/используются группы предметов, и всё, что нужно - перенос из/в сундуки.

Да, криворукий, близорукий, не попадаю по кнопкам.

>>54750

>Причеши, оформи - и на ассетлиб.


Да, думал об этом, но как-то не очень хочется. Как минимум, много работы для нормального релиза. И вообще устал от этих меню, хочу игру делать. А если вдруг это станет популярным, появится 9001 игра с одинаковым дизайном, а это как-то не круто. Ничего особо сложного в этих меню нет, но большинство разработчиков, скорее всего, будут просто бездумно втыкать в свой проект, не меняя никаких настроек. А кому очень надо - те и с нуля сами написать смогут.

>Вынеси как можно больше фич в опции


Но чем больше опций - тем медленнее основной функционал из-за проверок в коде. Тем более пока сомневаюсь, что делать для рендеринга градиентов и текстур на место секторов (там сейчас draw_arc).

>карусель-контрол


Функцию предпросмотра чего-то на карусели легко заменить круговым меню, даже если элементов несколько десятков (сотни нужно группировать, а то будет сложно). Карусель имеет смысл, когда тебе нужно убрать подальше что-то старое и ненужное (как меню последних задач или рабочие столы на Android), разве такое часто встречается в играх? Для очень большой галереи (сотни снимков) лучше уж простую сетку нарисовать, чем листать поштучно.

Уверен, что базовая карусель в Godot делается за считанные строчки кода, и это с учётом анимаций.
9 954773
>>54729

>быстрых действий


>типа переключения оружия


Хех, в GTA Online они максимально всрали их меню переключения оружия: категорий много и почти в каждой категории можно купить десяток пушек, которые можно листать только по одной штучке, из-за чего быстрота выбора полностью теряется. Радиостанции тоже всрали, но их хотя бы можно скрыть по вкусу, и то на эту фичу 10 лет ушло.

В нашумевшем Palworld (сделан на Unreal) билдменю максимально всратое потому, что на каждом колесе фиксированное число кнопок, и они переключаются последовательно нажатиями кнопок влево-вправо, а страниц-категорий дохрена, т.е. у них там обратная проблема колеса оружия из GTA Online.

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

Я читал, что круглые меню в играх появились из-за консолей, на которых сложно листать списки, а вот окружность стиком легко доступна. Но ты подумай: преимущество круглого меню в том, что все кнопки одинаково удалены от центра и их фактический (т.е. тактильный) размер намного больше визуального. Идеальный способ ввода для мыши и лентяев.

Если сравнить:

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

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

Главная проблема тут - юзеру необходимо целиться мышкой в желаемую кнопку. Чем меньше кнопка, тем сложнее прицелиться; чем больше кнопка, тем шире взмахи мышкой, но широкие взмахи всегда сложнее контролировать. В ОС даже придумали специальное ускорение курсора для решения этой проблемы, но в компьютерных играх это решение только мешает. Круглое меню решает проблему, позволяя без прицеливания махнуть мышкой и попасть в сектор; прицеливаться нужно только в центр, если он есть.

Круглые меню не панацея, но показалось интересным попробовать сделать из них что-то большее, чем одно нажатие на сектор круга. Может быть, даже можно реализовать инвентарь с переносом предметов? В инвентарях часто не хватает/используются группы предметов, и всё, что нужно - перенос из/в сундуки.

Да, криворукий, близорукий, не попадаю по кнопкам.

>>54750

>Причеши, оформи - и на ассетлиб.


Да, думал об этом, но как-то не очень хочется. Как минимум, много работы для нормального релиза. И вообще устал от этих меню, хочу игру делать. А если вдруг это станет популярным, появится 9001 игра с одинаковым дизайном, а это как-то не круто. Ничего особо сложного в этих меню нет, но большинство разработчиков, скорее всего, будут просто бездумно втыкать в свой проект, не меняя никаких настроек. А кому очень надо - те и с нуля сами написать смогут.

>Вынеси как можно больше фич в опции


Но чем больше опций - тем медленнее основной функционал из-за проверок в коде. Тем более пока сомневаюсь, что делать для рендеринга градиентов и текстур на место секторов (там сейчас draw_arc).

>карусель-контрол


Функцию предпросмотра чего-то на карусели легко заменить круговым меню, даже если элементов несколько десятков (сотни нужно группировать, а то будет сложно). Карусель имеет смысл, когда тебе нужно убрать подальше что-то старое и ненужное (как меню последних задач или рабочие столы на Android), разве такое часто встречается в играх? Для очень большой галереи (сотни снимков) лучше уж простую сетку нарисовать, чем листать поштучно.

Уверен, что базовая карусель в Godot делается за считанные строчки кода, и это с учётом анимаций.
10 954780
>>54754

>Вроде проблема не с z-индексом, у кнопок он 0, у курсора максимальный поставил.


>>54759

>Button.new()


А курсор находится где? Z-индекс неявно зависит от положения ноды в сцене (потомки отображаются поверх своих предков, но ниже следующих нод).

По умолчанию у всех CanvasItem нод стоит это:
https://docs.godotengine.org/en/stable/classes/class_canvasitem.html#class-canvasitem-property-z-as-relative
Попробуй отключить.

Я бы просто поместил курсор в самый нижний конец дерева, так он 100% будет выше всех. Игру и весь остальной контент вставляешь в середину дерева. Стандартный механизм переключения сцен мне всё равно совершенно не нравится.
11 954781
>>54780
Спасибо за ответ, я разобрался, у меня эти кнопки были в отдельном канваслеере по гайду для юая с ютуба, поэтому они и были поверх, в итоге вынес курсор тоже в отдельный канваслеер и сделал его самым верхним.
12 954783
>>54781

>были в отдельном канваслеере


>тоже в отдельный канваслеер


Не знаю, зачем тут CanvasLayer, сцена-то простая.

Хотя я вообще не очень понимаю роль CanvasLayer. В отличие от Viewport, текстуры не создаётся, только меняется порядок отрисовки. Но порядок отрисовки уже регулируется порядком нод и Z-индексом. Ну и зачем тогда слои, если роль слоя каждая CanvasItem выполняет своим положением и индексом? Если только всё очень сложно и запутанно в проекте.

Тем более на Node3D они вообще не влияют...

>>54759

>len(answers):


Думаю, лучше использовать .size():
len() ожидает Variant и принимает в т.ч. String.
.size() есть только у Array и Dictionary и тут ты
спрашиваешь конкретный объект, а не Variant.
Ну и как-то читать легче ("для i в ответов.размер").

Во всяком случае, никогда не видел, чтоб вот так использовали len(), и сам пользуюсь только .size() (у String, если нужна длина строки, есть .length()).
13 954787
>>54783

> Не знаю, зачем тут CanvasLayer, сцена-то простая.


Чтобы на ui диалога не действовал зум камеры

про size и len понял принял
невероятный Годо.jpg105 Кб, 783x1024
14 954877
>>54699 (OP)
ГОДО ДЕЛАТЬ ИГРА!
image.png2,2 Мб, 811x1166
15 954886
Чому-то не работает DOF Far Blur в html сборке (пилю под GLES2). Мож кто знает, как лечить?
16 954894
>>54886

>DOF Far Blur в html под GLES2


Я по-быстрому протестировал здесь, на Firefox:
https://editor.godotengine.org/releases/3.6.beta5/
Похоже, что код шейдера сломан или несовместим.
DOF Near Blur вообще вываливает странные ошибки.

>как лечить?


Ковыряться в исходниках движка, если очень надо.

Из моего опыта на 3.x ветке, блюр очень затратный.
17 954936
>>54894

>Похоже, что код шейдера сломан или несовместим.


>Ковыряться в исходниках движка, если очень надо.


Спасяб за подсказку.
18 954957
Сап, ГДач. Делаю игрушку с физическими механиками на Godot 4.3 (пока ещё бета). У меня уже готово перемещение предметов типа grab, но во время реализации столкнулся с проблемой... Если взять большой предмет с которым игрок должен сталкиваться, и иметь возможность его двигать через grab, он может просто запрыгнуть на него, потянуть вверх и полететь как на ковре-самолёте.

Если у предмета отключать коллизию, то во время отпускания предмета если игрок находился внутри предмета, происходит толчок и игрок может провалиться через текстуры. Плюс неприятно из-за того что игрок может видеть сквозь текстуры переносимого предмета.

Как сделать так, чтобы игрок мог носить большой предмет, сталкиваться с ним, но не летать на нём? Делать проверку позиции hand по высоте относительно ног игрока, чтобы выпусткать предмет из рук при отрицательном положении Y?
19 954959
>>54957
Я бы сравнивал положение игрока по обоим вертикалям с положением предмета, и если они достаточно близко и предмет ниже, то ронять. Ещё можно заделать метод, определяющий на чём игрок стоит, но тут ньюанс в том, что можно будет летать подпрыгивая на предмете и подтягивая его за собой, как в старых версиях халвы
20 954960
>>54959
СПС, сейчас попробую
21 954961
>>54959
Но есть загвоздка. Если предмет широкий, как, например огромный поддон или дверь, то можно сесть на край и поднять его, тем самым снова сооружая ковёр-самолёт.
22 954962
>>54961
Зная размер объекта и его поворот, можно определять его ближайшую точку к игроку. Но тут надо использовать проверку на чём стоит/находится прямо над игрок. Хотя как ни крути, а всякие приколы игрок найдёт, как летающие машины в ботве, где игрок одну вагонетку кладёт на другую, забирается на верх и магнитом поднимает нижнюю.
23 954975
Какой на ваш взгляд подход к разработке предпочтительнее? Делать уровень сначала на затычках, постепенно заменяя их настоящими механиками, или сначала сделать все механики, а потом собирать из них уровень?
.mp462 Кб, mp4,
1280x180, 0:07
24 954980
Почтиежедневный вопрос в тред
Я заметил, что софтварный курсор который я сделал не точен на некоторых объектах, сначала грешил на то что хотпойнт кривовато стоит, но оказалось дело не в этом.

Выглядит будто точка от которой считается global_position у спрайта меняется при его движении или типа того.
Вот записал видео, там софтварный курсор и хардварный с одинаковой картинкой
софтварный двигаю кодом
cursor.get_child(0).global_position = player.get_global_mouse_position()

И видно что в правой части экрана расхождение между курсорами по оси х больше.
У меня это вызывает недоумение.
print(cursor.get_child(0).global_position, " ", player.get_global_mouse_position()) выдают одинаковые значения
25 955001
>>54957

>Делаю игрушку с физическими механиками


Я тоже, в каком-то смысле. Много проблем...
Планируешь заменять встроенную физику?
https://github.com/godot-jolt/godot-jolt

>на Godot 4.3 (пока ещё бета).


Почему сразу 4.3? Говорят, там ещё не всё починили. Стабильные ветки действительно стабильны, а вот все эти бета-сборочки часто могут сцены ломать. Но дороги назад нет, если не сделал бэкап 4.2 проекта.

>Если взять большой предмет с которым игрок должен сталкиваться, и иметь возможность его двигать через grab, он может просто запрыгнуть на него, потянуть вверх и полететь как на ковре-самолёте.


У меня обратная проблема была: игрок должен мочь передвигаться по поверхности подвижного объекта, но не мочь толкать объект как ракетный двигатель, непосредственно на нём находясь.

В Godot 4 теперь есть решение обоих проблем:
https://docs.godotengine.org/en/stable/classes/class_collisionobject3d.html#class-collisionobject3d-property-collision-layer

>Note: Object A can detect a contact with object B only if object B is in any of the layers that object A scans.



Пример 1: игрок сканирует препятствия, но подвижное тело игрока не сканирует, результат - только игрок сталкивается с подвижным телом и двигается от него, тогда как подвижное тело игрока совсем игнорирует.

Пример 2: подвижное тело сканирует игрока, но игрок подвижное тело не сканирует, результат - подвижное тело сталкивается с игроком и двигается от него, тогда как игрок подвижное тело совсем игнорирует.

...но тут есть нюансы:
В первом примере, если игрок встанет между двумя препятствиями, они его проигнорируют и игрок будет "раздавлен", но поскольку игрок бесконечно твёрдое тело, он выскочит куда-нибудь, куда захочет движок. Решение: убивать и респавнить игрока, либо делать анимации/регдолл для этой конкретной ситуации.

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

Как это решить:
- тестировать локации на защиту от дурака;
- респавнить объект, если он улетел куда-то;
- не делать лишних платформ, которые игрок может одновременно тащить и стоять на них;
- вообще отказаться от возможности тащить то, на чём ты в данный момент стоишь (лол, зачем?).
25 955001
>>54957

>Делаю игрушку с физическими механиками


Я тоже, в каком-то смысле. Много проблем...
Планируешь заменять встроенную физику?
https://github.com/godot-jolt/godot-jolt

>на Godot 4.3 (пока ещё бета).


Почему сразу 4.3? Говорят, там ещё не всё починили. Стабильные ветки действительно стабильны, а вот все эти бета-сборочки часто могут сцены ломать. Но дороги назад нет, если не сделал бэкап 4.2 проекта.

>Если взять большой предмет с которым игрок должен сталкиваться, и иметь возможность его двигать через grab, он может просто запрыгнуть на него, потянуть вверх и полететь как на ковре-самолёте.


У меня обратная проблема была: игрок должен мочь передвигаться по поверхности подвижного объекта, но не мочь толкать объект как ракетный двигатель, непосредственно на нём находясь.

В Godot 4 теперь есть решение обоих проблем:
https://docs.godotengine.org/en/stable/classes/class_collisionobject3d.html#class-collisionobject3d-property-collision-layer

>Note: Object A can detect a contact with object B only if object B is in any of the layers that object A scans.



Пример 1: игрок сканирует препятствия, но подвижное тело игрока не сканирует, результат - только игрок сталкивается с подвижным телом и двигается от него, тогда как подвижное тело игрока совсем игнорирует.

Пример 2: подвижное тело сканирует игрока, но игрок подвижное тело не сканирует, результат - подвижное тело сталкивается с игроком и двигается от него, тогда как игрок подвижное тело совсем игнорирует.

...но тут есть нюансы:
В первом примере, если игрок встанет между двумя препятствиями, они его проигнорируют и игрок будет "раздавлен", но поскольку игрок бесконечно твёрдое тело, он выскочит куда-нибудь, куда захочет движок. Решение: убивать и респавнить игрока, либо делать анимации/регдолл для этой конкретной ситуации.

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

Как это решить:
- тестировать локации на защиту от дурака;
- респавнить объект, если он улетел куда-то;
- не делать лишних платформ, которые игрок может одновременно тащить и стоять на них;
- вообще отказаться от возможности тащить то, на чём ты в данный момент стоишь (лол, зачем?).
26 955002
>>54962

>летающие машины в ботве, где игрок одну вагонетку кладёт на другую, забирается на верх и магнитом поднимает нижнюю


Это легко пофиксить, если кидать рейкаст от игрока в желаемом направлении и магнитить только самый первый объект на пути рейкаста. Физически, это наиболее логично: если два предмета магнитятся, то первым примагнитится тот, что ближе.

Вопрос в том, нужно ли запрещать игроку фан?
27 955003
>>54957

>запрыгнуть на него, потянуть вверх и полететь


А-а-а, стоп... Ты имеешь в виду: сначала запрыгнуть, а уже потом потянуть? Единственным практичным решением тут будет определять, на чём игрок стоит своими ногами (это легко), и запрещать цеплять руками то, на чём стоим. Реальная проблема возникает только если игрок случайно наступит на то, что уже тащит, но это решается слоями физики - предмет отодвинется от ног сам по себе.
28 955006
>>54975

>Делать уровень сначала на затычках, постепенно заменяя их настоящими механиками, или сначала сделать все механики, а потом собирать из них уровень?


Я думаю, всё зависит от конкретной игры.

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

Если хочешь сделать аттракцион весёлых механик, то сначала делаешь и отлаживаешь механики, потом уже вокруг них строишь все свои локации.

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

Но тебе в любом случае потребуется какая-то тестовая локация для проверки механик, даже если финальная локация будет выглядеть совсем иначе. Тот же забор необходимо где-то поставить, чтобы тестировщик мог через него перебраться, иначе механику не потестишь.
29 955008
>>54980

>расхождение между курсорами по оси х больше


Может, у тебя там где-то масштаб не равен 1?

>выдают одинаковые значения


Естественно. Ты же их присваиваешь. Потом движок преобразует эти координаты относительно слоя:
https://docs.godotengine.org/en/stable/classes/class_control.html#class-control-property-global-position

>The node's global position, relative to the world (usually to the CanvasLayer).



>player.get_global_mouse_position()


Попробуй получать координаты от сервера:

>Returns the mouse's position in the CanvasLayer that this CanvasItem is in using the coordinate system of the CanvasLayer.


>Note: For screen-space coordinates (e.g. when using a non-embedded Popup), you can use DisplayServer.mouse_get_position.



ИМХО, ты всё слишком усложняешь.

Сначала отладь поведение курсора в изолированной сцене курсора, а уже потом добавляй эту сцену в игру.
30 955011
>>55008

>screen-space coordinates


А, не, это вроде относительно пикселей монитора?..

Обмажутся канвас лейерами и сдвигаются неточно...
31 955012
>>54980
У тебя случайно в винде не включено какое-нибудь масштабирование? Почитай вот про эту настройку и про stretch
https://docs.godotengine.org/en/stable/tutorials/rendering/multiple_resolutions.html#hidpi-support
32 955013
>>54957
Так это, просто отключай физику предмету когда он в руках.
33 955014
>>55013

>отключай физику предмету когда он в руках.


Так он это рассматривал же: >>54957

>во время отпускания предмета если игрок находился внутри предмета, происходит толчок и игрок может провалиться через текстуры. Плюс неприятно из-за того что игрок может видеть сквозь текстуры переносимого предмета.

34 955017
>>55012
Камера есть, у нее зум 0, тоже грешил на нее, пробовал удалить, но результат тоже.

Попробовал убрать курсор с отдельного канвасслоя, проблемы нет.
Просто я тогда не понимаю как правильно делать. Юай должен быть на отдельном канваслеере, чтобы не подчиняться камеере, скроллу и всему такому, так? Значит и курсор должен быть на отдельном канваслеере, чтобы он мог быть поверх интерфейса.

Пока писал увидел пост >>55012
С настройкой странно, я ее выключил и все заработало, а потом включил, но оно осталось работать. Но перед этим я пересоздал канвас леер после удаления в предыдущей проверке.

В общем я понял, что ничего не понял. Наверно я как-то починил расхождение между слоями пересоздав слой курсора, но это неутешительно.
35 955020
>>55017

>как-то починил расхождение между слоями пересоздав слой курсора, но это неутешительно.


Нужно было посмотреть, какие там настройки. А лучше всего создать бэкап сцены/проекта.

В Godot (4.2.2) до сих пор часто встречается проблема обновления актуальных значений в полях инспектора у внешних сцен. Т.е. ты вроде меняешь параметры во внешней сцене, а там, где ты их ожидаешь, они не изменяются как ты хотел... Сделал вывод, что лучше закрывать все лишние сцены и держать открытой только ту, с которой ты сейчас работаешь.

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

А вчера заметил, что инспектор не подгружает сразу актуальное содержимое enum в кастомном ресурсе. Пришлось перезагружать весь проект...

Ну, это всё не страшно, исправляется самим движком.
36 955025
>>55014
Я имел что-то вроде, объект rigid, чтобы с ним сталкиваться/толкать, но если поднял, он переключается в kinematic, прицепляется к персонажу и он ни в какие стены с ним заходить не будет. И вообще, вряд ли надо допускать ситуацию когда игрок оказыватся в объекте.
problem.png2 Кб, 240x269
37 955037
>>55025
У анона проблема с пикрила:
1. Игрок встал на площадку.
2. Пытается взять площадку в руки.
3-а. Площадка толкает игрока вверх?
3-б. Площадка проходит сквозь игрока?
3-в. Площадка вылетает из-под ног?
3-г. Площадка не даётся в руки?
3-д. Площадка уменьшается?
1668389117612.png4 Кб, 240x253
38 955052
39 955070
>>55052
Если ты предлагаешь коллиженшейп предмета добавить к коллизиям чарактербоди, тогда твой персонаж превратится из капсулы в капсулу с прямоугольником внизу.

Ну ты попробуй, потом покажешь.
40 955072
>>55070
Чуть чуть сложнее, там надо еще Area детектор пола в ногах. Я просто не понимаю что именно за механику анон хочет получить. В моем предствалении, если встать, например, на валун, и взяться за него руками, то ни поднять его нельзя, ни ходить пока ты стоишь на нем. Но если у него игра про серфинг на доске то это другая история и там могут появиться повороты.
41 955095
Объясните, как изменить шаг смещения при привязке? А Анрыле есть конкретный выбор шага в юнитах, а в Годоте ничего не нашёл и не нагуглил. Дефолтный шаг равен 1 метру.
k.png12 Кб, 333x36
42 955097
>>55095
Я не помню точно, капчую с телефона, но одна из двух кнопок на пикриле позволяет зайти в настройки и выбрать любое значение, в т.ч. дробное.
43 955099
>>55097
А, вспомнил, три точки - настройки освещения.
Transform - настройки трансформации.
44 955102
>>55101 (Del)
Зато ты там можешь любое значение ввести, а не только выбрать одно из заложенных разрабами.

Вот у тебя на скрине вижу "1, 5, 10", а "other" нет. Как сделать привязку к сетке из 2, 3, 4 юнитов? А если мне необходима привязка к 0.575, 0.3, 0.025 юнита?

Впрочем, вся эта привязка не очень-то и нужна. Я задолбался со своим перфекционизмом, хочу уже просто слепить какое-нибудь говно играбельное...
45 955104
>>55095

>не нагуглил


https://www.reddit.com/r/godot/comments/qjqnxa/

>>55097 >>55099
А, вообще перепутал, нужно View нажимать (?).

Так редко этим пользуюсь, что не помню вообще.
46 955105
>>55102

>Впрочем, вся эта привязка не очень-то и нужна.



Ну а как без неё, если у тебя, допустим, модульные ассеты комнат, где метровые стены, молы и потолки? Без привязки ты не состыкуешь без щелей и наслоений.
47 955106
>>55105

>модульные ассеты комнат


>метровые стены, полы и потолки


Если у тебя квадратно-гнездовая застройка, пробуй:
https://docs.godotengine.org/en/stable/tutorials/3d/using_gridmaps.html
- автоматически оптимизирует повторения;
- автоматическая привязка к заданной сетке;
- можно иметь несколько разных в сцене;
- поддержка физики (StaticBody3D) и навмешей;
- более-менее удобно управлять из кода.

Минусы:
- поворот блоков по 90 градусов;
- у блоков нет анимаций, скриптов;
- не отдаёт свои коллизии в RigidBody3D (если хочешь делать модульный транспорт из кубиков);
- не оптимизирует полностью скрытые блоки (тут уже сам разбирайся, что показывать юзеру);
- оптимизации через мультимеш (это не Майнкрафт, в Майнкрафте сетка полностью перестраивается).
snap.png21 Кб, 687x259
48 955108
Вот ещё накопал инфу. ctrl+shift делает шаг ещё меньше (0.1 метра по дефолту).

>>55106
Да, про гридмапс буквально сегодня читал. Это конечно больше для всяких платформеров и аркад больше подходит. Ну или для какого-нибудь аналога Майнкрафта. Это не то.
49 955110
>>55108
Да нормально можно высотку смастерить, если у тебя все панели одного размера - хватит одного гридмапа. Если у тебя панели разных размеров, можно использовать несколько гридмапов. Вот сделать что-то кроме панелек будет сложно.

Для воксельной игры нужен специальный аддон, потому что в воксельных играх нужны специальные оптимизации: грубо говоря, один чанк Майнкрафта - это не тысячи кубиков, а один меш со сложной процедурной текстурой. Поэтому Майнкрафт хорошо работает даже на слабых устройствах.

Тут аддоны (воксели, карты высот):
https://github.com/Zylann
50 955123
>>54699 (OP)
Сделал Пакмана. Зачем?
1717559536887.png39 Кб, 320x320
51 955126
>>55123
Just for LULZ
logo.png12 Кб, 1000x550
52 955144
>>55126

>Just for LULZ


Ну не игры же делать.

Как же сложно без концеп-тортиста...
53 955151
>>55144
Я тебе про концепт ещё в прошлом году говорил, когда ты свою раскорячку-тян еще только создавал. но ты ж не хочешь по чужому концепту работать.
54 955153
Поясните за правильную стратегию обучения. Вот я прошел туториал, который "ваша первая 2д игра". Дальше как лучше поступить? Уже можно начинать пилить свою простенькую игрулю и походу разбираться? Или лучше еще игр по инструкции настругать?
55 955154
>>55153
С идеи. Ты какую игру сделать хочешь?
56 955155
>>55153
Скорее всего, лучше пройти ещё туториал. Но если у тебя большой опыт в другом движке, то можешь садиться пилить игру.
57 955156
>>55153

>Вот я прошел туториал, который "ваша первая 2д игра".


Всё понял? Получилось? Попробуй поиграть параметрами. Добавить новых функций. Переделать так, чтобы никто без подсказки не догадался, по какому туториалу ты это начинал делать. Буквальное и бездумное следование инструкциям в туториалах не способствует быстрому обучению.

>Или лучше еще игр по инструкции настругать?


Если ты только и делаешь, что повторяешь шаги этих инструкций, то толку от этого мало.

>Уже можно начинать пилить свою простенькую игрулю и походу разбираться?


Смотря что ты считаешь "простеньким". Многие новички хотят сразу свою "убийцу ГТА" делать, но считают это "простеньким" проектом, если откажутся от фотореализма, сложной физики, сюжета и озвучки... Но это по-прежнему экшн опенворлд в большом и сложном мире => сложный проект.
58 955163
>>55156

>Всё понял?


Ну процентов 90.

>Попробуй поиграть параметрами.


Пробовал.

>Переделать так, чтобы никто без подсказки не догадался


Так может все таки лучше новую начать?

>Смотря что ты считаешь "простеньким". Многие новички хотят сразу свою "убийцу ГТА" делать


Думал с автобатлера начать. Чтоб не душится сразу с многими аспектами работы с движком, сосредоточиться на поведении мобов, анимациях, балансе для начала.
59 955165
Проболел неделю, пора возвращаться к убийце СХ1 про сычиху запертую в трех этажах.

Попытался сделать зеркало через рендер в SubViewport второй камерой, с зеркально отраженным вращением/положением. А там оказывается сабвьюпорт не получает информацию от источников света из основного вьюпорта (кроме Environment нода). На пикриле работа зеркала, что есть свет, что нет света, зеркальная камера в суб-вьюпорте рендерит одинаково без света.
Можно отражение в черно-белое перевести, но я хотел геймплейные моменты обыграть с зеркалами, которые работают не так как обычные в квартире.
Очередная жопа.
60 955167
>>55165
слу. а где интерактив айтем и переходы двери между локациями?
0189-4529.mp439,4 Мб, mp4,
1024x768, 2:24
61 955168
>>55167
То ли в прошлом, то ли в позапрошлом треде выкладывал, базовое взаимодействие с объектами, подбор предметов, использование оных из инвентаря.
Переходы между локациями начну когда отработаю базовые функции внутри квартиры. Вот сейчас затык с зеркалом.
62 955169
>>55168
Пилите, Шура, пилите.
63 955170
>>55151

>в прошлом году ... тян ещё только создавал


Конкретно её начал в 2021. По жопе определил. ( ͡° ل͜ ͡°)
Общая концепция игры тянет свои гнилые корни с 2019.

>не хочешь по чужому концепту работать


Дело не в этом. Просто... нет, всё не просто. Попробую объяснить.

Хотел игру со строительством и ремонтом летающего транспорта "из говна и палок" или "тяп-ляп", при этом хотелось разрешить строить как угодно и где угодно без ограничений (отдельный 3D редактор каркаса в столе крафтинга сразу идёт мимо). Но на практике оказалось, что "строить как угодно без ограничений" (тяп-ляп) означает кучу проблем как игроку, так и игре. Намного удобнее строить, когда игра помогает тебе привязкой к чему-либо, и намного проще решать технические вопросы, когда дизайны транспорта имеют строгие правила.

Тогда я сделал точки крепления на краях панелей, но разрешил поворачивать практически на любой угол. И снова идея казалась замечательной в теории (можно было быстро слепить почти идеальную сферу из квадратных панелек, и она даже катилась по физике как шар), но на практике любой угол кроме 90 градусов ведёт к неровным дыркам, а как обрабатывать такого монстра из кода я даже не хочу думать (нужно было как-то соединять ближайшие точки крепления, а их буквально тысячи).

Ладно, решение очевидно - запретить все углы кроме 90. Но тогда получается, что строить из квадратов можно только "кубики", и для чего-то неровного нужны кучи отдельных блоков. Проблема отдельных блоков не только в том, что их нужно как-то смоделировать и описать правила сцепления между ними, но ещё и в том, что игроку придётся в менюшках копаться в поисках подходящих под его идею блоков (или - о, ужас! - листать колёсиком). Копание в десятках подвидов блоков противоречит изначальной задумке "тяп-ляп из говна и палок и полетели". Но вместе с тем хотелось бы чего-то привлекательного внешне, а не только летающие избушки из кубов.

В итоге пришёл к такой мысли: да, постройка состоит из "кубов" (вокселей), но характеристики этих кубов выбираются по их окружению, например, если у тебя три куба буквой "Г", то генерируются дополнительные треугольные опоры, якобы удерживающие эту конструкцию (наверняка видел ИРЛ). Что-то такое рассматривал для статичных зданий в прошлом, но далеко не зашёл. Чем-то напоминает "wave function collapse" или "марширующие кубы". Получается, игроку достаточно накидать кубов, а игра сама добавит декоративные детали, никак не влияющие на геймплей. Здесь учитывается необходимость часто накидывать новые кубы взамен разрушенных.

Кроме того, думал о том, что панели можно генерировать процедурно, расставляя деревянные балки в MultiMeshInstance3D (ИМХО, лучше, чем генерировать меш, если не смотреть на текстуры), что я этой ночью и накидал в сыром виде. Берём четыре точки, из них два ребра, находим середину, по шагам расставляем, поворачиваем и растягиваем одну и ту же балку с небольшой случайной вариацией - тяп-ляп панель произвольной формы готова - сам в шоке, но это проще, чем кажется. Правда, я только две оси из трёх осилил, по третьей ломается, но это не важно. Ещё непонятно что делать с коллизиями: для плоского квадрата всё просто, а что если образуется два треугольника? Да и геймплейно это никак толком не использовать без отдельного GUI - если только игра сама будет правильные формы создавать, типа тех же треугольников в случае расстановки кубов в форме "Г".

Короче! Завидую и отвлекаюсь на дизайн кораблей из игры, где корабли по геймплею создаются один раз в специальном GUI и никак не меняются до следующей остановки, тогда как моя игра, по задумке, про отчаянные попытки заткнуть дырки в непрерывно разрушающемся, гнилом и дырявом корыте, которое в любой момент может расколоться на два дырявых корыта или осыпаться балками игроку на голову, рванув самопальным двигателем и закрутившись вокруг своей оси на оставшихся, пока игрок латал дырки в попытке сохранить плавучесть. Игроку должно быть НЕКОГДА наводить красоту и выбирать треугольники из списка треугольников, НЕКОГДА дизайнить каркас причудливой формы в особом 3D редакторе каркасов, НЕКОГДА строить огромную сферу из деревянных квадратов. Но результат хотелось бы получать более-менее привлекательный геометрически (на любителя), а не вот эти унылые одинаковые кубы поверх кубов рядом с кубами под кубами. И чтоб внутри работала AStar навигация.

Почему всё так сложно? Пытаюсь совместить несовместимое? Хочу быстро, дёшево и красиво?
63 955170
>>55151

>в прошлом году ... тян ещё только создавал


Конкретно её начал в 2021. По жопе определил. ( ͡° ل͜ ͡°)
Общая концепция игры тянет свои гнилые корни с 2019.

>не хочешь по чужому концепту работать


Дело не в этом. Просто... нет, всё не просто. Попробую объяснить.

Хотел игру со строительством и ремонтом летающего транспорта "из говна и палок" или "тяп-ляп", при этом хотелось разрешить строить как угодно и где угодно без ограничений (отдельный 3D редактор каркаса в столе крафтинга сразу идёт мимо). Но на практике оказалось, что "строить как угодно без ограничений" (тяп-ляп) означает кучу проблем как игроку, так и игре. Намного удобнее строить, когда игра помогает тебе привязкой к чему-либо, и намного проще решать технические вопросы, когда дизайны транспорта имеют строгие правила.

Тогда я сделал точки крепления на краях панелей, но разрешил поворачивать практически на любой угол. И снова идея казалась замечательной в теории (можно было быстро слепить почти идеальную сферу из квадратных панелек, и она даже катилась по физике как шар), но на практике любой угол кроме 90 градусов ведёт к неровным дыркам, а как обрабатывать такого монстра из кода я даже не хочу думать (нужно было как-то соединять ближайшие точки крепления, а их буквально тысячи).

Ладно, решение очевидно - запретить все углы кроме 90. Но тогда получается, что строить из квадратов можно только "кубики", и для чего-то неровного нужны кучи отдельных блоков. Проблема отдельных блоков не только в том, что их нужно как-то смоделировать и описать правила сцепления между ними, но ещё и в том, что игроку придётся в менюшках копаться в поисках подходящих под его идею блоков (или - о, ужас! - листать колёсиком). Копание в десятках подвидов блоков противоречит изначальной задумке "тяп-ляп из говна и палок и полетели". Но вместе с тем хотелось бы чего-то привлекательного внешне, а не только летающие избушки из кубов.

В итоге пришёл к такой мысли: да, постройка состоит из "кубов" (вокселей), но характеристики этих кубов выбираются по их окружению, например, если у тебя три куба буквой "Г", то генерируются дополнительные треугольные опоры, якобы удерживающие эту конструкцию (наверняка видел ИРЛ). Что-то такое рассматривал для статичных зданий в прошлом, но далеко не зашёл. Чем-то напоминает "wave function collapse" или "марширующие кубы". Получается, игроку достаточно накидать кубов, а игра сама добавит декоративные детали, никак не влияющие на геймплей. Здесь учитывается необходимость часто накидывать новые кубы взамен разрушенных.

Кроме того, думал о том, что панели можно генерировать процедурно, расставляя деревянные балки в MultiMeshInstance3D (ИМХО, лучше, чем генерировать меш, если не смотреть на текстуры), что я этой ночью и накидал в сыром виде. Берём четыре точки, из них два ребра, находим середину, по шагам расставляем, поворачиваем и растягиваем одну и ту же балку с небольшой случайной вариацией - тяп-ляп панель произвольной формы готова - сам в шоке, но это проще, чем кажется. Правда, я только две оси из трёх осилил, по третьей ломается, но это не важно. Ещё непонятно что делать с коллизиями: для плоского квадрата всё просто, а что если образуется два треугольника? Да и геймплейно это никак толком не использовать без отдельного GUI - если только игра сама будет правильные формы создавать, типа тех же треугольников в случае расстановки кубов в форме "Г".

Короче! Завидую и отвлекаюсь на дизайн кораблей из игры, где корабли по геймплею создаются один раз в специальном GUI и никак не меняются до следующей остановки, тогда как моя игра, по задумке, про отчаянные попытки заткнуть дырки в непрерывно разрушающемся, гнилом и дырявом корыте, которое в любой момент может расколоться на два дырявых корыта или осыпаться балками игроку на голову, рванув самопальным двигателем и закрутившись вокруг своей оси на оставшихся, пока игрок латал дырки в попытке сохранить плавучесть. Игроку должно быть НЕКОГДА наводить красоту и выбирать треугольники из списка треугольников, НЕКОГДА дизайнить каркас причудливой формы в особом 3D редакторе каркасов, НЕКОГДА строить огромную сферу из деревянных квадратов. Но результат хотелось бы получать более-менее привлекательный геометрически (на любителя), а не вот эти унылые одинаковые кубы поверх кубов рядом с кубами под кубами. И чтоб внутри работала AStar навигация.

Почему всё так сложно? Пытаюсь совместить несовместимое? Хочу быстро, дёшево и красиво?
64 955171
>>55168
А ты типа компонентами все это сделал? Интерактив компонент на залупу вешаешь и она становится интерактивной. Или как?
Я просто только вкатываюсь и оче интересно, как про делают разное.
65 955177
>>54699 (OP)
" so I learned unity by making Mario, you can watch how it went on my youtube! At the end of 2021 I switched to the Godot Engine and haven't looked back!" - https://www.twitch.tv/jackie_codes

Немного мотивации
66 955178
>>55171

>залупу вешаешь и она становится интерактивной



Ну да, вроде того.
Интерактивный объект (у меня называется Interactable) это отдельная сцена. В этой сцене содержится Area3D, с которым можно отследить столкновение и скрипт, позволяющий задать текст при взаимодействии и возможные опции (такие как выбор "Yes" или "No", при взаимодействии с выключателем света).
У персонажа перед носом свой Area3D который детектит столкновение с любым Interactable.
Затем, в игровой сцене, на нужные объекты, вешается экземпляр Interactable, каждому из которых присваивается свой текст при взаимодействии и опции. Если какой-то Interactable требует особых заскриптованных действий, ему присваивается новый скрипт, который расширяет класс Interactable переопределяя метод `interact'. Например, предметы, это класс Pickable, который является наследником Interactable с переопределенным методом `interact`.
67 955179
>>55178

>Интерактивный объект (у меня называется Interactable) это отдельная сцена


А такое возможно?
Я просто рили тупой и компонент такой написал бы скриптомю
звуки.mp4933 Кб, mp4,
800x600, 0:13
68 955180
>>55165
Когда звуки добавишь?
69 955181
https://vods.exodrifter.space/
Вот ещё стримы, возможно, кому-то помогут
70 955183
>>55179

>Я просто рили тупой


Ты не тупой, ты просто документацию не читал.
https://docs.godotengine.org/en/stable/getting_started/introduction/key_concepts_overview.html#scenes

>In Godot, you break down your game in reusable scenes. A scene can be a character, a weapon, a menu in the user interface, a single house, an entire level, or anything you can think of. Godot's scenes are flexible; they fill the role of both prefabs and scenes in some other game engines.


>You can also nest scenes. For example, you can put your character in a level, and drag and drop a scene as a child of it.



>>55171

>Я просто только вкатываюсь


Читай пока документацию.

>оче интересно, как про делают разное.


Если будешь копировать кого-то без понимания основ, получится каргокультинг - когда нуб пытается внешне повторить то, что видел у кого-то, не понимания, почему этот кто-то делал именно так, а не иначе. Получаются бесполезные чучела самолётов, которые делали аборигены, думая, это такой сигнал богам для сброса качественных припасов.
1345-1589.mp42,5 Мб, mp4,
1024x768, 0:09
71 955185
>>55179
Можно рассматривать каждую отдельную сцену как класс, построенный по принципу композиции. Фактически, каждая сцена, это твой компонент.

>>55180

>Когда звуки добавишь?



Когда найду подходящую модельку тни и нейронку чтобы сгенерировать голос для начальной сцены (фраза "I'm starving" истощенным голосом).
72 955186
>>55183
Я инженер по обранизаваниманию, алло.
Я просто не могу делать говняно.
73 955187
>>55185

>класс, построенный по принципу композиции


Залупная хуита.
Только компоненты.
74 955188
>>55185

>Когда найду


Ясно, ты не понял. Пересмотри ещё раз >>55180 со звуком.

А теперь ответь на вопросы:
1. Почему у тебя "управление танчиком" (поворот на месте)?
2. Как часто ты ходишь по квартире задом, не оборачиваясь?
75 955189
>>55153
Теперь поделай игры без туториала, используя только документацию.

Можешь начать с клонов простых аркадных игр: Понг, Арканоид, Космическая Гонка и т.д. Главное - доводи их до конца. Чтобы были условия победы, поражения, меню. И чтобы были соответствующие экраны, и чтобы все это работало.
76 955190
>>55186 >>55187
Если хочешь посраться, иди в движкосрач.
Зачем изучать неподходящий тебе движок?
бутылочка-гнома.jpg43 Кб, 739x620
77 955191
>>55185
А ты количество полигонов в моделях как-то контролируешь? А то по внешнему виду кажется, будто эта швейная машинка может быть самым плотным сгустком полигонов в твоей сцене. Конечно, актуальные версии Godot уже могут в auto LOD, но это увеличивает затраты памяти и стремится к максимальной разумной детализации. Алсо, возможно у тебя там "бутылочка гнума" в моделях, а ты даже и не знаешь об этом, если не проверял всё вручную. Конечно, сейчас полигоны не такие дорогие, как раньше, но тормоза всё равно могут вызывать.
78 955195
>>55185
Почему ты записываешь с частотой кадров то 30, то вовсе 25?
Сколько кадров может выдать твоя сцена без записи (на твоём ПК)?

https://docs.godotengine.org/en/stable/classes/class_performance.html

>$Label1.text = str(Performance.get_monitor(TIME_FPS)) # больше - лучше


>$Label2.text = str(Performance.get_monitor(TIME_PROCESS)) # меньше - лучше

155169555118975848.jpg19 Кб, 650x502
79 955196
>>55188

>вопросы:



Текущая модель это времянка для работы. Базовая механика, более подходящие анимации и параметры скоростей будут задаваться на основной модели.

>>55191

>А ты количество полигонов в моделях как-то контролируешь?


Да, стараюсь, но работы много получается, так что проскакивает на что-то забиваю с мыслью "потом заменю".

>А то по внешнему виду кажется, будто эта швейная машинка может быть самым плотным сгустком полигонов в твоей сцене


Почти. 5300 треугольников. Много. Но страшнее всего - часы на кухне, 7500 треугольников после редактуры (оригинальная модель содержит 12000+ треуголников). Стараюсь брать мелочь на 1000 и меньше, свыше 1000 только большие и заметные объекты, либо мелкие но с приблежением камеры.
80 955202
>>55195

>Почему ты записываешь с частотой кадров то 30, то вовсе 25?


Чтобы экономить место на диске.

>>55195

>Сколько кадров может выдать твоя сцена без записи (на твоём ПК)?


25-35 кадров. 60 если выключить лампы хотя бы в 2х комнатах. Тени жрут.
81 955203
>>55190
Та не хочу я сраться. С чего ты взял такую дурость?
82 955204
>>55165
Ну норм, отражение как в ГТА5 на настройках уровня качества "нормальное".
83 955205
>>55188

>Как часто ты ходишь по квартире задом, не оборачиваясь?


А я вот часто так хожу. Места для разворота мало, квартира тесная, кость широкая.
84 955210
Нда, просто игнорирует освещение, но кастует тени. При усилении света от WorldEnvironment какой-то непонятный результат.
85 955218
>>55170

> Пытаюсь совместить несовместимое?


Да.

> Хочу быстро, дёшево и красиво?


Да.

> Игроку должно быть НЕКОГДА


Игроку должно быть интересно.

> на практике любой угол кроме 90 градусов ведёт к неровным дыркам


Загугли платоновы тела. Там и углы будут.
86 955219
>>55203
Вали нахуй, блять.
ля какая цаца.mp410,5 Мб, mp4,
800x600, 1:20
87 955243
>>55196
Вот так делай.
88 955246
>>55219
Это бот
89 955250
>>55246
А я может быть тоже бот. Просто я органический бот. Органический наноконгломерат на основе белкового синтеза в углеводно-аммиачном цикле. Оснащённый органической нейросетью.
90 955275
Анон, вопрос теоретический
Есть игра про хождение по комнатам, каждая комната это своя сцена, в них можно что-то делать пойнтэндклик квест да
Нагуглил два метода сохранять состояние комнат и потенциально сохранять игру - паковать сцену в ресурсы и распааковывать при необходимости или вести где-то огромный справочник переменных о состоянии комнат и их объектов и работать только с ним.
91 955277
>>55275
И я забыл задать собственно вопрос довольно очевидный
Какой из методов лты посоветуешь
92 955278
>>55275
Меня наверно обоссут, но я сцены не меняю и подгружаю/выгружаю их внутри одной основной
93 955282
>>55278
Нет, это нормальный метод работы. Тебе удобно - так делай. Какая разница, где в дереве будет игра.

>>55275

> два метода сохранять


> паковать сцену в ресурсы и распааковывать при необходимости


Оверхед. Оверкилл. И прочие оверы. Нирикаминдую.

> вести где-то огромный справочник переменных о состоянии комнат и их объектов и работать только с ним


Способ рабочий и старинный. Но есть много нюансов с ним. Самый главный - работа только в коде. Нет визуального представления. Если ты сделаешь к этому справочнику обёртки для доступа к данным, тебе будет легче работать. Самое простое - это сделать две функции

> set_data(key, value)


> get_data(key. dafault, make_key = false)


Пераметр key передавать полным строковым путём к ключу в словаре словарей, то есть, скажем, основной словарь называется world у него есть ключ location и у него значение тоже словарь, а у того словаря есть ключ door у которого значение тоже словарь, а того словаря есть ключ open который буль и значение true. Чтобы записать туда значение, ты вызываешь:

> saver.set_data("world/location/door/open", false)


Чтобы получить значение

> var door_open = saver.get_data("world/location/door/open", false)


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

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

Я делал подобную систему, только я делал ещё замороченнее. У меня менеджер сохранений при создании получал ссылку на ридонли словарь1 (эталонные данные), и получал ссылку на ридрайт словарь2 (то что будет действительно сохраняться на диск). Логика работы такова: запись данных только в словарь2. Чтение, сначала читаем словарь2, если не найдено, читаем словарь1, если не найдено возвращаем дефолт, если найдено, на любом этапе возвращаем найденное. Если третий параметр тру и ничего не найдено, в словарь2 дополнительно записываем дефолт. Кроме того, у меня были режимы чтения и записи, как мне подсказал анон в треде "если у тебя идёт сохранение, а объекты продолжают данные записывать, что будет?"
93 955282
>>55278
Нет, это нормальный метод работы. Тебе удобно - так делай. Какая разница, где в дереве будет игра.

>>55275

> два метода сохранять


> паковать сцену в ресурсы и распааковывать при необходимости


Оверхед. Оверкилл. И прочие оверы. Нирикаминдую.

> вести где-то огромный справочник переменных о состоянии комнат и их объектов и работать только с ним


Способ рабочий и старинный. Но есть много нюансов с ним. Самый главный - работа только в коде. Нет визуального представления. Если ты сделаешь к этому справочнику обёртки для доступа к данным, тебе будет легче работать. Самое простое - это сделать две функции

> set_data(key, value)


> get_data(key. dafault, make_key = false)


Пераметр key передавать полным строковым путём к ключу в словаре словарей, то есть, скажем, основной словарь называется world у него есть ключ location и у него значение тоже словарь, а у того словаря есть ключ door у которого значение тоже словарь, а того словаря есть ключ open который буль и значение true. Чтобы записать туда значение, ты вызываешь:

> saver.set_data("world/location/door/open", false)


Чтобы получить значение

> var door_open = saver.get_data("world/location/door/open", false)


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

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

Я делал подобную систему, только я делал ещё замороченнее. У меня менеджер сохранений при создании получал ссылку на ридонли словарь1 (эталонные данные), и получал ссылку на ридрайт словарь2 (то что будет действительно сохраняться на диск). Логика работы такова: запись данных только в словарь2. Чтение, сначала читаем словарь2, если не найдено, читаем словарь1, если не найдено возвращаем дефолт, если найдено, на любом этапе возвращаем найденное. Если третий параметр тру и ничего не найдено, в словарь2 дополнительно записываем дефолт. Кроме того, у меня были режимы чтения и записи, как мне подсказал анон в треде "если у тебя идёт сохранение, а объекты продолжают данные записывать, что будет?"
94 955283
>>55282

> Самое простое - это сделать две функции


> > set_data(key, value)


> > get_data(key. dafault, make_key = false)


Ну это понятно, хочется верить, что я не совсем тупенький, по работе тоже разработчик, хоть и автотестов. Спасибо за ответ, буду так делать.
96 955309
>>55278

>я сцены не меняю и подгружаю/выгружаю их внутри одной основной


Это единственный вариант для любой более-менее сложной игры, особенно если опенворлд (включая метроидвании, гигахрущи и прочее подобное).

>>55275

>сохранять состояние комнат и игру


Делаешь такое дерево сцены:
- game: game.gd
- - menu:
- - - main: menu_main.gd
- - - pause: menu_pause.gd
- - world: game_world.gd
- - - room1: world_room.gd
- - - - door: door.gd
- - - - chest: chest.gd
- - - room2: ...

У скриптов door.gd, chest.gd и world_room.gd есть общий предок game_prop.gd, в котором:

>signal state_changed(who: Node, new_state: Variant)


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

>func _on_state_changed(who: Node, new_state: Variant) -> void:


Если будешь использовать описанный сигнал.

>func get_state() -> Variant:


Возвращает актуальное состояние объекта по внешнему запросу от родителя (если планируешь сохранять только во время выхода из игры или по запросу пользователя из меню паузы).

>func set_state(new_state: Variant) -> void:


Приводит объект в требуемое состояние. Родитель вызывает это во время загрузки игры. Если вызова не было - будет состояние по умолчанию, как начало новой игры или запуск сцены по нажатию F6.

Сразу видим, что можно описать свойство:

>var state: Variant: set = set_state, get = get_state



В скрипте game_world.gd:

>func _on_state_changed(who: Node, new_state: Variant) -> void:


Если будешь использовать описанный сигнал.

>func save(file_path: String) -> int:


>func load(file_path: String) -> int:


Сохраняет/загружает состояние мира игры в/из файл, возвращает код ошибки. Формат файла - JSON будет удобнее всего. Файлы ресурсов (.tres) не рекомендую, формат у них меняется от версии к версии движка, а ещё их возможно заразить вирусом на GDScript (лол).

В скрипте game.gd - управление всей игрой. Из меню приходит запрос сохранить/загрузить мир, главный скрипт обращается к game_world.gd, дальше знаешь.

Преимущество такой системы в том, что всё говно остаётся локальным, и если у тебя какой-то сундук обосрался с загрузкой состояния, ты его тут же за хвост поймаешь, а ещё можешь комбинировать всё разными способами (шкаф с ящичками управляет состоянием ящичков, сам управляясь комнатой).

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

>func _ready() -> void:


>_ var p := get_parent()


>_ if p is GameProp or p is GameWorld:


>_ _ state_changed.connect(p, _on_state_changed)


Тогда можно вообще не париться, само работает, сохраняя возможность запускать всё независимо.

Всё состояние игры может выглядеть так:
{
Player: { health: 100, items: [ key1, ... ], },
Room1: {
Chest: [ item1, item2, item3, ],
Door: true,
Radio: 5,
Label: "здесь был Вася",
Wardrobe: { Box1: [ ... ] , Box2: [ ... ] , },
}, Room2: { ... }, }
Т.е. не обязательно, чтобы состояние было Dictionary, конкретный тип у потомков не проверяем, поскольку каждый конкретный объект получает своё говно по собственному имени и дальше разбирается сам, что конкретно он там насохранял в прошлом. Например, игровой мир чётко знает, что его стейт - это словарь, радиоприёмник чётко знает, что 5 - это ID станции, гардероб ожидает словарь с ящиками и т.д.

В теории могут возникнуть проблемы с именами, если объекты загружаются в мир динамически и при этом получают индексы в случайном порядке. Ну тут сам разбирайся, как называть динамические объекты. В качестве простого решения можно просто игнорить ошибки, но это может привести игру в непроходимое состояние, так что устаревшие сейвы нужно помечать в меню загрузки как несовместимые (см. Minecraft).

Если сохраняешь в JSON, сейвы можно вручную пофиксить. Или сделать конвертер в новую версию.

Если игровой мир супер большой, то game_world.gd должен сохранять по чанкам (отдельные файлы в файловой системе), но это другой разговор.

>>55282
Ты меня сразу извини, но это меня триггерит:

>полным строковым путём


>Чтобы записать туда значение, ты вызываешь:


>>saver.set_data("world/location/door/open", false)


>Чтобы получить значение


>>var door_open = saver.get_data("world/location/door/open", false)


>парсят входящий путь банальным сплитом


>является ли следующий элемент массивом


>У меня менеджер сохранений


Лёг в ванну спагетти и дрочишь синглтоном?
Ты поди ещё и get_node("/root/...") балуешься?

>>55283

>Спасибо за ответ, буду так делать.


Он тебя учит как себе палки в колёса вставлять.
Лучше слушай меня, я уже давно проектирую игру.
96 955309
>>55278

>я сцены не меняю и подгружаю/выгружаю их внутри одной основной


Это единственный вариант для любой более-менее сложной игры, особенно если опенворлд (включая метроидвании, гигахрущи и прочее подобное).

>>55275

>сохранять состояние комнат и игру


Делаешь такое дерево сцены:
- game: game.gd
- - menu:
- - - main: menu_main.gd
- - - pause: menu_pause.gd
- - world: game_world.gd
- - - room1: world_room.gd
- - - - door: door.gd
- - - - chest: chest.gd
- - - room2: ...

У скриптов door.gd, chest.gd и world_room.gd есть общий предок game_prop.gd, в котором:

>signal state_changed(who: Node, new_state: Variant)


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

>func _on_state_changed(who: Node, new_state: Variant) -> void:


Если будешь использовать описанный сигнал.

>func get_state() -> Variant:


Возвращает актуальное состояние объекта по внешнему запросу от родителя (если планируешь сохранять только во время выхода из игры или по запросу пользователя из меню паузы).

>func set_state(new_state: Variant) -> void:


Приводит объект в требуемое состояние. Родитель вызывает это во время загрузки игры. Если вызова не было - будет состояние по умолчанию, как начало новой игры или запуск сцены по нажатию F6.

Сразу видим, что можно описать свойство:

>var state: Variant: set = set_state, get = get_state



В скрипте game_world.gd:

>func _on_state_changed(who: Node, new_state: Variant) -> void:


Если будешь использовать описанный сигнал.

>func save(file_path: String) -> int:


>func load(file_path: String) -> int:


Сохраняет/загружает состояние мира игры в/из файл, возвращает код ошибки. Формат файла - JSON будет удобнее всего. Файлы ресурсов (.tres) не рекомендую, формат у них меняется от версии к версии движка, а ещё их возможно заразить вирусом на GDScript (лол).

В скрипте game.gd - управление всей игрой. Из меню приходит запрос сохранить/загрузить мир, главный скрипт обращается к game_world.gd, дальше знаешь.

Преимущество такой системы в том, что всё говно остаётся локальным, и если у тебя какой-то сундук обосрался с загрузкой состояния, ты его тут же за хвост поймаешь, а ещё можешь комбинировать всё разными способами (шкаф с ящичками управляет состоянием ящичков, сам управляясь комнатой).

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

>func _ready() -> void:


>_ var p := get_parent()


>_ if p is GameProp or p is GameWorld:


>_ _ state_changed.connect(p, _on_state_changed)


Тогда можно вообще не париться, само работает, сохраняя возможность запускать всё независимо.

Всё состояние игры может выглядеть так:
{
Player: { health: 100, items: [ key1, ... ], },
Room1: {
Chest: [ item1, item2, item3, ],
Door: true,
Radio: 5,
Label: "здесь был Вася",
Wardrobe: { Box1: [ ... ] , Box2: [ ... ] , },
}, Room2: { ... }, }
Т.е. не обязательно, чтобы состояние было Dictionary, конкретный тип у потомков не проверяем, поскольку каждый конкретный объект получает своё говно по собственному имени и дальше разбирается сам, что конкретно он там насохранял в прошлом. Например, игровой мир чётко знает, что его стейт - это словарь, радиоприёмник чётко знает, что 5 - это ID станции, гардероб ожидает словарь с ящиками и т.д.

В теории могут возникнуть проблемы с именами, если объекты загружаются в мир динамически и при этом получают индексы в случайном порядке. Ну тут сам разбирайся, как называть динамические объекты. В качестве простого решения можно просто игнорить ошибки, но это может привести игру в непроходимое состояние, так что устаревшие сейвы нужно помечать в меню загрузки как несовместимые (см. Minecraft).

Если сохраняешь в JSON, сейвы можно вручную пофиксить. Или сделать конвертер в новую версию.

Если игровой мир супер большой, то game_world.gd должен сохранять по чанкам (отдельные файлы в файловой системе), но это другой разговор.

>>55282
Ты меня сразу извини, но это меня триггерит:

>полным строковым путём


>Чтобы записать туда значение, ты вызываешь:


>>saver.set_data("world/location/door/open", false)


>Чтобы получить значение


>>var door_open = saver.get_data("world/location/door/open", false)


>парсят входящий путь банальным сплитом


>является ли следующий элемент массивом


>У меня менеджер сохранений


Лёг в ванну спагетти и дрочишь синглтоном?
Ты поди ещё и get_node("/root/...") балуешься?

>>55283

>Спасибо за ответ, буду так делать.


Он тебя учит как себе палки в колёса вставлять.
Лучше слушай меня, я уже давно проектирую игру.
97 955314
>>55309

>>func _ready() -> void:


>>_ var p := get_parent()


>>_ if p is GameProp or p is GameWorld:


>>_ _ state_changed.connect(p, _on_state_changed)


Или лучше будет так, в классе родителя:

>func _ready() -> void:


>_ for c: GameProp in get_children():


>_ _ if c: c.state_changed.connect(self, _on_state_changed)


Так убираем зависимость GameProp от GameWorld.
Или сделать GameWorld наследником GameProp?..

Также забыл добавить, что обработчику события изменения состояния в GameWorld следует только забирать свежие данные и отмечать необходимость сохранения на диск. А сохранение на диск должно происходить по таймеру или запросу пользователя.

Что-то не помню, нужно ли делать "if c:" в for?
98 955316
>>55314
И тебе спасибо.
99 955334
>>55210
Проспался без температуры и пришло озарение - все в порядке со светом в сабвьюпорте. Я просто забыл инвертировать камеру по оси X перед тем как перемножать ее базис на матрицу отражения.
И ни одна ебаная Кодзима в треде не сможет сказать: "ФРАТЕЛЕ! ПОСМОТРИ НА СВОЙ СКРИН! У ТЕБЯ ТАМ СВЕТ ИНВЕРТИРОВАН!".
То как временная моделька жопой вперед ходит им не нравится, то в какой последовательности игру проектировать тебя научат. А как в реальной задаче указать на косяк уставшему человеку с температурой за 38, косяк видимый на скриншотах, так жидко сренькают в штанишки своими глубокими геймдев познаниями.
100 955335
>>55334
Блядь, да просто сделай по сюжету чтобы в квартире кто-от недавно сдох и поэтому зеркала завешаны.
101 955336
>>55298
Чето тебе никто не пишет, я поиграл, анончик, прикольно, но у меня подтормаживает камера на сильном компе.
102 955338
>>55334
А ты где то писал что ты сам перемножаешь матрицы? Я вот такого не припомню, поэтому отвечаю только в рамках дефолт использования движка.
1717693871306.png15 Кб, 733x52
103 955341
>>55309

> Ты меня сразу извини, но это меня триггерит:


> Лёг в ванну спагетти и дрочишь синглтоном?


Хуану пойди расскажи, куда он лёг и чем он дрочит. Пикрелейтед официальный шаблон скрипта CharacterBody. Подставь его в свою боевую картиночку. Триггерится он, ишь ты. Валерьянки выпей.
104 955344
>>55336
Дело не в силе компа. Я сейчас на слабом проверил.
Камера летает бодро, но ловит стандартные годотовские пропуки.
Берёшь и хуячишь рандомно васд летая по всей карте пока не словишь все пропуки, тогда камера начинает бодро и без пропуков летать.
Я запустил только первую мисию и поймал примрено 10 фризов на карте и она перестала фризить после этого.
А летала изначально быстро.

Это не баг, это фича движка, ему всегда надо пропукаться и неважно какой у тебя комп.
105 955354
>>55344
Две вещи которые стоит оптимизировать:
Если 3-я версия движка, или gl версия в 4-ке, то надо использовать аддоны из шапки для прекомпиляции шейдеров. Еще был вариант с убершейдером, не пробовал.
Во-вторых, если делаешь средне-крупную игру, обязательно делать настройку качества текстур. На некропека это то, что у меня реально убрало пропуки. Я в своей демке накидывал все скачанные с инета ассеты, а в них часто бездумно закинуты 4К текстуры да еще нескольких видов. Видеопамять заканчивалась, поэтому когда поворачиаешь головой, текстуры вновь увиденных объектов начинают загружаться по узкой шине, вытесняя текстуры виденных.
По возможности убрать прозрачность. Самое страшное было от столика с пачкой стаканов и чайником.
106 955358
>>55354
Да нихуя он не делает. Это пукошизик из пукотреда. Пункул в кулачок, занюхнул и прибежал к нам в тред срать.
107 955359
>>55358
Ну так совет всем тем кто делает, очевидно.
108 955378
>>55278
Я вообще считаю, что "смена сцены" подходит только для каких-то супер простых игр, например, на джем. Ну и нубасов учить, конечно, чтобы им не заморачиваться с комплексными системами раньше времени.

>>55275
Вот как я реализую сохранение. По крайней мере, в одной относительно большой (для соло-индюка) игре я это реализовал, и оно успешно работает без ошибок.

Есть общий словарь состояний. В нём хранится всякое, что игрок может по ходу игры поменять. Например, инфа всякие сюжетные триггеры.
Уровень имеет функцию save(), эта функция возвращает своё словарь состояний уровня. Кладём словари состояний уровней в общий словарь состояний.
Все сохраняемые ноды внутри уровня принадлежат к группе save. Внутри функции save() уровня есть что-то типа:
var nodedata = {}
for node in get_tree().get_nodes_in_group("save"):
. var path = get_path_to(node)
. if node.has_method("save"):
. . nodedata[path] = node.save()
. else:
. . nodedata[path] = default_save(node)

Ну и, соответственно, у каждой сохраняемой ноды реализована своя функция save(), которая возвращает словарь. Эта функция пишет какие-то существенные для данной конкретной ноды данные и только их. Ну или defaullt_save(node) возвращает словарь с какими-то стандартными данными, типа позиции, например. Смотря что ты сочтёшь важным для сохранения.
По итогу имеем словарь всех состояний, и выглядит он как-то так:
var global_state = {
. data1="blabla",
. data2="blublu",
. current_level = "level1"
. level_data = {
. . level1 = {
. . . node1 = {position = Vector3(1, 2, 3)},
. . . node2 = {hp = 99, text = "hui"},
. . },
. . level2 = {},
. },
}

Всё, осталось любым нравящимся способом сериализовать этот словарь (например, через var_to_bytes или через JSON.stringify, есть ещё варианты на выбор) и записать его в файл.

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

Данный метод достаточно гибкий, позволяет сохранять что угодно. Сюда же можно всунуть сохранение игрока, инвентаря, сюжетных квестов и так далее. Но, конечно, серьёзный недостаток - для каждой сохраняемой ноды надо вручную описывать функцию save(). Надо ж всё-таки как-то объяснить игре, какие переменные важны и следует писать в файл, а какие надо переинициализировать заново каждый раз.
108 955378
>>55278
Я вообще считаю, что "смена сцены" подходит только для каких-то супер простых игр, например, на джем. Ну и нубасов учить, конечно, чтобы им не заморачиваться с комплексными системами раньше времени.

>>55275
Вот как я реализую сохранение. По крайней мере, в одной относительно большой (для соло-индюка) игре я это реализовал, и оно успешно работает без ошибок.

Есть общий словарь состояний. В нём хранится всякое, что игрок может по ходу игры поменять. Например, инфа всякие сюжетные триггеры.
Уровень имеет функцию save(), эта функция возвращает своё словарь состояний уровня. Кладём словари состояний уровней в общий словарь состояний.
Все сохраняемые ноды внутри уровня принадлежат к группе save. Внутри функции save() уровня есть что-то типа:
var nodedata = {}
for node in get_tree().get_nodes_in_group("save"):
. var path = get_path_to(node)
. if node.has_method("save"):
. . nodedata[path] = node.save()
. else:
. . nodedata[path] = default_save(node)

Ну и, соответственно, у каждой сохраняемой ноды реализована своя функция save(), которая возвращает словарь. Эта функция пишет какие-то существенные для данной конкретной ноды данные и только их. Ну или defaullt_save(node) возвращает словарь с какими-то стандартными данными, типа позиции, например. Смотря что ты сочтёшь важным для сохранения.
По итогу имеем словарь всех состояний, и выглядит он как-то так:
var global_state = {
. data1="blabla",
. data2="blublu",
. current_level = "level1"
. level_data = {
. . level1 = {
. . . node1 = {position = Vector3(1, 2, 3)},
. . . node2 = {hp = 99, text = "hui"},
. . },
. . level2 = {},
. },
}

Всё, осталось любым нравящимся способом сериализовать этот словарь (например, через var_to_bytes или через JSON.stringify, есть ещё варианты на выбор) и записать его в файл.

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

Данный метод достаточно гибкий, позволяет сохранять что угодно. Сюда же можно всунуть сохранение игрока, инвентаря, сюжетных квестов и так далее. Но, конечно, серьёзный недостаток - для каждой сохраняемой ноды надо вручную описывать функцию save(). Надо ж всё-таки как-то объяснить игре, какие переменные важны и следует писать в файл, а какие надо переинициализировать заново каждый раз.
109 955393
>>55378
Ну в общем-то, это метод из документации, просто причёсан тобой по твоему вкусу. У этого метода есть существенный недостаток: запрос сохранения / загрузки выходит дорогим. В одном фрейме происходит вызов множества функций save в группе. Мне этот метод не понравился. Я предпочитаю, чтобы ноды динамически обновляли свои данные в var global_state, а при запросе сохранения вот он словарик уже готовый, лочишь запись в него, сериализуешь, готово.

Алсо, метод из документации предлагает писать в сейв-файл специфичную движкоинформацию - пути нод. А они там нежелательны. Бритва Оккама.
110 955399
Ебаная работа отнимает все жизненные силы, сил делать игру вообще нет. Уже пару недель не касался проекта... Благо скоро уволюсь нахуй
image.png367 Кб, 866x515
111 955409
>>55399
Двощую, как пидорнули с работы прогресс за неделю больше, чем за полгода ковыряния в свободное от галер время.
112 955414
>>55309
Честно говоря, много ошибок сделал.

>>55341
Хуан консерватор и движку больше 20 лет.

>>55393

>запрос сохранения / загрузки выходит дорогим


>ноды динамически обновляли свои данные


Как ты предлагаешь сохранять пули в шутере?
А если у тебя пошаговая игра, зачем скорость?

Нужна система, подходящая всем.
113 955428
>>55414

> >ноды динамически обновляли свои данные


> Как ты предлагаешь сохранять пули в шутере?


Как в твоей голове из первой строки гринтекста получилась вторая? Как ты вместо "динамически" в своей голове вообразил "принудительно все свойства"? Интересна логическая цепь.
114 955435
>>55428

>принудительно все свойства


Какие данные нужны летящему снаряду?
- тип (ускорение, урон, траектория...);
- кто выпустил (для очков, френдлифаера...);
- где, куда и с какой скоростью летит.
Первые два достаточно записать один раз, но как минимум два вектора обновляются постоянно.

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

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

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

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

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

И я не спорю, что на синглтонах удобно говнокодить, накидывая километры строк каждый день. Но потом разгребать это всё, распутывать очень неудобно.
115 955439
А годот позволяет вставить видео? Ну вот есть у меня интро в .мп4, можно его как то прикрутить к сцене без костылей?
116 955440
>>55439
Да, есть готовые компоненты, только мп4 нужно перекрдировать
117 955441
>>55439
Буквально первая ссылка по запросу "Godot video":
https://docs.godotengine.org/en/stable/tutorials/animation/playing_videos.html
118 955454
>>55435
Мой принцип не
Вышеописанный принцип (не мой, он старше меня лет на 10) менеджера сохранений не обязывает создавать синглтон. Вполне реально создавать его экземпляр при старте игровой сессии и сообщать ссылку на него всем нодам, которые желают сохранять какие-либо данные.

> глобальное хранилище длинных ключей подходит только мелким пошаговым игрушкам


Еще раз: >>55341 это у Хуана редактор Годота мелкий проект? Напишешь клон Годота на пару вечеров, м? Ведь именно ProjectSettings выглядит ровно так же. А еще, если вспомнить, работа с анимационными стейтмашинами из кода так же реализована.
Алсо, именно для крупных проектов нужны разветвлённые древовидные базы данных. Мелким проектам подойдёт одноуровневый ассоциативный массив.

Хорошо, давай разумно подойдём к проблеме. Критикуя предлагай. Как ещё ты предложишь обращаться к определённой ветви древовидной структуры, кроме как указанием её полного или относительного пути в дереве?
119 955455
>>55454
Еще планирую сделать сериализацию в XML на имеющемся в движке базовом парсере, там будет возможность прописывать каждой ноде и чайлды и параметры. ЖСОН так не может без костылей.
120 955459
>>55393

>метод из документации, просто причёсан тобой по твоему вкусу


А, да? Видимо, очень давно его осваивал, забыл, что по доке делал.
Энивей, документация хуйни не посоветует.

>запрос сохранения / загрузки выходит дорогим


Ну, тут смотря какой геймплей и когда вызывается сохранение и как много опрашиваемых объектов. У меня между уровнями, да и нод для сохранения от силы пара десятков наберётся.

>писать в сейв-файл специфичную движкоинформацию - пути нод.


Можно составить манифест, где алиасы/IDы нод будут сопоставлены их путям. И в сейв-файл писать не пути, а эти алиасы/IDы.
Но мне кажется, это лишняя заморочка просто для удовлетворения внутреннего перфекционизма. Не могу себе представить реальный кейс уровня /gd/, где бы она была оправдана. Какой-то долгоиграющий игросервис, который в процессе жизненного цикла может поменять движок. Лично я таких не делаю.
121 955478
>>55250
Слы, калогмерат. Ты все умные слова перечислил которые знаешь?
Хуя ты блистаешь интеллектом!
122 955481
>>55459

> Не могу себе представить реальный кейс уровня


Если ты что-то поменял в порядке нод в процессе доработки игры - старые сохранения автоматом становятся неработоспособны. Я это в голове держу, когда высказываюсь против записи в файл сохранения движкоспецифичной инфы. Если же там будут IDы объектов в твоей собственной терминологии, то со старыми сейвами проблем будет меньше. Это опять же, как сделать.
123 955486
>>55478
Это для тебя умные слова? Чел, ты где-нибудь учился, что-нибудь читал в своей жизни?
Если тебе до 12 лет, то еще ладно.
124 955493
>>55454

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


Почему бы тогда не разделить его на несколько менеджеров в разных частях игры, которые затем объединяют всё накопленное добро в одну кучу?

>у Хуана редактор Годота


>ProjectSettings


Да чё ты к нему прицепился. Из настроек проекта ты раз в три года гравитацию достаёшь и больше о нём не вспоминаешь, пока не доделаешь игру и не приступишь к прикручиванию меню опций (где эти настройки изменяются игроком один раз за все 5000 часов геймплея, если не изменял ПК).

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

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

>работа с анимационными стейтмашинами


Это вообще совсем другое. Ты настраиваешь ноду AnimationTree где-то рядом с моделькой, создаёшь скрипт, управляющий анимациями, и обращаешься снаружи только к своему скрипту (от его родителя). Никакого глобального доступа из случайных мест.

>именно для крупных проектов нужны разветвлённые древовидные базы данных


Базы данных чего?

>Как ещё ты предложишь обращаться к определённой ветви древовидной структуры, кроме как указанием её полного или относительного пути в дереве?


Так ведь Dictionary и есть древовидный, но ты не указываешь полный путь в дереве, а получаешь отдельную веточку, которая тебе нужна.

>>55455

>сериализацию в XML


Зачем? XML тяжёлый, медленный и не нужен.

>ЖСОН так не может


В JSON любые данные сохранить можно.

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


hjson: https://hjson.github.io/try.html
NodeName: {
class: Node
children: { Node1: {}, Node2: {}, Node3: {} }
script: my_node.gd
exports: { my_var: 0 }
}

>>55481

>поменял в порядке нод в процессе доработки


>старые сохранения неработоспособны


Это легко решается версиями игры:
Версии 0.x могут ломать сейвы как хотят.
Версии 1.x должны зафиксировать сейвы.
Версия 2.x и старше могут ломать один раз.

Версии до 1.0 - альфы, версии после 1.0 - патчи.
Версию 2.0 делаем только когда очень нужно всем игрокам сломать сейвы, моды и прочее.
Кто не хочет - сидит на старой версии.

Вот если твоя система сохранения совсем ломает игру, если ты изменил порядок нод - вот это уже большая проблема, тогда ты ничего изменить не можешь без переделывания всей системы.
124 955493
>>55454

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


Почему бы тогда не разделить его на несколько менеджеров в разных частях игры, которые затем объединяют всё накопленное добро в одну кучу?

>у Хуана редактор Годота


>ProjectSettings


Да чё ты к нему прицепился. Из настроек проекта ты раз в три года гравитацию достаёшь и больше о нём не вспоминаешь, пока не доделаешь игру и не приступишь к прикручиванию меню опций (где эти настройки изменяются игроком один раз за все 5000 часов геймплея, если не изменял ПК).

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

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

>работа с анимационными стейтмашинами


Это вообще совсем другое. Ты настраиваешь ноду AnimationTree где-то рядом с моделькой, создаёшь скрипт, управляющий анимациями, и обращаешься снаружи только к своему скрипту (от его родителя). Никакого глобального доступа из случайных мест.

>именно для крупных проектов нужны разветвлённые древовидные базы данных


Базы данных чего?

>Как ещё ты предложишь обращаться к определённой ветви древовидной структуры, кроме как указанием её полного или относительного пути в дереве?


Так ведь Dictionary и есть древовидный, но ты не указываешь полный путь в дереве, а получаешь отдельную веточку, которая тебе нужна.

>>55455

>сериализацию в XML


Зачем? XML тяжёлый, медленный и не нужен.

>ЖСОН так не может


В JSON любые данные сохранить можно.

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


hjson: https://hjson.github.io/try.html
NodeName: {
class: Node
children: { Node1: {}, Node2: {}, Node3: {} }
script: my_node.gd
exports: { my_var: 0 }
}

>>55481

>поменял в порядке нод в процессе доработки


>старые сохранения неработоспособны


Это легко решается версиями игры:
Версии 0.x могут ломать сейвы как хотят.
Версии 1.x должны зафиксировать сейвы.
Версия 2.x и старше могут ломать один раз.

Версии до 1.0 - альфы, версии после 1.0 - патчи.
Версию 2.0 делаем только когда очень нужно всем игрокам сломать сейвы, моды и прочее.
Кто не хочет - сидит на старой версии.

Вот если твоя система сохранения совсем ломает игру, если ты изменил порядок нод - вот это уже большая проблема, тогда ты ничего изменить не можешь без переделывания всей системы.
125 955497
>>55481

>поменял в порядке нод в процессе доработки игры


Так это, игра зарелизена? Или всё ещё в разработке? Если в разработке, то похеру, сохранения поломаются только у меня. Если зарелизена - то явно никто уровни перепиливать уже не будет.
А если уровни перепиливаются после релиза, то это игра-сервис уже получается. Не уровень /gd/.
Ну или ранний доступ. Но это рак. Кто таким занимается, мы таких обоссываем. Игра должна быть готовой на релизе. Ранний доступ это альфатест за ваши деньги, и никто не гарантирует, что сейвы не поломаются.
126 955518
>>55486
Жизлоид, угомонись
127 955519
>>55497

>Если в разработке, то похеру, сохранения поломаются только у меня.


Ну, допустим, не только, но и у плейтестеров, но:

>альфатест - не гарантирует, что сейвы не поломаются


Тут полностью согласен, альфа на то и альфа.

Вот Godot - хорошая игра. Всегда предупреждают, что альфа-версии могут поломать сейвы (проекты).

>А если уровни перепиливаются после релиза, то это игра-сервис уже получается. Не уровень /gd/.


Почему нет? Пилить можно бесконечно для души. Некоторые инди проекты живут больше 20 лет.

>ранний доступ - это рак, мы таких обоссываем


Лол, кто сказал? А если ранний доступ бесплатно? И вообще, мы бы не смогли поиграть во многие интересные проекты, не будь раннего доступа.

Вот пример, давно играл, в целом нравилось:
https://store.steampowered.com/app/251570/
- больше 10 лет в раннем доступе, и только весной 2024 они начали планировать выход 1.0:

>Q: Why release now?


>A: We have been developing 7 Days for nearly 12 years and have had over twenty large scale early access releases that have brought the game to a significantly different place and quality than where it began. <...> The Fun Pimps have and will continue to support 7 Days to Die development with a majority of their resources.


Алсо, о сейвах:

>Q: Save incompatibility between console versions? Also, will there still be Save incompatibility between patches?


>A: Due to the technical architecture of 7 Days to Die’s game engine, users will have to start a new game with each major update. Eventually, this will not be the case.


Отзывы об игре:

>Очень положительные (88% из 217,324)


Теперь представь, что они вместо раннего доступа в 2013 держали бы игру у себя, кормя народ пустыми обещаниями "как круто будет, когда сделаем релиз", только в 2024 выпустили свой кубач, когда все уже наигрались в майн, выросли, женились, умерли.

Ранний доступ - благо. А мошенников везде полно.
127 955519
>>55497

>Если в разработке, то похеру, сохранения поломаются только у меня.


Ну, допустим, не только, но и у плейтестеров, но:

>альфатест - не гарантирует, что сейвы не поломаются


Тут полностью согласен, альфа на то и альфа.

Вот Godot - хорошая игра. Всегда предупреждают, что альфа-версии могут поломать сейвы (проекты).

>А если уровни перепиливаются после релиза, то это игра-сервис уже получается. Не уровень /gd/.


Почему нет? Пилить можно бесконечно для души. Некоторые инди проекты живут больше 20 лет.

>ранний доступ - это рак, мы таких обоссываем


Лол, кто сказал? А если ранний доступ бесплатно? И вообще, мы бы не смогли поиграть во многие интересные проекты, не будь раннего доступа.

Вот пример, давно играл, в целом нравилось:
https://store.steampowered.com/app/251570/
- больше 10 лет в раннем доступе, и только весной 2024 они начали планировать выход 1.0:

>Q: Why release now?


>A: We have been developing 7 Days for nearly 12 years and have had over twenty large scale early access releases that have brought the game to a significantly different place and quality than where it began. <...> The Fun Pimps have and will continue to support 7 Days to Die development with a majority of their resources.


Алсо, о сейвах:

>Q: Save incompatibility between console versions? Also, will there still be Save incompatibility between patches?


>A: Due to the technical architecture of 7 Days to Die’s game engine, users will have to start a new game with each major update. Eventually, this will not be the case.


Отзывы об игре:

>Очень положительные (88% из 217,324)


Теперь представь, что они вместо раннего доступа в 2013 держали бы игру у себя, кормя народ пустыми обещаниями "как круто будет, когда сделаем релиз", только в 2024 выпустили свой кубач, когда все уже наигрались в майн, выросли, женились, умерли.

Ранний доступ - благо. А мошенников везде полно.
128 955557
>>54699 (OP)
Стоит ли вообще постить в этот ИТТ тред свои успехи на Godot или это только раздражает?
129 955562
>>55557

>это только раздражает


Раздражает тебя - не пости.
Раздражает остальных - пости.
130 955563
Ебаная прокрастинация, кликер по факту готов на 90% осталась нудятина которую я благополучно откладываю каждый раз на завтра. Кучу времени убил еще на юай, думал лучше будет если стилево все сделаю, а как оказалось вышло дерьмецо, пришлось вернуться к дефолтной теме которой как оказалось более чем достаточно для того что хотел.
Возьму волю в кулак и за сегодня постараюсь доделать уже, слишком уж дохуя времени я нихуя не делаю.

Кстати, видел итт или в прошлом жалобу на локаллайт в четверке, и тащемто удваиваю, чзх, в моем пиксельном долгострое таже хуйня, разрешение текстуры света никак на это не влияет, тени тоже, фпс тупо падает до 30 с нихуя, причем если центр камеры выйдет из зоны освещения то фпс возвращается к 60 и это при том что эти же источники света все еще в зоне видимости. Я в движке по сути еще нуфаня, поэтому как фиксить хуй его знает, а почему так происходит тем более, гуглить пытался но тщетно. Это на глес3 ес че такое, как на форварде это работает не тестил, мб там нормально все. Забыл добавить что это в канвасмод только так, на вьюпорт и дисейбл все работает отлично в 60 фпс. Надеюсь в 4.3 пофиксят, и надеюсь добавят возможность делать веб билды без SAB, я хоть и к тройке привык уже, но буду честным, по сравнению с четверкой это обрубок.
131 955572
>>55563

>кликер по факту готов на 90% осталась нудятина


Классика. http://ru.wikipedia.org/wiki/Закон_Парето

>20% усилий дают 80% результата, а остальные 80% усилий — лишь 20% результата



>Кучу времени убил еще на юай


В чём проблема была? Вроде всё просто.

>локаллайт


Што? Имхо, 2D свет в плане теней вообще сплошной косяк (пробовал в 3.x).
Не понимаю весь этот дрочь на тени в 2D играх, если не клон террарии...
Screenshot57.png456 Кб, 948x584
132 955573
Крч.
Впереди вырисовывается долгая пауза из-за множества ассетов которые придется сделать. Так что решил не тянуть и пернул своим СХ на реддит, следующий если будет то очень не скоро.
133 955577
>>55572

>В чём проблема была?


В стиле. То что было в голове совершенно не вписалось в визуал игры.

>>локаллайт


Поинтлайт бтв.

>Не понимаю весь этот дрочь на тени в 2D играх


Да на тени пох вообще, узнать бы с какого хуя фпс падает из за дефолтного света.
4x.png11 Кб, 808x194
134 955579
В чём проблема сделать @export var anything: Variant?
4.3 уже всё, теперь только 4.4 ждать. В 4.3 только костыль:
@export_custom(PROPERTY_HINT_NONE, "") var my_var: Variant
135 955584
>>55577

>То что было в голове совершенно не вписалось в визуал игры.


А ты прям в редакторе проекта делал?
Обычно сначала делают концепт UI - в спец софте, в пейнте, на бумаге, хоть на салфетке...

>фпс падает из за дефолтного света


Там же пиксели перемножаются, затраты неизбежны, больше пикселей - больше трат.

>>55563

>в четверке


>фпс тупо падает до 30


>фпс возвращается к 60


>Это на глес3 ес че такое, как на форварде это работает не тестил


>Надеюсь в 4.3 пофиксят


Проверил на 4.3-beta1, в GLES3 и Forward+ одинаково 1500+ фпс независимо от света.
Смотри, что и как там у тебя отображается кроме собственно источников света.
ПЕЧ.png1 Кб, 565x30
136 955586
>>55563

>фпс тупо падает до 30


>>55577

>фпс падает


Ты ещё дрова проверь, у меня-то топовая ПЕЧ.
137 955597
>>55518
А, это был такой троллинг тупостью? Очень талантливо!
138 955636
>>55597
Ты сменил тактику бампов? Уже не предлагаешь делать игры?
139 955678
>>55636
Ты обознался
140 955691
>>55519
Пиздец. 12 лет кормить людей кривым недоделанным говном и стричь бабло. Отзывы положительные: ну да, ну подождём ещё немножечко, и игра будет готова, а щас ранний доступ, ну простим ей, что она багованная, надо просто потерпеть.
Сука. Высшая степень мудачества и лицемерия - выкидывать продукт в магазин и 12 лет притворяться, что это не готовый продукт, за который ты хочешь бабло, а просто ну вот демка для выставки. Когда беседка выкатывает фоллаут 76 без неписей, еле работающий от багов, её даже метка раннего доступа не спасёт - говном закидают. Когда то же самое делает нонейм индюк - ну тут молодец чо, высрал нам кусочек счастья, спасибо. Хотя шо то игра-сервис для долговременного кормления, шо это. Никакой разницы.

>А если ранний доступ бесплатно?


А покажи мне хоть один ранний доступ бесплатно без ссылки на донат.
141 955694
Очень глупый вопрос, но ответа ни в одном гайде для вкатунов я пока не нашел. Какое разрешение экрана в настройках проекта ставить? Дефолтное или побольше, хотя бы фуллхд? Насколько это важно? Есть у меня предчувствие, что потом заколебусь все переделывать, если на старте этим вопросом не озабочусь.
142 955696
>>55694

>ответа ни в одном гайде не нашел


Плохо искал, лалка. Учись читать документацию.
https://docs.godotengine.org/en/stable/tutorials/rendering/multiple_resolutions.html

>потом заколебусь все переделывать


Всё в порядке, переделать несложно.
143 955699
>>55691

>ранний доступ бесплатно без ссылки на донат


Вот годная бесплатная игра, донат символический:
https://store.steampowered.com/app/304930/
Прошла три/четыре стадии:
- режимы игры в роблоксе - я тогда о нём не знал
- кривая юнити-поделка 0.x-1.x? - тут не уверен
- кривая юнити-поделка 2.x - я в это играл
- ровная юнити-поделка 3.x - тоже играл
Суммарно где-то... лет -дцать? Раньше 2014 начал.
Геймплей лучше большинства ААА шутеров.
Думаю, на Godot можно сделать не хуже.

>12 лет кормить людей кривым


Ну, а люди и не против. Играть-то можно.

>подождём ещё немножечко


Чего? Играй. Вот ждали киберпук77 - дождались...

>фоллаут 76


>говном закидают


>нонейм индюк - ну тут молодец чо


>Никакой разницы.


Разница огромная:
- инди = превозмогатор трудностей;
- ААА = просираторы полимеров.
Первым уважение, вторым нет прощения.

Ещё есть стар ситизен - это развод "китов" на бабки.
143 955699
>>55691

>ранний доступ бесплатно без ссылки на донат


Вот годная бесплатная игра, донат символический:
https://store.steampowered.com/app/304930/
Прошла три/четыре стадии:
- режимы игры в роблоксе - я тогда о нём не знал
- кривая юнити-поделка 0.x-1.x? - тут не уверен
- кривая юнити-поделка 2.x - я в это играл
- ровная юнити-поделка 3.x - тоже играл
Суммарно где-то... лет -дцать? Раньше 2014 начал.
Геймплей лучше большинства ААА шутеров.
Думаю, на Godot можно сделать не хуже.

>12 лет кормить людей кривым


Ну, а люди и не против. Играть-то можно.

>подождём ещё немножечко


Чего? Играй. Вот ждали киберпук77 - дождались...

>фоллаут 76


>говном закидают


>нонейм индюк - ну тут молодец чо


>Никакой разницы.


Разница огромная:
- инди = превозмогатор трудностей;
- ААА = просираторы полимеров.
Первым уважение, вторым нет прощения.

Ещё есть стар ситизен - это развод "китов" на бабки.
144 955880
Немного притормаживает, но в целом играбельно.

>>55562

>Раздражает остальных - пости.


Ты сам напросился.
ВЫШЕЛ! ВЫШЕЛ! 145 955949
Вышел Godot Manager 0.2.6.
Уже почти не падает.
Всем, кому нужно держать N проектов на M версиях движка, и не переживать насчёт внезапного коррапта случайным открытием проекта не в той версии.
146 955955
>>55880
Jolt физику пробовал подключать?
147 955956
>>55949
Для этого есть системы контроля версий же
148 955963
>>55956
Нет, не для этого.
image.jpg40 Кб, 807x619
149 956003
>>55955

>Jolt физику


Так это она и есть. Godot Physics ощутимо медленнее.

В сцене 56 RigidBody3D летают + 56 AnimatableBody3D потомками привязаны, однако, физически ни с чем не сталкиваются. Если отключить все AnimatableBody3D, будет >75 FPS, но мне они нужны по задумке: внешний RigidBody3D прост как кирпич, а внутренние сложные коллизии отдельным слоем для игрока и неписей. Но мне достаточно будет парочку сложных пепелацев, остальное физическое должно быть намного проще устроено, так что на видео преувеличенная нагрузка.

...плюс там анимированные генераторы частиц. Неожиданно, но их влияние не так уж и высоко. AnimatableBody3D съедают больше 75% времени. Переключение на StaticBody3D лучше не делает. Понимаю, двигать статики вообще не ок. Нужно попробовать один лайфхак с телепортацией...
150 956012
>>55949

>Всем, кому нужно держать N проектов на M версиях движка, и не переживать насчёт внезапного коррапта случайным открытием проекта не в той версии.


Палю лайфхак, как не запутаться в версиях:
1. У тебя две отдельных папки:
- папка Godot с редакторами;
- папка Projects с проектами.
2. В папке проектов делаешь ярлык, указывающий на редактор нужной версии и нужную папку проекта. Можно разместить ярлык прямо в папке проекта.
3. Называешь ярлык подходящим именем:

>Edit Project AAA with Godot 3.6.beta


>Edit Project Beta with Godot 4.2.2


>Edit Tests with Godot 4.3.beta


4. Открываешь проекты только через эти ярлыки. Открывается Godot Editor, во встроенный менеджер проектов ничего не попадает, если сам не добавлял.
5. Для апгрейда проекта на новую версию:
- Ctrl+C/Ctrl+V по старому ярлыку;
- изменяешь в параметрах 4.2.2 на 4.3;
- запускаешь проект кликом по новому ярлыку.
6. Также можно сделать ярлык на запуск игры. Без экспортирования, без редактора - нажал и играешь.

Мне лично всё равно приходится папку проекта открывать, чтобы закинуть туда текстуры, модельки. Почему бы не сделать ярлыки на редактор там же?
151 956079
>>56012
1. install godot-manager
2. внутри него install godot's нужных версий
3. Добавляешь проект, прописываешь ему нужную версию.
ПРОФИТ!
3 пункта против 6 твоих, пердолинга с ярлыками. Палит он лайфхак. Пиздец просто.
152 956082
>>56079

>install godot-manager


Лишняя зависимость с багами и тормозами.

>внутри него install godot's нужных версий


Качаю сборки с официального сайта, а не васянки.

>Добавляешь проект, прописываешь


А потом у твоего godot-manager конфиг ломается.

>пердолинга с ярлыками.


Настроил несколько лет назад и до сих пор юзаю стабильно, пока ты ждёшь багфиксы: >>55949

>Уже почти не падает.


Лол, "почти" - это сколько раз в день?

Ты просто не представляешь, как это круто, когда ты ПРОСТО кликаешь на ярлык на рабочем столе и твой проект моментально запускается на выполнение или в редакторе, без лишних шагов в куче менеджеров.

>3 пункта против 6 твоих


Мои пункты займут пару минут один раз, а твои замедляют запуск проекта регулярно, да требуют багфиксов от падений. И вообще это юнитячество.
153 956084
>>56082

>Ехал васян через реку


>Видит васян в реке васян


>Сунул васян васян в васян


>Васян васян васян васян


Не продолжай, я понял, что ты Игорян.
image.png143 Кб, 1280x1024
154 956089
Это пыздэц анон, сидел двигал я ползунки значит, корректировал формулы, как вдруг пидоры оффнули свет, и че ты думаешь, наебнулся блять телек который юзал вместо моника, врубается и через секунду оффается картинка, такая хуйня и до этого была, только выключение и включение помогало, а сейчас нихуя.. Откопал старый 4:3 моник, ебать все конечно непривычно мелкое, пикрил чтоб понятней было, еще и блять квадрат этот ебаный, я хуй знает как теперь адекватно работать, видимо придется ближайшие пару месяцев ахуеть как терпеть ибо позволить новый пока не могу. Похуй, пляшем.
Кликер кстати готов, осталось яндекс прибить гвозядми, и аудиолибу прикрутить, да юай немного доредачить и можно уже релизить.
155 956108
>>56089
Диды на калькуляторах игры программировали. И ты сможешь! Тем более твой проект не проебался и не закорраптился.

А вообще ибп прикупи, когда-нибудь в будущем.
156 956118
>>56089

>врубается и через секунду оффается картинка


С телевизором всё ок. Нужно предохранитель пофиксить. В инторнете погугли статейки. Это копейки будет стоить.
1390582632001.png5 Кб, 473x454
157 956147
Сап анон, я хочу сделать средневековый лоуполи 3Д экшон с мечами.

Из фичей мне необходимы:

1. Тулзы для процедурной анимации скелетал мешей

2. Что-то что поможет реализовать расчленёнку

3. Хорошая система коллизий чтобы детектить когда меч касается меша игрока или нпц

В годоте это всё имеется?
158 956148
>>56147
А каков твой опыт в геймдеве?
159 956151
>>56148
Это имеет значение?
160 956152
>>56151
Да.
161 956164
>>56089

>врубается и через секунду оффается картинка, такая хуйня и до этого была, только выключение и включение помогало, а сейчас нихуя


Конденсаторы проверь. Блоку питания необходимо зарядить конденсаторы, если конденсаторы засохли или протекли, нормально включиться БП не сможет. Электролитические конденсаторы сохнут неизбежно, это наименее долговечный компонент (~15 лет).

>блять квадрат этот ебаный


Нажми Ctrl + Shift + F11. Я забиндил на просто F11.
https://docs.godotengine.org/en/stable/tutorials/editor/default_key_mapping.html#general-editor-actions
Можно вынести редактор кода в отдельное окно:
https://docs.godotengine.org/en/stable/tutorials/editor/customizing_editor.html#splitting-the-script-or-shader-editor-to-its-own-window
162 956167
>>56147

>средневековый лоуполи 3Д экшон с мечами


Нормально, Godot потянет, видел такие демки.

>процедурной анимации скелетал мешей


Всё норм, можно анимировать процедурно.

>тулзы


Какие тебе тулзы, если анимации процедурные? Процедурные анимации - это анимации кодом, как замена ручным анимациям или motion capture.

Если ты про регдолл, для него есть встроенные функции, однако, с ним придётся повозиться...

>поможет реализовать расчленёнку


Расчленёнка в играх бывает двух видов:

1. Части тела заранее отделены друг от друга и могут отделяться только в определённых местах. Дёшево и сердито, подходит 99% играм, но художнику нужно повозиться, создавая отдельные части тел. Какой-то особенный код тут не нужен, всё достаточно просто. Гарантированно нет проблем с анимациями мешей.

2. Цельный меш процедурно разрезается в реальном времени. Код сложный, багов много, будет нагружать компьютер игрока, разрезы нереалистичные. Зато достаточно накинуть скрипт. Видел аддоны:
https://github.com/PiCode9560/Godot-4-Concave-Mesh-Slicer
https://youtu.be/_yqTljJ0mW0
Не знаю, будет ли это работать с анимациями.

>Хорошая система коллизий чтобы детектить когда меч касается меша игрока или нпц


Тут довольно интересная ситуация.

Разработчики официально признают, что физический движок, встроенный в Godot, кривой и косой, так что официально рассматривают внедрение нового (Jolt). Однако, ты уже сейчас можешь попробовать его сам:
https://github.com/godot-jolt/godot-jolt
Достаточно закинуть нужную dll-ку.

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

Также есть другие альтернативы, можешь PhysX прикрутить или Havok, но они вроде как платные. Возможно прикрутить Bullet, но у него свои косяки, поэтому от него избавились при переходе на 4.0.

Короче, о физике не волнуйся - она есть, а при острой необходимости её можно заменить альтернативной.
162 956167
>>56147

>средневековый лоуполи 3Д экшон с мечами


Нормально, Godot потянет, видел такие демки.

>процедурной анимации скелетал мешей


Всё норм, можно анимировать процедурно.

>тулзы


Какие тебе тулзы, если анимации процедурные? Процедурные анимации - это анимации кодом, как замена ручным анимациям или motion capture.

Если ты про регдолл, для него есть встроенные функции, однако, с ним придётся повозиться...

>поможет реализовать расчленёнку


Расчленёнка в играх бывает двух видов:

1. Части тела заранее отделены друг от друга и могут отделяться только в определённых местах. Дёшево и сердито, подходит 99% играм, но художнику нужно повозиться, создавая отдельные части тел. Какой-то особенный код тут не нужен, всё достаточно просто. Гарантированно нет проблем с анимациями мешей.

2. Цельный меш процедурно разрезается в реальном времени. Код сложный, багов много, будет нагружать компьютер игрока, разрезы нереалистичные. Зато достаточно накинуть скрипт. Видел аддоны:
https://github.com/PiCode9560/Godot-4-Concave-Mesh-Slicer
https://youtu.be/_yqTljJ0mW0
Не знаю, будет ли это работать с анимациями.

>Хорошая система коллизий чтобы детектить когда меч касается меша игрока или нпц


Тут довольно интересная ситуация.

Разработчики официально признают, что физический движок, встроенный в Godot, кривой и косой, так что официально рассматривают внедрение нового (Jolt). Однако, ты уже сейчас можешь попробовать его сам:
https://github.com/godot-jolt/godot-jolt
Достаточно закинуть нужную dll-ку.

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

Также есть другие альтернативы, можешь PhysX прикрутить или Havok, но они вроде как платные. Возможно прикрутить Bullet, но у него свои косяки, поэтому от него избавились при переходе на 4.0.

Короче, о физике не волнуйся - она есть, а при острой необходимости её можно заменить альтернативной.
163 956176
>>56167

>Какие тебе тулзы, если анимации процедурные? Процедурные анимации - это анимации кодом, как замена ручным анимациям или motion capture.


Например контрол риг с инверс кинематикой, чтобы я не задавал IK вручную. Если есть еще заранее заданные функции для контрол рига типа aimAt ваще круто будет.

>Не знаю, будет ли это работать с анимациями.


Правильный вопрос будет ли это работать с скелетал мешами. Но это уже что-то, спасибо.

>Разработчики официально признают, что физический движок, встроенный в Godot, кривой и косой, так что официально рассматривают внедрение нового (Jolt). Однако, ты уже сейчас можешь попробовать его сам:


Пичалька, а че там редко возникает потребность коллизии детектить? В целом могу и сам прикрутить, всё-таки тот факт что годот опен-сурс это серьезное преимущество для такого как я, который никому ничего не хочет быть должен.
164 956213
>>56176

>инверс кинематикой


Пока что всё не очень, есть только это:
https://docs.godotengine.org/en/stable/classes/class_skeletonik3d.html
Но оно давно deprecated. Вот старое демо:
https://godotengine.org/asset-library/asset/523
Можно поискать аддоны с готовым кодом IK.

>редко возникает потребность коллизии детектить?


Там проблемы такого уровня:
- при движении по стыкам можно подскочить;
- бывает лютая тряска, особенно в джойнтах;
- не тянет 100500 ригидбоди, максимум ~1500.
Фиксили-фиксили, но всё ещё далеко до идеала.
165 956214
>>56176
Ещё есть известная проблема производительности рейкастов, из-за того, что они при запросе из кода формируют ответ большим словарём (Dictionary), существенно ограничивая число запросов. При том сторонние языки (C#, C++) тут ничем не помогут - бутылочное горлышко в API физической системы.

Т.е. ты можешь кинуть несколько сотен рейкастов в один кадр, прежде чем у тебя ФПС упадёт ниже 60, в то время как в других движках ты мог бы кинуть намного больше за один кадр. Кто-то это считает критическим недостатком и даже высрал пост с критикой, но всем остальным норм, потому что так много рейкастов практически никому не нужно.
166 956225
>>56214
>>56213
А вот ета хуйова. Ладно, попробую высрать прототип, может не всё так плохо.
167 956247
Игры-то делаете?
168 956257
>>55334
жутко.
169 956344
>>54699 (OP)
Здравствуйте, пилю, ради самобучения, свой клон vampire survivors (если что я в него никогда не играл, только слышал). Так вот, возник вопрос что лучше использовать CharacterBody2d или же Area2D, гугление и чтение доступных сигналов подсказало, что мне нужно использовать и то и то. Первое из-за удобный поддержки и передвижения и для коллайда с границами карты и прочими препятствиями, а второе, что бы детектить попадания и прочие регистрации урона. Только вот и Character body и Area2D требуют CollisionShape, и фигачить у одного обекта сразу две одинаковые ноды колиизии выглядит максимально костыльно. Так и надо или же существует способ сделать так, что бы обе ноды работали с одной и той же нодой коллизии?
170 956347
>>56344
Тебе не надо ареа 2д
171 956349
>>56347
А как тогда? У Characterbody и Colisionshape нету сигнала body_entered, а именно он нужен, что бы регистрировать дамаги.
172 956352
>>56349
Используй is_colliding из рейкаста прикрепленного к пуле для вызова функции хит в чарбоди или любом другом коллайдере.
173 956353
>>56352
Ну так дамажат не только "пули", а ещё сами враги, если ходить через них, плюс всякие слеши и другие объемные прожектайлы которые будет запускать игрок.
174 956361
>>56344

>vampire survivors


Как понимаю, это "буллет хелл наоборот":
1. На карте нет никаких препятствий. Совсем.
2. Мобы свободно наслаиваются друг на друга.
3. Игрок спамит атаками по чётким паттернам.
4. Мобы отлетают за 1-2 попадания от игрока.
5. Весь фан в создании новых паттернов атаки.

Из этого следует, что:
0. Нужно выдать максимум мобов и снарядов.
1. CharacterBody2D тут бесполезен и не нужен.
2. Достаточно Area2D как датчика попаданий.
3. Перемещение в сторону игрока по прямой.

Простейшая композиция сцены:
- Mob/Bullet: Area2D
- - Circle: CollisionShape2D
- - Sprite: AnimatedSprite2D

Area2D настраиваешь так:
1. У мобов: слой - mob, маска: ничего
2. У снарядов: слой: ничего, маска: mob
3. У игрока: слой: ничего, маска: mob
Снаряд бьёт моба, игрок бьётся об моба.
Сами мобы только наводятся на игрока:

>@export var player: Area2D


>func _physics_process(delta):


> position += position.direction_to(player.position) speed delta



Если будет медленно:
1. https://github.com/godot-jolt/godot-jolt
2. Можно попробовать Rect2.has_point()...
3. GDScript медленный, перепиши на C++))))
174 956361
>>56344

>vampire survivors


Как понимаю, это "буллет хелл наоборот":
1. На карте нет никаких препятствий. Совсем.
2. Мобы свободно наслаиваются друг на друга.
3. Игрок спамит атаками по чётким паттернам.
4. Мобы отлетают за 1-2 попадания от игрока.
5. Весь фан в создании новых паттернов атаки.

Из этого следует, что:
0. Нужно выдать максимум мобов и снарядов.
1. CharacterBody2D тут бесполезен и не нужен.
2. Достаточно Area2D как датчика попаданий.
3. Перемещение в сторону игрока по прямой.

Простейшая композиция сцены:
- Mob/Bullet: Area2D
- - Circle: CollisionShape2D
- - Sprite: AnimatedSprite2D

Area2D настраиваешь так:
1. У мобов: слой - mob, маска: ничего
2. У снарядов: слой: ничего, маска: mob
3. У игрока: слой: ничего, маска: mob
Снаряд бьёт моба, игрок бьётся об моба.
Сами мобы только наводятся на игрока:

>@export var player: Area2D


>func _physics_process(delta):


> position += position.direction_to(player.position) speed delta



Если будет медленно:
1. https://github.com/godot-jolt/godot-jolt
2. Можно попробовать Rect2.has_point()...
3. GDScript медленный, перепиши на C++))))
175 956362
>>56361

>Jolt


А, не, это ж только для 3D. Для 2D вот это:
https://github.com/appsinacup/godot-rapier

>Parallel support and SIMD build for better performance.


https://appsinacup.com/godot-physics-vs-box2d-vs-rapier2d/

>Performance: Best, about 2x,3x faster than competition

176 956363
Как же много времени ассеты жрут. Стенка всего-ничего, всрал в нее два дня. И это без наполнения пустых полох.
унитазник.gif708 Кб, 480x265
177 956365
>>56363

>Стенка всего-ничего, всрал в нее два дня.


Чего? Ты её с нуля моделировал что ли?

>И это без наполнения пустых полох.


Тяжёлые у тебя проблемы, конечно.
178 956366
>>56353
>>56344

> фигачить у одного обекта сразу две одинаковые ноды колиизии выглядит максимально костыльно


Просто скопируй ноду с настроенной коллизией, поскольку коллизия - это ресурс, она будет инстанцирована. Инстансинг коллайдеров.
179 956368
>>56363

> моделил стенку джва дня


А игра-то где?
Моделишь блок будущей стенки джве минуты и продолжаешь кодить геймплей.
180 956373
>>56365

>Ты её с нуля моделировал что ли?


Нет, экструдировал из дефолт куба.
ихихи.mp42,1 Мб, mp4,
1224x688, 0:06
181 956377
>>56363
Выглядит лампово. Я надеюсь ты не собираешь делать мужика главным гером? Пускай это будет молодая няшная тяночка с длинными волосами.
182 956380
>>56368

>А игра-то где?


>кодить геймплей.


Пора бы уже смириться, что у него бродилка.
Её геймплей делается за один вечер: >>55243

>>56377

>няшная тяночка с длинными волосами


А что с пропорциями и цветом трусиков?
2255822.jpg82 Кб, 1077x648
183 956387
>>56377
Кошкодевочку пусть делает. Старая хозяйка умерла и кошкодевочка осталась сама по себе в квартире.
184 956389
>>56377
Надо было оставлять пепу. Теперь игра обречена.
185 956394
>>56387
Кстати годная идея. Ставлю лайк.
186 956395
>>56394
>>56387
Только вид от первого лица, и игрок всю дорогу думает, что у него померла мать и он - ребёнок в пустой квартире, а в конце выясняется, что он - кот.
Nekopara прысь.webm3,6 Мб, webm,
1280x720, 0:04
187 956397
>>56395

>вид от первого лица


Да не, текущий вид прикольный, своеобразный.

>у него померла мать и он - ребёнок в пустой квартире


Слишком мрачно, серьёзно.

Пускай будет няшная кошкодевочка. Старушка хозяйка умерла от старости, без трагедии и прочего. И кошкодевочке теперь нужно присматривать за домом, как-то выживать. Хотя это лучше бы зашло в каком-нибудь деревенском домике с животными.
cd47906a35af416f5db93b42a26e52d08c-silent-hill-3.rhorizontal.w700.jpg49 Кб, 700x467
188 956402
>>56377

>Я надеюсь ты не собираешь делать мужика главным гером?



Скорее всего нет. Скорее всего тян лет до 25. Но моделить персонажей это не квадратный шкаф, придется искать. Или плотить.
189 956405
>>56402

>Или плотить


А дорого ли будет стоить такой персонаж? На геймдев.ру наверняка есть какой-нибудь чувак, который за небольшие деньги сделает неплохо.
190 956406
>>56402

>моделить персонажей это не квадратный шкаф


Делай стилизацию с акцентом на самом важном.
яндекс.jpg48 Кб, 520x830
191 956408
192 956420
>>56405

>А дорого ли будет стоить такой персонаж?



Знал автора (в губы не целовался) с ныне почившего форума по блендеру, его модели используют в порнушных модах, играх, артах
https://youtu.be/eFQKoI7aR0Q
Если могёт менее сексуализированно и в стиле ближе к Silent Hill, обращусь.
Думаю влетит в диапазоне 10-50 баксов. Ну или баш на баш, он хотел свою визуальную новеллу пилить. Я ему скелет игровых систем, он мне модельку. Но это вряд ли.
193 956431
>>56420

>Думаю влетит в диапазоне 10-50 баксов


Скульптинг, ретопология, текстуры, одежда, риггинг, анимация за 10 баксов? Я канеш не шарю за цены, но по-моему ты пизданулся, либо проебал пару нулей.
194 956432
>>56420

>менее сексуализированно


Sex sells, зачем себе вредить?
https://en.wikipedia.org/wiki/Sex_in_advertising

>в стиле ближе к Silent Hill


Там лоупольки с хендпейт текстурами. Для такого тебе другой художник нужен, этот, похоже, по хайполькам с запеканием (такие редко рисуют текстуры вручную, только запекают с хайполи, процесс совершенно разный - запекание буквально одной кнопкой). И если ты ориентируешься на SH, разве у тебя не слишком реалистичные модели окружения? Придётся всё переделывать для такой стилизации.

>10 баксов


А ты любишь шутить...
195 956434
Короче, в этот решил радикально подойти к изучению геймдева. Запретил себе дрочить пока не закончу свой первый проект на годо. Итак, первое мое творение будет порноигра. Подготовил рабочие ассеты пикрилы, но не понимаю как загрузить их в годо. Нужна помощь с этим. Руки чешутся скорее взятся за дело...
MV5BNzAwZDEyYjAtZWRlNC00OTUwLWE4MGQtNjk2MTBlZTI1MGRhXkEyXkFqcGdeQXVyMTA3MTUyNTcx.V1.jpg79 Кб, 1280x720
196 956435
>>56420

>в стиле ближе к Silent Hill


Если брать SH2, то там, похоже, делали по фото лица реального человека. Сложно...
197 956436
>>56434
Это троллинг.
198 956437
>>56434

>как загрузить их в годо


Спроси у нейронки. Я спросил, она хорошо ответила.

>>56436

>Это троллинг.


Слишком вялый. У него импотенция?
199 956439
>>56432
>>56432

>Там лоупольки с хендпейт текстурами.


Ты в курсе что после первого сайлент хила было еще несколько частей?
godotprojectXXX.jpg118 Кб, 1510x687
200 956444
>>56436
>>56437

Всем спасибо, добавил. А как сделать помещение? Это в годо невозможно? Надо в блендере?
201 956445
>>56444

>А как сделать помещение?


Для прототипа - вот это используй:
https://docs.godotengine.org/en/stable/tutorials/3d/csg_tools.html
Для красивого релиза - в блендере переделаешь.
maxresdefault.jpg181 Кб, 1280x720
202 956447
>>56439

>было еще несколько частей


Ну, какой ещё "стиль" ты хочешь повторить?
203 956449
>>56431

>Скульптинг, ретопология, текстуры, одежда, риггинг, анимация за 10 баксов?


Полигональное моделирование, материалы, одежда, текстуры. Емнип он не скульптурит, а классически редактирует сетку. Анимации/риг он так же не делает, натяну с mixamo как сделал в текущей демке. Лоуполи ретопологию проведу сам.

>>56432

>Sex sells, зачем себе вредить?


Сдрочусь.
images.jpg12 Кб, 251x200
204 956450
>>56449

>Емнип он не скульптурит, а классически редактирует сетку.


Это разве не сложнее?
205 956455
>>56225
Хочу предупредить, что в 4.3 изменят модификаторы Skeleton3D, включая SkeletonIK3D:
https://github.com/godotengine/godot/pull/87888
Если что, это уже давно собирались сделать.

4.3 должна выйти через месяц-два, я думаю...
206 956468
>>56450

>Это разве не сложнее?


Нет конечно, это зависит от задачи, мало где скульптуринг нужен кровь из носу как. Есть кнчно персонажи которые и квадратную коробку скульптурить будут, но это такие себе типы.
207 956478
>>56437

>Спроси у нейронки. Я спросил, она хорошо ответила.


В этом конкретном случае. А прошу у нее создать скрипт для движения игрока и она дает скрипт для годо 3. Про четвертый не знает.
17173565675080.jpg711 Кб, 1566x2048
208 956489
Хочу задизайнерить и смоделить персонажа-маскота для годота, но мужского, в пару Годетте и выложить в опенсорс. Как вам идея, го[в/д]но?
f63ed4353608ac2c6080fdafedd60865.jpg31 Кб, 735x486
209 956492
>>56468

> Есть кнчно персонажи которые и квадратную коробку скульптурить будут, но это такие себе типы.

210 956498
>>54699 (OP)
Годноты навалили в систему анимаций 4.3.
https://godotengine.org/article/migrating-animations-from-godot-4-0-to-4-3/
211 956505
>>56468

>мало где скульптуринг нужен


Органику без скульптинга не сделать, если тебе фотореализм с прыщами и морщинками нужен. Десятки миллионов квадов на куб скульптеца!

Но если аниме-масочку, то тут скульпт не нужен.

>>56492
Открой для себя пропорциональное редактирование.
https://docs.blender.org/manual/en/latest/editors/3dview/controls/proportional_editing.html
212 956507
>>56505

>Открой для себя пропорциональное редактирование.


Открыл уже давно, но это по сути скульптинг, но можно пользоваться только одной кистью, нет ремеша и динтопо.
213 956508
>>56507

>но это по сути скульптинг


Нет, это не скульптинг: ты контролируешь вершины, осознавая влияние действий на структуру сетки.

Скульптинг - это когда ты совсем абстрагируешься, работая виртуальной "глиной", пока софт решает все проблемы с мешем вместо тебя. Поэтому после скульптинга нужна ретопология - восстановление меша до юзабельного состояния (ровная сетка).

Ну это примерно как мазня кисточкой vs мазня нейронками: нейронка решает все мазки за тебя, высирая неюзабельное говно, которое нужно вилкой чистить (а можно не чистить и стать знаменитым говноделом как яндередев, но это такое).
214 956510
>>56508
Кринжа навалил, анон. Попробуй поскульптить и поредактировать прежде чем такое категоричное мнение выдавать.
215 956518
>>56510
Я много лет в этой теме вообще-то.

Редактирование: чётко, гладко, полный контроль. Цепляешься за конкретные вершины, которые ты видишь глазами, они не рождаются из ниоткуда.

Скульптинг: один раз мазнул кисточкой и прога вываливает кучу треугольников. Если снять галку генерации треугольников, то будет лоуполи кринж, который совершенно не похож на ИРЛ глину.

Пропорциональное редактирование - это совсем не скульптинг. А "скульптинг" без генерации и удаления треугольников в принципе не имеет смысла.

С реальной глиной, воском, пластилином у тебя минимальная единица размером с молекулу, т.е. нет проблемы с нехваткой разрешения. Скульптинг в 3D вынужден генерировать треугольники, потому что невозможно уместить в RAM триллионы "атомов".
216 956522
>>56518

>Я много лет в этой теме вообще-то.


Незаметно, если честно. Ты звучишь как человек который ни разу в жизни скульптить не пробовал. Там всё пиздец как удобно, намного удобнее чем двигать вершины самому, и уж тем более удобнее чем с реальной глиной.
217 956534
>>56522

>удобно, намного удобнее


При чём тут удобство?

Речь шла о том, что скульпт - это отдельная от редактирования сетки тема, абстрагирующая художника от, собственно, сетки.

Удобно/неудобно - зависит от того, что ты делаешь. Пробовал лепить стрёмных монстров - да, удобно. Но анимешную гладенькую маску сложно сделать.
218 956552
219 956570
Как придумать название для игры? Игра уже наполовину есть. Как вы придумываете?
220 956573
>>56570

>Как придумать название для игры?


Тащемто никакого секрету тута нету.
https://www.imagineforest.com/blog/game-name-generator/

>1. Define the Genre of Your Game


>2. Make a List of Nouns


>3. Make a List of Adjectives


>4. Combine the Adjectives and Nouns


>5. Play around with Your Words


Накидал по инструкции, разбирайте, кому надо:
Tower of Ass; Pile of Boobs; Mr. Dick Short; Cum Dump; Cumpocalypse: Days to Come; Long White Shot; Smallfun Skillful; Forbidden Jar: Escape the Goo; Short Snort; Lost Fapathon: Impotence; My Neighbour's Wife; Kill la Cum.
221 956574
>>56573
Да, вот только получается дженерик хуйня вместо названия. Этих таверов, спайров и эскейпов бесчисленное безликое множество.
16617787019051.png139 Кб, 604x604
222 956575
>>56574

>бесчисленное безликое множество


1. Изобретаешь машину времени.
2. Путешествуешь в 70/80/90-е.
3. Забираешь лучшие имена.
4. Профит!
223 956675
Приветики годаны. Чето меня то депресуха накроет, то прокрастинация, и вот которые сутки я нихуя не делаю с кликером, хотя казалось бы, осталось совсем чуть чуть буквально пару фуллтайм деньков потратить и релизнуть уже наконец, но чет морали не хватает. Сколько я его делаю уже? Месяц гдето? По факту за этот месяц я максимум провел за разработкой неделю. Последнее что сделал так это прикрутил локализацию и внес правки в формулы и все блять. Кстати, раз затронул локализацию, можно ли сделать так что бы в условном лейбле работало сразу несколько ключей? Знаю что tr() можно юзать, но это не то, нужно чтоб динамически переводило, спасибо блять моче яндекса за эту шизу. Адекватно нагуглить не смог как бы не пытался, пришлось васянить, для условных 1.0к юзаю 2 лейбла, один для числа, другой для значения, и это пиздец как не удобно. Есть мысли?
Постараюсь собраться с силами и на выходных все же доделать то что осталось.
Недавно кстати поймал себя на мысли что я не могу делать говноигры уровня яндекс игр, снимаю шляпу перед теми кто может просто взять за 5 минут собрать из ассетов "хагиваги против нубика" и без зазрения совести выложить это получив как минимум мрот, я так не могу, и не потому что не могу, а потому что как любитель игр не могу.
Скоро твг же будет, думаю попробовать, никогда ещё в таком не участвовал.
Ебать я конечно насрал тут, извиняюсь.
224 956681
>>56675
Про локализацию я не знаю, просто скажу что маленький шаг вперед лучше чем отсутствие этого шага. Вперед.
о вот я.mp4182 Кб, mp4,
500x500, 0:03
225 956691
>>56675

>меня то депресуха накроет, то прокрастинация


Хотел похожее написать, но ты опередил...

>юзаю 2 лейбла


>не удобно


Инкапсулируй @ профит.

>как любитель игр не могу.


Молодец. И без нас насрут.
226 956710
Нашел полезное для себя: https://giantlightstudios.com/gdc2022

По первой ссылке гугл-слайды.
58snjf.jpg69 Кб, 500x698
227 956711
>>56710
Вкусовщина. Об этом на каждом углу говорят. Лучше сначала геймплей сделай, а уже потом обмазывай постпроцессингом и процедурными анимациями.

Самая полезная информация:

>The rounded shape may most commonly be named "bouba"


https://en.wikipedia.org/wiki/Bouba/kiki_effect
228 956715
>>56711

>сначала геймплей


Без вопросов. Просто у людей часто представление о пиксель-арте как о самом изи арте. Вот этот полегче будет.
229 956718
>>56715

>полегче будет


Ещё легче вообще ничего не делать.

Вот лично я хочу 3D игру, а не 2D головоломку.
230 956719
>>56718
Сказали тебе делай 2д головоломку, значит делай 2д головоломку.
231 956722
>>56691

>Хотел похожее написать, но ты опередил...


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

>Инкапсулируй @ профит.


Понятное дело, не удобно в том плане что вместо одной ноды "текст KEY_1", приходится юзать три: контейнер, "текст", "KEY_1".
232 956725
Почему-то пока моделю депресон накатывает жуткий.

Нужного утюга не нашел, пришлось делать самому. Зато всего 1400 треугольников. Планируется на роль оружия ближне-дальнего боя после первого энкаунтера. Два дня на утюг. Если делать по модельке раз в три дня, то на сотню ассетов уйдет год. Аж плакать хочется.
233 956726
>>56722

>вместо одной ноды "текст KEY_1", приходится юзать три: контейнер, "текст", "KEY_1".


1. Делаешь новый tool-скрипт.
2. Добавляешь лейбелы как internal ноды.
https://docs.godotengine.org/en/stable/classes/class_node.html#enum-node-internalmode

Либо, ещё лучше — пишешь свою версию Label, которая воспринимает сколько тебе нужно тегов.

Потом просто юзаешь как обычную ноду.
234 956727
>>56725
Поэтому делай геймплей лучше
023b8814df6df21a0a9701db6923f2a0.jpg53 Кб, 720x720
235 956729
>>56725
У тебя игра в целом депрессивная получается...
Не хватает только серого фильтра и дождя.
И тазиков, собирающих воду с потолка.
236 956738
>>56725

>Два дня на утюг. Если делать по модельке раз в три дня, то на сотню ассетов уйдет год. Аж плакать хочется.


А может со временем скилуха прокачается и будешь срать моделькой за час? Мне иногда попадаются стримы моделлеров всяких, они за утро персонажа высирают.
237 956741
Пока гулял по городу, натыкался на пикрилы. Если расширю игру до бродилок по улице, так буду размечать места спавна монстров.

>>56729

>У тебя игра в целом депрессивная получается



Тогда иду в правильном направлении. Хотя может поэтому самому так грустно становится.

>>56738

>они за утро персонажа высирают



Это отрепетированные стримы. Но 2 дня на утюг много конечно. Может одного вечера должно было хватить.

Попробую, к слову, выставить на продажу пару моделек где-нибудь.
238 956773
Как решить проблему: Godot 4.3 beta 1

1) У меня Игрок на Автозагрузке.

2) Игрок подпрыгивает на большой высоте и активирует смену сцены.

3) Когда сцена меняется, Игрока телепортируют на заданную глобальную координату, которая находится ниже текущей позиции Игрока. (Координата зависит от аргумента функции для смены локации.)

4) Игра просчитывает, что Игрок не is_on_floor().

5) После телепортации игра просчитывает, что Игрок is_on_floor().

6) Игрок теряет очки здоровья как от стандартного падения.

Автозагрузку для игрока я использую чтобы не перезагружать его каждый раз при смене локации, а также для упрощения кода.
239 956775
>>56773
Вообще по-хорошему ты должен был расчёт дамага привязать к стейт-машине, и среди стейтов можно было бы прописать "is jumping" который может переходить как в "is falling", так и в "is teleporting", во втором случае дамаг не распределяется.
240 956777
>>56775
Окей, попробую сделать машину состояний.
241 956780
>>56777

>Окей, попробую сделать машину состояний.


или просто обнулить его велосити при переходе.ц
242 956790
>>56741

>>игра в целом депрессивная получается


>Тогда иду в правильном направлении.


Вот это попробуй использовать:
https://docs.godotengine.org/en/stable/tutorials/3d/environment_and_post_processing.html#adjustments
- минус насыщенность (saturation)
- минус контраст (contrast)
- минус яркость (brightness)
+ добавь полупрозрачный шум Перлина на весь экран
243 956792
>>56773

>проблему: Godot 4.3 beta 1


Это версия для тестов, а не для разработки игр.

>Игрок на Автозагрузке


>активирует смену сцены


Не стоит так делать...

>Игрок теряет очки здоровья


У тебя формула зависит от высоты?
Что-нибудь вроде:

>fall_damage += last_height - current_height


Получается огромный дамаг от телепорта вниз.

>>56775

>расчёт дамага привязать к стейт-машине


Конечный автомат не решает проблему в логике.
244 956797
>>56792

>Конечный автомат не решает проблему в логике.


Нахуя решать проблему в логике в сложной структуре, когда её можно облегчить и проблема с логикой уйдёт сама собой?
245 956799
>>56790
А чем ты комнатное освещение делаешь? Например тот источник света, который из кордиора в комнату светит? Омнилайт?
246 956802
>>56780
Я пробовал делать стейт машину, но результатов она не дала. Затем написал одну строку, которая меняет координату последнего касания земли на координату телепорта и урон пропал. Спасибо, anyway попрактиковался в написании машин, пускай они мне пока не нужны.\

>>56792

>Это версия для тестов, а не для разработки игр.


Меня это никогда не останавливало. Просто скачиваю последнюю версию и пользуюсь новейшими фишками, а когда релизится, проект переношу на стабильную версию и экспортирую.

>Не стоит так делать...


Я от очень многих это слышал, но подробно никто не раскрывал почему игрок не может быть синглтоном, если постоянно меняются все сцены, кроме игрока. Просто игрок в памяти находится, и всё. Разве нет? Это предоставляет кучу удобств для обращений и взаимодействий игрока с миром.
У меня не только синглтон-игрок, но и специальный системный скрипт и UI.

>Получается огромный дамаг от телепорта вниз.


Понимаю, спасибо, кэп.

>Конечный автомат не решает проблему в логике.


Так точно. Одной строкой в функции телепорта решается ВСЁ.
247 956808
>>56802

>подробно никто не раскрывал


Тыщу раз уже обсуждали в Godot-тредах.

>почему игрок не может быть синглтоном


Потому что ты его гвоздями прибиваешь.
Что, если ты захочешь сделать мультиплеер?

>если постоянно меняются все сцены


Что, если захочешь сделать плавный переход?

>Просто игрок в памяти находится, и всё.


Завязывает весь код игры на реализацию Player.

>кучу удобств для обращений и взаимодействий


Потом эти удобства могут боком выйти.

Короч, гугли low coupling, high cohesion.
Autoloaded - прямой путь к high coupling.
248 956819
>>56808

>Что, если ты захочешь сделать мультиплеер?


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

Вот так и пилят-перепиливают десяток лет, а на выхлопе тухлый пук вместо игры с геймплеем.
249 956822
>>56808

>Потому что ты его гвоздями прибиваешь.


>Что, если ты захочешь сделать мультиплеер?


Спасибо, не захочу.

>Что, если захочешь сделать плавный переход?


У меня UI синглтоновский. Когда происходит смена сцены, игрок фризится, а интерфейс включает экран загрузки.

>Завязывает весь код игры на реализацию Player.


Ну да, это синглплеерная маленькая мобильная игра, в которой не будет мультиплеера, сложных механик. В крайнем случае много переписывать не придётся, ведь Player достаточно заменить на переменную, которую будет хранить глобальный скрипт, но в этом ничего сакрального не вижу.

>Потом эти удобства могут боком выйти.


Когда я делал игрули и раком изъёбывался чтобы получать доступ к игроку и от игрока к миллиону других нодов через окольные пути у меня были проблемы, а сейчас их ровно ноль. Посмотрим что будет в дальнейшем. Если обосрусь, то напишу что был не прав, если нет, то поделюсь готовым проектом и отмечу, что использовал игрока в качестве синглтона.
3d66979d9360a73fd81ef5bd323daa7dca8fa4c73c8c13aa5a4c777f87c961251.png754 Кб, 750x782
250 956833
>>56790

>Вот это попробуй использовать:


Мне эта серая блевотина как-то приелась. Как в американских фильмах сериалах - мексиканский фильтр (все желтое), русский фильтр (все синее), индийский фильтр (все коричневое). В играх тоже уже затрахало.
Правда я планировал взять эффект шума вблизи монстров, хоть и калька с SH4.

Квартира, к слову - сейв зона, там должно быть депрессивно, но уютно.

>>56799

>Омнилайт?



Да, в каждой комнате свой омник, плюс один солнечный источник света для света/теней из окон. Освещение у Environment стоит очень низкое, всего 0.08
251 956841
>>56819

>пилят-перепиливают десяток лет


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

>>56822

>получать доступ к игроку и от игрока к миллиону других нодов через окольные пути


Ты что-то не то делаешь, если у тебя "игрок" (точка доступа пользователя к игре) занимается раздачей миллионов нод другим игровым системам.

>>56833

>серая блевотина как-то приелась


Мне тоже, но цвет должен подходить сюжету, работать на создание настроения.

>в каждой комнате свой омник


SpotLight3D не пробовал использовать?
252 956857
>>56841

>Ты что-то не то делаешь, если у тебя "игрок" (точка доступа пользователя к игре) занимается раздачей миллионов нод другим игровым системам.


Так взаимодействие игрока с игрой — это единственная неотьемлимая часть любой игры. Я её поставил в приоритет и на взаимодействии игрока с игрой завязывается всё остальное.
253 956871
>>56857

>единственная неотьемлимая часть


Вообще мимо. Игры могут быть без игрока.

Игру нужно рассматривать как игровую площадку с игрушками и правилами игры. Завязывать всю игру на игрока, это как если бы ИРЛ игрушки работали только с конкретным ребёнком, по анализу ДНК.

Да, ты создаёшь "игровой опыт" для игрока, но ты создаёшь его с помощью деталей, которые от игрока никак не должны зависеть, они есть сами по себе.

Вот, например, шахматы. Где там игрок? Есть доска в клеточку - это игровая площадка. Есть фигурки - это игрушки. И есть правила перемещения фигурок. Игра существует независимо от конкретных игроков.

Можно сделать так, чтобы игрок перемещал фигуры клавиатурой, мышью, тачскрином. Можно сделать, чтобы второй игрок использовал тот же способ ввода по очереди с первым, или подключался через сеть. Можно сделать ИИ, который будет играть с игроком. Или придумать ещё что-нибудь. Игра от этого никак не меняется, меняются только игроки.
image.png1,9 Мб, 1280x720
254 956884
Сап. Полюбилась мне игра Dead End Road, и возникла идея сделать похожую игру. Оригинал состоит из езды на тачке ночью с рнг пугалками и мистикой чуть более чем полностью. Уникальный проект, но однообразный и имеющий скрытые механики и концовки на которые всем похуй, ибо игра короткая в жанре "пройти у Куплинова". Подумываю поначалу скопипастить 1,5 базовые механики, а дальше добавлять исправления от себя.

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

Мне не хватает пары наводок чтобы понять чем делаются кор механики. Первое это как делается езда от первого лица. Нашел шаблоны с ездой от 3 лица, но не понимаю как на их основе сделать 1 лицо. И второе, хочу генерировать новую сцену когда приближаюсь к концу текущей. То-есть один общий класс (сцена) на отрисовку участков дороги. И постоянно надо дорисовывать новую сцену перед текущей чтобы не было швов. Как генерировать новую сцену и подшивать перед текущей не знаю.

На работе пишу код, поэтому быстро начну ориентироваться. Приходится постоянно писать костыли, работать с объектами, и читать ебанутые чейнджлоги, так что не привыкать.
255 956902
>>56773
Я бы сделал игроку неуязвимость 5 секунд после загрузки. Даже если урон будет не от падения все-равно полезно.
256 956907
>>56841

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


Вот тут я с тобой не соглашусь, анон. Имхо вот как раз-таки прототип можно наговнокодить, главное чтобы передавал суть игры, ведь прикол прототипа в том что его можно сделать быстро чтобы оттестировать идею. Вот если она выстрелит то да уже желательно пилить нормально по бест практисес, чтобы ты даже если в соло делаешь потом не охуевал разбираться в своей же лапше. Проблема в том когда люди как тот челик держатся за говнокод и защищают его просто потому что скорее всего неговнокодить тупо не умеют.
257 956908
>>56884
Начинай с чтения документации.
https://docs.godotengine.org/en/stable/getting_started/introduction/index.html
Внимательно изучай, на слепом редактировании каких-то готовых примеров далеко не уедешь.

>машина это коробка без инерции


Если поиграть настройками VehicleBody, можно сделать что-то наподобие работы подвески GTA IV:
https://docs.godotengine.org/en/stable/classes/class_vehiclebody3d.html
Хватит сделать подвеску мягкой и настроить wheel_roll_influence, чтоб машина наклонялась. Но там колёсики - рейкасты, а не физические тела, поэтому телепортируются на бордюрах.

Есть вот такой автосимулятор на Godot:
https://lupine-vidya.itch.io/gdsim
Там машинки сделаны на RigidBody:
https://www.gtplanet.net/forum/threads/gdsim-v0-4a-autocross-and-custom-setups.396400/
Хотя, вроде, там тоже рейкасты (не читал).

>не понимаю как на их основе сделать 1 лицо


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

>Как генерировать новую сцену и подшивать


Самый простой способ, справится любой:
1. Определись, что тебе вообще нужно. Тебе нужен список участков дороги, нужных по геймплею.
2. Смоделируй участки дороги в Блендере. Следи за стыками, они должны подходить друг к другу. Определи один универсальный стык участков.
3. Сделай участки дороги отдельными сценами. Коллизии можно сгенерировать автоматически, но сложную геометрию лучше заменить упрощённой (смоделировать отдельный меш для коллизий).
4. Поставь в сцене дороги датчик (Area3D), который реагирует на приближение игрока (машины).
5. При приближении игрока сцена дороги спавнит следующий участок дороги, примерно так:

>var paths := ["road1", "road2", "road3", "road4"]


>var path := "res://%s.tscn" % [paths.pick_random()]


>var scene := load(path).instantiate()


>get_parent().add_child(scene)


>scene.global_position = to_global(next_part_position)


>$Area3D.monitoring = false # чтоб не спамить


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

Сделай сначала 2-3 участка дороги, проработай алгоритмы, уже потом добавляй остальные.

Если хочешь процедурный ландшафт (heightmap) и полностью процедурные извилистые дороги, то иди смотреть аддоны. Порекомендовать ничего не могу, ничего из них не пробовал. Но советую для начала изготовить максимально простую тестовую сцену, прежде чем искать какие-то сложные инструменты. Простая сцена позволит проработать основной геймплей (езду на машине) до генератора карты.

Вообще, процедурная генерация - сплошная головная боль, особенно если ты толком не знаешь, что нужно. Рекомендую не лезть в это дело, пока нет геймплея. Статичной сцены достаточно для 99% фич геймплея.

Если не удовлетворяет встроенная физика:
https://github.com/godot-jolt/godot-jolt
Но я не уверен, как она работает с VehicleBody3D.
Также есть другие физические движки, если что.

Видео с июня 2023, там Godot 3.x с Bullet Physics.
257 956908
>>56884
Начинай с чтения документации.
https://docs.godotengine.org/en/stable/getting_started/introduction/index.html
Внимательно изучай, на слепом редактировании каких-то готовых примеров далеко не уедешь.

>машина это коробка без инерции


Если поиграть настройками VehicleBody, можно сделать что-то наподобие работы подвески GTA IV:
https://docs.godotengine.org/en/stable/classes/class_vehiclebody3d.html
Хватит сделать подвеску мягкой и настроить wheel_roll_influence, чтоб машина наклонялась. Но там колёсики - рейкасты, а не физические тела, поэтому телепортируются на бордюрах.

Есть вот такой автосимулятор на Godot:
https://lupine-vidya.itch.io/gdsim
Там машинки сделаны на RigidBody:
https://www.gtplanet.net/forum/threads/gdsim-v0-4a-autocross-and-custom-setups.396400/
Хотя, вроде, там тоже рейкасты (не читал).

>не понимаю как на их основе сделать 1 лицо


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

>Как генерировать новую сцену и подшивать


Самый простой способ, справится любой:
1. Определись, что тебе вообще нужно. Тебе нужен список участков дороги, нужных по геймплею.
2. Смоделируй участки дороги в Блендере. Следи за стыками, они должны подходить друг к другу. Определи один универсальный стык участков.
3. Сделай участки дороги отдельными сценами. Коллизии можно сгенерировать автоматически, но сложную геометрию лучше заменить упрощённой (смоделировать отдельный меш для коллизий).
4. Поставь в сцене дороги датчик (Area3D), который реагирует на приближение игрока (машины).
5. При приближении игрока сцена дороги спавнит следующий участок дороги, примерно так:

>var paths := ["road1", "road2", "road3", "road4"]


>var path := "res://%s.tscn" % [paths.pick_random()]


>var scene := load(path).instantiate()


>get_parent().add_child(scene)


>scene.global_position = to_global(next_part_position)


>$Area3D.monitoring = false # чтоб не спамить


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

Сделай сначала 2-3 участка дороги, проработай алгоритмы, уже потом добавляй остальные.

Если хочешь процедурный ландшафт (heightmap) и полностью процедурные извилистые дороги, то иди смотреть аддоны. Порекомендовать ничего не могу, ничего из них не пробовал. Но советую для начала изготовить максимально простую тестовую сцену, прежде чем искать какие-то сложные инструменты. Простая сцена позволит проработать основной геймплей (езду на машине) до генератора карты.

Вообще, процедурная генерация - сплошная головная боль, особенно если ты толком не знаешь, что нужно. Рекомендую не лезть в это дело, пока нет геймплея. Статичной сцены достаточно для 99% фич геймплея.

Если не удовлетворяет встроенная физика:
https://github.com/godot-jolt/godot-jolt
Но я не уверен, как она работает с VehicleBody3D.
Также есть другие физические движки, если что.

Видео с июня 2023, там Godot 3.x с Bullet Physics.
258 956910
>>56871
Игры без вмешательства игрока в процесс быть не может. Даже когда игрок подбрасывает кубик, он может это сделать по-своему, а то что ты написал никак не противоречит моим словам.

>>56895 (Del)
В стойло, копроскот.

>>56902
Спасибо за идею. Может применю, если вообще буду сталкиваться с проблемой перманентного урона. Просто эта механика даёт игроку возможность абуза.
259 956913
>>56910

>Игры без вмешательства игрока в процесс быть не может. Даже когда игрок...


Это довольно специфический жанр:
https://ru.wikipedia.org/wiki/Zero_player_game
Что-то вроде виртуального аквариума.
260 956920
>>56908

>там Godot 3.x с Bullet Physics


Только я даже не пытался сделать реалистичную симуляцию машины, фокус был на процедурной генерации более-менее интересной дороги между процедурными городами с геймплеем а-ля ГТА.

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

В теории, пикрил должен был помочь. Но было лень моделировать это, как всегда "отложил на потом". Нет, всё ещё рассматриваю этот проект, но нужно всё пересмотреть и определиться, зачем мне это надо. Первая заметка по игре - май 2019. Делойте выводы. Концепцию в целом вынашивал, наверное, с 2009...
261 956937
>>56908
Спасибо. Сохранил этот пост себе в текстово файл чтобы перечитывать пока не найду все ссылки на необходимую документацию.

В Dead End Road машина покорачивает только при движении вперед, не умеет в разворот, и имеет странную инерцию (будто инпут лаг). Цель сделать аркадную напоминающую опыт ИРЛ, но без душного реализма. Звуковой банк на коленке запишу для погружения, так как мне не нравится бесплатная библиотека звуков.

Да, наверное проще наклепать 20 сцен состоящих извилистых дорог длинной в условный 1км. Просто мне кажется что если заранее настругать сцен, то рандом будет околонулевой, и придется либо дробить дорогу на очень маленькие кусочки, либо манипулировть спавном ебак и освещением чтобы игрок не выкупил уже седьмой раз едет по тому же куску дороги, только в другом месте. Тем более что если зон будет например 3 (лесная дорога, городская дорога, лес), то нельзя будет одну из 20 сцен во всех тред зонах использовать. В общем вопрос как не привести игрока в отупления от однообразие. Ну ладно, сегодня соберусь с мыслями, а завтра после работы попробую дефолтную хеллоуворлд сценку собрать.
ffuuuuuu.png9 Кб, 500x500
262 956939
>>56920

>было лень моделировать


>отложил на потом


Вспомнил, почему я это говно тупое забросил:
- чем больше видов блоков, тем больше нужно промежуточных комбинаций, без которых алгоритм неспособен собрать карту без дырок, т.е. каждый новый блок должен мочь стыковаться с другими, и введение новой категории умножает число блоков;
- даже когда он работает правильно, результат у него дурацкий: много петель, тоннелей и т.д., это неплохо в рогалике каком-то, но не в планировке города;
- контроля практически никакого, рандом (можно инициализировать часть клеток, можно раздать приоритеты блокам, но всё это фигня какая-то).
Переделал с нуля, вспомнил всё это и приуныл...

Есть ли выход?
263 956940
>>56937

>рандом будет околонулевой


Каждая из сцен может иметь свой набор случайных элементов, например, на сцене "прямая дорога":
- ничего нет;
- автозаправка;
- гостиница;
- авария на обочине;
И т.п. Когда ты выбираешь "едем прямо", эта сцена выбирает у себя случайные компоненты.

>лесная дорога, городская дорога


Тут аналогично: сцена может быть одна, но на ней спавнятся либо плотные деревья с кустами, либо случайные дома, автобусные остановки и т.д.

Т.е. у тебя есть два направления:
- добавлять сцены-категории;
- добавлять вариации имеющимся сценам.
Логично связать категории с формой дороги, а всё остальное делать вариациями.

Суммарное число сцен = категории × вариации.

>привести игрока в отупления от однообразие


На сколько часов геймплея рассчитываешь? Совсем повторений не избежать, можно только отсрочить их появление. Игры со статичной картой заставляют ездить вообще по одним и тем же дорогам, так что возможно выучить карту наизусть и ехать не глядя. Здесь же как минимум не знаешь, что за поворотом.
264 956941
>>56940

>Суммарное число сцен = категории × вариации.


Суммарное число возможных комбинаций. Те самые "триллионы планет" из No Man's Sky, которые на деле отличаются в основном цветом поверхности.

Т.е. если хочешь, например, добавить новый тип леса, достаточно будет прописать пути к новым моделькам, сцены должны остаться теми же самыми (те 20 штук), но количество комбинаций умножится.
265 956945
>>56570

> Как вы придумываете?


Отвечают на три вопроса:
1. В каком сеттинге игра? Вселенная наобо
2. В чём главная фишка игры? рот с тол
3. Какие ещё имеются геймплейные особенности? щеходами
266 956946
>>56939

> Есть ли выход?


Я видел туториал по автотайлмапу в тридэ, и там автор уверял, что нужно всего 27 блоков, чтобы закрыть все варианты.
267 956951
>>56945

>Вселенная наоборот с толщеходами


Как успехи? Показывай.

>>56946

>автотайлмапу в тридэ


Тоже видел, но это немного другое:
https://robertheaton.com/2018/12/17/wavefunction-collapse-algorithm/
268 956952
>>56939

> Есть ли выход?


Самый разумный выход отказаться от автогенерации на стороне игрока, перестать хуярить однотипные рогалики, дать игроку один мир, вручную проработанный тобой лично. Возможно проработанный на основе автогенерации, но ты её потом лично ручками доработал и вручную заделал все дырки интересными квестами.
269 956953
>>56951

> Как успехи?


Изучаю физику, орбитальную механику.

> Показывай.


Пока не изучу и не научусь свободно манипулировать векторами тяготения - показывать будет нечего.
270 956993
>>56940
Расчет менее 2 часов. Езда между городами суммарно 3+4+5+6+7 минут если играет сам разраб. В городах между дорогами всякий микроменеджмент с покупкой предметов и сохранения. Неписи в городах должны объяснять куда ехать. Ебаки должны нещадно ебать чтобы срывать прохождение участков забега, заставляя быстро реагировать на них: переключать свет, выворачивать руль, менять скорость, включать дворники, выезжать на встречку в процессе. Ну и некоторым ебакам достаточно просто жутко попездывать, смачно хуесося мамку игрока, рассказывая охуительные истории и срываясь на крик. Тип чтоб концентрации мешать. И, если получится, киллер фича, забытая технология древних, возможность играть mp3 треки из папки. Радио должно то пердеть, то выключаться, то играть реверс песни когда концентрация ебак повышается.
271 957016
>>56913
Знаю про существование этого "жанра" "игр", но считаю его простой симуляцией. Всё равно что виндовсовский визуализатор музыки или наблюдение за размножением рыб назвать игрой. Во втором случае можно использовать азартные механики, но тогда вообще из чего угодно можно сделать игру, достаточно найти только двух игроков и поставить любое условие, которое определит кто победил, а кто нет, зависящее в конечном итоге от случайности.
272 957030
>>57016
Зависит от игры. Мозг любит наблюдать патерны и ритмы. Если на экране происходит симуляция чего-то базового. Будет интересно смотреть.

Немного более высокого уровня но что-то похожее. Давно у меня была спутниковоя сетевая карта в компьютере. И я включал на ней "спутниковую рыбалку", - сетевуха переключалась в promiscuous mode, и ловила весь контент от всех пользователей которые висели на этом транспондере. Можно было ставить фильтры на файлы которые ты хотел чтобы ловились. Так вот помню можно было часами наблюдать как начиналась закачка многотомных архивов с фильмами и сериями из сериалов. Следить как наполняются папки с музыкой. Почитывать имейлы пользователей, и их переписку в разных мессенджарах. Видеоролики, с порнухой и приколами. Веб страницы с новостями и контентом. У меня интернета тогда не было и это было развлечением.

Так вот если игру такую создать с использованием нейронки например. Наблюдать за колонией на марсе например. Следить как разрастается колония и за каждым человеком в частности. Как они реалистично строят отношения между собой и общество. Для тех кто проходят игры на ютубе сойдет.
wow.gif537 Кб, 400x300
273 957038
>>54699 (OP)
И почему я раньше не догадался комбинировать несколько шумов?..
274 957040
>>56953

>физику, орбитальную механику


>свободно манипулировать векторами тяготения


Э... У тебя же "вселенная наоборот". Какие там орбиты? ИМХО, при рытье тоннелей можно пренебречь силой тяготения, т.к. ты заперт в тесном бесконечно заполненном пространстве, а гравитация - слабейшее взаимодействие:

>Gravity is, by far, the weakest of the four fundamental interactions, approximately 10 times weaker than the strong interaction, 10 times weaker than the electromagnetic force and 10 times weaker than the weak interaction. As a result, it has no significant influence at the level of subatomic particles.


У тебя толщеходы постоянно опираются на и отталкиваются от "тверди", от которой же и питаются энергией. Было бы странно реализовывать силу тяготения и орбитальную механику в такой ситуации. Всё равно что кроты, выходящие на орбиту морковок в огороде... Т.е. даже банальное трение о поверхность туннеля должно быть сильнее гравитации, тем более что толщеход по идее разработан для максимально крепкого сцепления со стенками туннеля.

Да и потом, главное - чтобы фан от игры был. Будет ли фан от орбитальной механики в игре про толщеходы?
275 957067
>>57038
А ведь так можно бесконечный опенворлд как в Майнкрафте сделать, всего на нескольких шумах.

>>56952

>отказаться от автогенерации


Но это же киллер-фича. Без неё скучно.

>интересными квестами


Процедурно генерируемыми квестами?
276 957103
Делойте
Belka-letyaga-1.jpg26 Кб, 800x480
277 957159
>>57067
Планирую зайти с более универсальной стороны: создать очередь модификаторов карты, которые друг за другом влияют на меш (или спавнят меши?).

Воспользуюсь мощью ООП наследования.

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

Но сначала нужно в 2D общие карты отрисовать...

Кто знает, генерация коллизий потокобезопасна? Хотелось бы вынести весь код в отдельный поток.
278 957167
>>57159
Я тоже планирую.
Уже лет 6.
image.png799 Кб, 1475x898
279 957168
Снимок экрана (2).png364 Кб, 1920x1080
280 957181
Присоединяюсь к вашей секте. За вечерок наваял халтуру с нуля. Оказывается все не сложно, просто доки официальные написаны долбаебами, а вот в ютюбе по первой ссылке понятные гайды.
281 957182
>>54699 (OP)
Объясните почему годот так популярен на этой доске? Со стороны кажется что 70% всех тех кто делает игры на этой доске делают на нем. Хотя на твг всего одна/пару игр обычно.
Видео-17-06-2024 182850.mp425,5 Мб, mp4,
1280x436, 1:10
282 957191
Первого босса для демки мучу
# OP 283 957197
>>57182
Грамотный пиар. Хуан много денег платит. Пиши в личку, познакомлю тебя с нужными людьми.
284 957198
>>57182
Потому что на остальных движках делают молчаливые гопники, а тут тусовочка.
285 957208
>>57191
Хули ты музыку из Unreal Gold спиздил, блять? Никогда не применяй проприетарные плейсхолдеры, уёбище, а то блядь забудешь в релизной версии и будешь кукарекать "АМИНЯТОЗАЩО", когда игру нахер удалят с площадок.
16837901299350.jpg40 Кб, 380x360
286 957223
>>57208
Ты ёбнутый? Трек на фоне включил, просто чтоб в видео играл, проспись.
1718683010021.jpg85 Кб, 675x1200
287 957225
image.png319 Кб, 640x640
288 957243
>>57225
Пасиба, полистаю на сайте какие нибудь затычки которые так и останутся в игре конечно, если знакомый не напишет треки, отсюда скорее всего буду брать
289 957249
>>57225

>3898 download(s)


Ящитаю топ скилла поиска свободной музыки - найти годный трек с загрузками/прослушиваниями <100.

Саундклауд удачен для поиска таких хидден гемов. Только там ебланы редко указывают лицензию, приходится еще теги потрошить.
maps.png40 Кб, 1024x580
290 957261
>>57167
Главное - выбрать правильное направление.

>>57168

>Somewhere else entirely -> Register with autoload


Осуждаю такие советы новичкам, вредно.
1. Почему оно "где-то там"? А если его не будет?
2. Почему оно нам нужно? А нужно ли оно нам?

>>57181
CollisionShape3D вложи в StaticBody3D.

>официальные написаны долбаебами


Не знаю, вроде понятно и доступно.

>>57182
Народный движок же, от народа народу.

>Хотя на твг всего одна/пару игр обычно.


Там другие люди, я вот ни разу не участвовал.

>>57191
От бедра отдача идёт в руку, а не в тело.
291 957267
>>57261

> Осуждаю такие советы новичкам, вредно.


Я тебя скоро репортить начну. Отъебись от автолоада. Это стандартный механизм движка.
292 957268
>>57261
Это ты там советовал переписывать всю архитектуру, на случай если ВДРУГ захочется переделать игру в мультиплеер? Таблетки прими.
293 957269
>>57268
Нет, скорее всего это был я. И снова посоветую.
294 957270
>>57182
Много анонов уважает опенсорс, по понятным причинам.
image.png2 Кб, 256x50
295 957275
>>57261

>CollisionShape3D вложи в StaticBody3D.


То-есть чтобы машина не провалилась мне надо делать шейп не только машине, но и полу? Не уловил идею. Сам факт того что все проваливается через все по дефолту меня очень смущает.
296 957280
>>57267
В чём твоя проблема? Просто не советую советовать автолоад как панацею от всех проблем доступа, чтоб новички не ходили по граблям как я:

>Somewhere else entirely


"Somewhere" - это где? Новичок будет совать в твои любимые автолоады каждый свой скрипт. И зачем вообще нужно дерево сцен, если всю игру можно написать в одном скрипте автолоада?

>стандартный механизм


Команда "goto" была стандартной во многих языках и повсеместно использовалась. И где она теперь?
https://en.wikipedia.org/wiki/Goto

>>57268

>если ВДРУГ захочется переделать игру


Godot - движок, в первую очередь, для прототипов. Естественно, что тебе захочется всё переделать. А ещё захочется использовать свой код из старого проекта в десятках новых проектов. Не хочется?

Все эти ноды, сцены, сигналы, GDScript - тут всё адаптировано для гибких переделок, чтобы части проекта могли свободно двигаться. Автолоады противоречат этой философии, прибивая твой код гвоздями к одной всюду доступной точке проекта.
297 957288
>>57275
Почитай документацию.
https://docs.godotengine.org/en/stable/tutorials/physics/physics_introduction.html

>Не уловил идею.


Базовая композиция сцены с физикой:
- Node или Node3D - корень сцены
- - StaticBody3D - неподвижное тело: платформа
- - - CollisionShape3D - коллизия платформы
- - - MeshInstance3D - графика платформы
- - RigidBody3D - подвижное тело: мячик
- - - CollisionShape3D - коллизия мячика
- - - MeshInstance3D - графика мячика
- - CharacterBody3D - тело, двигаемое кодом: игрок
- - - CollisionShape3D - коллизия игрока
- - - MeshInstance3D - графика игрока
- - Area3D - датчик объектов
- - - CollisionShape3D - коллизия (форма) датчика
И т.д.

CollisionShape3D сама по себе только контейнер для Shape, что передаётся наверх, конкретному CollisionObject3D, который может быть любым.

>Сам факт того что все проваливается через все по дефолту меня очень смущает.


В играх далеко не всегда нужна физика столкновений, многие объекты могут обойтись без этого. Кроме того, несколько моделей могут быть частями одного целого физического объекта, а один объект может содержать несколько независимых физических частей.

Но есть несколько способов упростить задачу.
1. У MeshInstance3D на панели сверху окна сцены специальная кнопка позволяет сгенерировать физическую форму или сразу тело. Нужно помнить, что автоматическая форма не всегда оптимальна, особенно когда твой меш большой и сложный.
2. Прототип статичных декораций можно сделать из CSG-нод, у которых есть галочка "use collision", которая автоматически включает статическое тело (тут тоже не всё гладко: CSG объекты часто имеют сложные поверхности, физика на них может глючить).
https://docs.godotengine.org/en/stable/tutorials/3d/csg_tools.html
297 957288
>>57275
Почитай документацию.
https://docs.godotengine.org/en/stable/tutorials/physics/physics_introduction.html

>Не уловил идею.


Базовая композиция сцены с физикой:
- Node или Node3D - корень сцены
- - StaticBody3D - неподвижное тело: платформа
- - - CollisionShape3D - коллизия платформы
- - - MeshInstance3D - графика платформы
- - RigidBody3D - подвижное тело: мячик
- - - CollisionShape3D - коллизия мячика
- - - MeshInstance3D - графика мячика
- - CharacterBody3D - тело, двигаемое кодом: игрок
- - - CollisionShape3D - коллизия игрока
- - - MeshInstance3D - графика игрока
- - Area3D - датчик объектов
- - - CollisionShape3D - коллизия (форма) датчика
И т.д.

CollisionShape3D сама по себе только контейнер для Shape, что передаётся наверх, конкретному CollisionObject3D, который может быть любым.

>Сам факт того что все проваливается через все по дефолту меня очень смущает.


В играх далеко не всегда нужна физика столкновений, многие объекты могут обойтись без этого. Кроме того, несколько моделей могут быть частями одного целого физического объекта, а один объект может содержать несколько независимых физических частей.

Но есть несколько способов упростить задачу.
1. У MeshInstance3D на панели сверху окна сцены специальная кнопка позволяет сгенерировать физическую форму или сразу тело. Нужно помнить, что автоматическая форма не всегда оптимальна, особенно когда твой меш большой и сложный.
2. Прототип статичных декораций можно сделать из CSG-нод, у которых есть галочка "use collision", которая автоматически включает статическое тело (тут тоже не всё гладко: CSG объекты часто имеют сложные поверхности, физика на них может глючить).
https://docs.godotengine.org/en/stable/tutorials/3d/csg_tools.html
298 957309
>>57280

> В чём твоя проблема?


В чём ТВОЯ? Ты же не воспринял совет, ты продолжаешь доёбываться. Свали нахуй в ишью на гитхабе и доказывай там Хуану, что автолоад ненужен.
299 957321
>>57309
Ты чего такой серьёзный? Нормально ж общались.

>автолоад ненужен


Кто сказал, что не нужен? Нужен, но редко: чтобы автоматически загружать набор нод независимо от выбранной сцены, например, надпись с числом FPS. Поэтому доступ к ним из настроек проекта, а не напрямую с главного экрана редактора. Новичку о них знать вовсе не обязательно, а то и вредно.

Пойми, я говорю о тех, кто не имеет богатого опыта разработки. Наломать дров с автолодами намного проще, чем без них, несмотря на их пользу в ряде отдельных, специфических случаев.
300 957334
>>57288
Кажется начинаю понимать. Название CollisionShape3D ввело в заблуждение поначалу. Да, видел что можно автоматически добавлять коллизии. Даже одну так сделал.Не туда одну коллизию поставил, даже не заметил, и машина стала проваливаться. Еще предстоит толкать машину с места, и камеру в салон ставить. Интересно что на iOS есть приложение по годоту, если кому интересно. Небольшой справочник.

Пока планирую игру, постоянно что-то рисую на бумаге. Недавно сделал заметку со скриптом для генерации дорог пока сидел на работе. Очень простой скрипт. Его задача в том чтобы дорога не сворачивала больше чем на 90 градусов, то-есть генератор не начал сворачивать дорогу в калач. Ничего не сделал еще в плане текстур и сцен, а гейм дизайн раньше в голове выстраивается раньше чем понимание как соединять объекты в редакторе годота. Главное не начать делать все и сразу, а просто описать на бумаге, перечитать и немного попуститься. Попадаю в ловушку когда пытаюсь найти в годоте сходство с классами java, а тут другое мышление, даже не программистское, а скриптизерское что-ли. В общем удаляюсь на несколько дней чтобы что-нибудь приличное сделать прежде чем заливать скриншот в тред.
301 957342
>>57334

>толкать машину с места


engine_force = достаточно большое значение.
По опыту, лучше увеличивать это значение плавно, чтобы оно не было слишком большим. Со слишком большим engine_force заднеприводный автомобиль встаёт на задние колёса... Как масл-кары в GTA 5.
302 957349
Всем привет я новенький сегодня первый день тыкался в движке по уроку в ютубе, мне очень понравилось делать свою игру
Приятно с вами познакомиться, а тут можно чатик делать и дневничок или забанят?
303 957355
>>57030
Воспоминание разблокировано: наблюдать за дефрагментацией диска в Вин98. Он ещё похрустывал так удовлетворительно.

Олсо, полистал ветку. Мне кажется анон >>56871

>Игры могут быть без игрока.


имел ввиду не ZPG, а отсутствие протагониста, ака персонификации игрока, внутри игры. А потом началась какая-то дичь с наблюдением за какими-то самодвижущимися системами. Кстати даже в классической конвеевской "жизни" игрок не полностью отсутствует, он раставляет клетки по полю и запускает/останавливает симуляцию.
# OP 304 957367
>>57349
Можно. Лучшие пикчи в шапку добавим.
305 957372
>>57355

>игрок не полностью отсутствует


Зависит от того, рассматриваем ли мы "игру" как приложение для ПК или веб-сервера с каким-либо пользовательским интерфейсом, или как систему, работающую по своим внутренним правилам.

Игра "Жизнь" Конвея может рассматриваться как программа с GUI, через который пользователь расставляет клеточки на поле, но обычно, когда обсуждают эту игру, имеют в виду набор правил, по которым меняются клеточки на поле. И этот набор правил включает только соседние клетки на том же поле - в нём нет ни слова о каком-то там "игроке".

Считаю, в любой игре полезно абстрагироваться от устройств ввода и пользователя в целом. Не важно, как игрок взаимодействует с игрой, она всегда должна следовать чётким правилам.

Конечно, часто игры подстраиваются под игрока, например, в гонках машины под управлением ИИ ускоряются, если отстают от машины игрока, либо замедляются, если обогнали машину игрока. Всё ради того, чтобы игрок был в центре событий. Но теоретически можно было бы запустить гонку без игрока и машины ИИ будут гоняться сами с собой - гоночная игра существует сама по себе как набор правил движения гоночных машин, не так ли?
306 957389
Выдрал из видео задник и одну из анимаций бега, и скомпоновал в мини уровень, где можно водить Гава влево-вправо.

Но в оригинале тень синего цвета. Как сделать такую в годо.
Для тени, я продублировал готовый Sprite2D, наклонил, и поменял цвет. Но цвет можно сделать только черный, хоть и полупрозрачный. Иначе в тени можно разглядеть сам спрайт.
Можно ли с помощью движка залить спрайт синим цветом?

И еще мне приходится дублировать управления на спрайт и на тень. Есть ли способ сделать тень чтобы она автоматически копировала спрайт?
307 957393
>>57372
"Game" -этимологически значит приятное совместное времяпровождение.
"Игра" - этимологически значит движение
Видеоигры называются так из-за адаптации компаний выпускающих автоматы для азартных игр к запрету на азартные игры. Атари, нинтедо, вильямс(пинбол) это изначально компании обслуживающие именно сферу азартных игр. Весь этот дроч на то что в "играх должен быть геймплей" ногами упирается тупо в этот историзм. По-настоящему, развлекательный софт может быть намного шире и существует куча игр где геймплей далеко не на первом месте, от популуса, автошахмат и текстрима до метал гирек, хэви-рейвов и стейдж лайтов.
308 957394
>>57389
Можно. Напиши простейший шейдер "Если Цвет.Альфа больше 0 то цвет = вектор 4 (0.,0.,1.,0.4)". Если не хочешь писать шейдер, можешь попробовать с материалом поиграть, но я хз.
309 957399
Хром версии >=126 ломает все веб-игры на годоте. И тройку и четверку.
-i-eT5pJ88.jpg145 Кб, 720x658
310 957410
Потихоньку разбираюсь в движке, но понял что катастрофически не хватает кодерской базы. Какие ресурсы можно почитать по оптимизации кода / ИИ для болванчиков / процедурной генерации / организации кода и архитектуре проектов?
311 957411
>>57410
Решай проблемы по мере их поступления.
g1.jpg112 Кб, 1134x856
312 957415
>>57394

>Напиши простейший шейдер


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

А как комбинировать шейдеры? Хочу еще один шейдер добавить, чтобы сгибал тень. Часть тени которая на земле, чтобы сильно наклонена была, а часть которая падает на стену, чтобы вообще без наклона, как на видео.
313 957416
>>57415

> А как комбинировать шейдеры?


Добавлять в шейдер блоки и соединять их лапшой.
314 957419
>>57416

>Добавлять в шейдер блоки и соединять их лапшой.


Меня интересует, во первых, можно ли напихать больше одного шейдера в материал спрайта?

И во вторых, как комбинировать вертексные шейдеры с цветовыми. Но оказалось что это разные слои одного и того же шейдра.
315 957428
>>57419
У каждого материала есть next_pass. Туда пихается следующий шейдер.

>>57415

>Просто втыкаем какой надо цвет, без всяких вычислений.


Не заигрывайся. Если игра целится в старое железо или мобилки, любой шейдер может неожиданно въебать по фпс. А может и нет.
316 957431
>>57419 >>57415
Читай документацию:
https://docs.godotengine.org/en/stable/tutorials/shaders/index.html
Также есть много бесплатных:
https://godotshaders.com/
Дополнительный шейдер тебе нужен обычно только если ты хочешь модульно комбинировать несколько шейдеров, например, добавить обводку или другой спецэффект поверх имеющегося. Тень персонажа возможно нарисовать одним шейдером.

>>57389

>можно водить Гава влево-вправо.


Тебе для чего? Ты у Союзмультфильм лицензию на использование данного персонажа получил? Если нет, они имеют легальное право убрать твою игру из любого легального маркета.

Если чисто для себя и близких, то ничего страшного.

>дублировать управления


Либо прикрепи спрайт тени к спрайту персонажа в дереве сцены, либо используй эту ноду:
https://docs.godotengine.org/en/stable/classes/class_remotetransform2d.html
Ты можешь вложить тень в потомки спрайта персонажа и включить у тени вот эту галочку:
https://docs.godotengine.org/en/stable/classes/class_canvasitem.html#class-canvasitem-property-show-behind-parent
w980-p16x9-2020-10-21T175351Z1615240965RC25NJ9SXSN2RTRMADP3FILM-BORAT-2.jpg215 Кб, 980x551
317 957447
Курю сейчас официальный гайд с сайта и параллельно разные уроки на ютубчике. Харошый, нраица. А вот юнити харошый, не очень.
318 957464
>>57428

>next_pass


Поискал. Оказалось у двухмерных шейдеров такого нету.

>>57431

>документацию


>есть много бесплатных


>Тень персонажа возможно нарисовать одним шейдером



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

>Союзмультфильм


Да я просто попытался разнообразить учебный процесс. Жаль не получилось отделить персонажа от фона с помощью нейронки.

>используй эту ноду


>вложить тень в потомки спрайта


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

А вообще, оказалось сложнее чем ожидал. Надо бы пока эту тень оставить и вернуться потом со свежей головой.
Видео-19-06-2024 115005.mp430,2 Мб, mp4,
1280x708, 1:25
319 957481
>>57191
Изменил немного арену, добавил не лицензированные треки и немног анимации поменял. Хотел ещё всякие дэш атаки боссу дать, но слишком туп для этого, займусь может после катсцен и локаций
изображение2024-06-19173302993.png297 Кб, 1901x1034
320 957510
Пацаны, я свою первую альфа версию игры сделал. Называется shit clicker.

Короче когда нажимаешь на джордж флойда оно считает количество нажатий.

Как мне теперь её в плеймаркете опубликовать чтобы рубить шекели?

И как сделал форму кнопки ровно по ебальнику флойда?
321 957512
>>57510
Или лучше сразу релизнуть в стиме, я считаю, что такой АААА гейминг заслуживает ценника в 70$
322 957545
>>57393

>"Игра" - этимологически значит движение


Задорнова переслушал?
Ни в какой момент истории ни в одной ветке славянских языков слово "игра" не было даже и краешком связано со смыслом "движение".
323 957554
>>57545
[jьgra] - Древнерусская фонетика слова "игра"
[jьgra] - Древнерусска фонетика слова "движение" - "ёра", от которого прозошло, например, слово "ёрзать"
1718827368038.jpg18 Кб, 200x200
324 957571
>>57554
Двачую этого. Латинский язык произошёл от древнерусского (Rasenna, Raśna) — древняя цивилизация, населявшая в I тысячелетии до н. э. северо-запад Апеннинского полуострова (область — древняя Этрурия, современная Тоскана) так же этруски).
Затем от латинского произошли все европейские языки.
325 957573
Может кто подскажет, делаю механику курения, огонек сигареты сделан через 3D Patricles. В статике все нормально, конец сигареты горит, но при повороте камеры, партикл отстает и на экране на милисекунду появляется. Тоже самое при ходьбе и падениях. Как можно пофиксить? Лайфтайм и так стоит 0.01 секунда, меньше нельзя
326 957575
>>57573
Локальные координаты партиклу выставь.
image.png43 Кб, 307x365
327 957576
>>57573В игре ничего нельзя делать кроме как доставать открывать пачку, доставать сигарету и курить ее
328 957577
>>57575
ну вот получается партикл как child у сигареты, visibility AABB маленьким квадратиком выставлен тоже
329 957578
>>57575
я так понимаю что это из-за того что партикл не успевает "умирать" и остается на том месте где был до поворота камеры
330 957584
Нихуя не могу понять. У меня тело под силой гравитации (сфера коллизия) медленно опускается на StaticBody3D (плоская коллизия), которое служит полом сцены, но это пол начинает мотать круги вокруг мирно падающего предмета. Как прибить гвоздями статичное тело? Я хуею, не могу найти простую галочку "блять не шатай боди, просто прибей гвоздями". Боди крутится будто у него веса вообще нет. Чтение форумов не помогло, а в доках не знаю с какой статьи начать. Пока что заменил коллизию сферу на прямоугольник, но это просто костыль.
331 957587
>>57389
Игра с открытым миром? По скольким локациям уже можно погонять?
1718877111210.png20 Кб, 338x350
332 957611
>>57578
Там внутри партикля есть опция локальных координат, как показано на прилагаемом скриншоте. Опция выключена по умолчанию. Включи её.
1718877177035.jpg25 Кб, 620x432
333 957612
>>57587

> По скольким локациям уже можно погонять?


По одной. Но зато в ней есть высокодетализированный советский шкаф, как у бабушки в детстве.
334 957634
>>57584

>StaticBody3D, которое служит полом сцены


>Как прибить гвоздями статичное тело?


StaticBody3D никак движком не двигается, ты сам двигаешь его из своего кода, если хочешь.

Скорее всего ты сам запутался, где у тебя пол, а где потолок. Добавь (вывернутый) куб с координатами "это пол (Y-), это потолок (Y+), это стены (X, Z)". Без коллизий, просто висящий в пространстве куб.
335 957635
>>57584
А, кажется, я понял твою проблему.

Ты привязал камеру к сфере без текстур? И площадка ВНЕЗАПНО начинает вращаться вокруг сферы, только когда сфера касается площадки? А небо с горизонтом у тебя пока не настроено?

Тогда всё понятно. На самом деле это не площадка вращается, а шарик катится по площадке. А камера, через которую ты смотришь, вращается вместе с шариком, и это создаёт иллюзию, будто вращается площадка. Добавь небо с горизонтом и увидишь:
https://docs.godotengine.org/en/stable/tutorials/3d/environment_and_post_processing.html#preview-environment-and-sun-low-priority
Также советую всё обмазать текстурой-сеткой:
https://kenney.nl/assets/prototype-textures
Или такой: https://uvchecker.vinzi.xyz/
336 957643
>>57635
заорал))
337 957650
>>57578
Тебе написали про локальные координаты.
Суть в том, что если координаты глобальные, то партикл относительно глобального мира (актуально например в случае искр из под колес), а если локальные, то относительно спавнера.
338 957651
>>57584
Показывай видео или скрин дерева сцены хотя бы. Одно предположение что ты их привязал чайлдом друг к другу и движение одного двигает и другое.
339 957657
>>57651

>предположение что ты их привязал чайлдом друг к другу и движение одного двигает и другое.


Я проверял, такое почему-то не работает:
- RigidBody3D
- - StaticBody3D
Статик останется неподвижно в пространстве.
340 957673
>>54699 (OP)
Сегодня размышлял об ИИ для персонажей и вот вспомнил, как делал для себя аддон в ноябре.

Сначала я хотел просто фреймворк для нелинейных историй с удобным GUI, но потом этот проект начал мутировать в универсальный граф чего угодно, чтоб служить затычкой в любой разветвлённой бочке. Но почему-то приуныл тогда и забросил всё это.

Концепция была такова. Основной блок "sequence" - это линейный набор строк с тегами или чего-то ещё, если возможно (хотелось прикрутить типизацию, но непонятно как). У этого блока есть вход и выход, их можно соединять с другими блоками. Несколько соединений с выходом - это select/option, несколько соединений со входом - это merge (слияние веток). Обрабатывается граф специальной виртуальной машиной, которая делает все переходы, формирует списки опций на развилках. Что делать со строками и тегами решает сам пользователь, машина только возвращает значения из ячеек sequence.

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

Идея с sequence возникла для решения проблемы, когда в редакторе с ниточками нужна некая длинная последовательность. У меня это столбиком, нитки в основном для развилок и слияний блоков. Нитки полезны для визуального представления ветвления, которое в линейной записи часто неудобно выглядит. Разумеется, сделал drag&drop для строк sequence, поэтому их легко делить на части по необходимости (конечно, в идеале нужно однокнопочное решение). Вообще, хотелось сделать что-то вроде инспектора ресурсов, только с ветвлением ниточками...

TL;DR: хочу всё и непонятно что => до ума не довёл.

В общем, что скажете? Ненужный велосипед?

Не помню, постил это здесь или нет?
341 957676
Кароч, положняк с кликером такой, все готово, кроме скринов и видосов, которые я бля из за 4:3 моника сделать не могу в фхд, пришлось знакомого попросить сделать, жду вот когда скинет. Останется смонтировать и можно релизить.
Некст буду тдшку делать, точнее уже чутка начал. Чувствую больше всего со звуком намучаюсь.
Бывайте.
342 957681
>>57676

>сделать не могу в фхд


По-моему, можно сделать разрешение окна игры значительно больше разрешения экрана. И сделать скриншоты и видео с него. Конечно, кликать можно будет только в области, которая умещается в экран, однако, если у тебя весь кликабельный гуй с одной стороны, в настройках редактора есть опция для размещения окна игры в конкретном месте.
пример.png29 Кб, 1000x600
343 957686
>>57673
Ещё проблема: продумал возможность создания циклических связей, однако как разместить нитки визуально, чтоб легко читалось - непонятно. Вроде настройка изгиба есть, но как я посчитаю изгиб? Полностью вручную рисовать пробовал - опять же, необходимо как-то определить границы блоков...

Вот пример с тегами. В теории, их должна парсить виртуальная машина (не проблема со StringName), а дальше игра делает какие-то действия: выводит картинки, анимации, спецэффекты, надписи. Пока недоделано, но я планировал сделать менеджер, в котором к тегам можно привязать какие угодно данные, вроде png картинок. Плюс хотелось бы автодополнение при вводе тега в ячейку...

Вообще много чего придумал, но недоделал. Скажем, объединение в группы или "рабочие столы": можно разместить блоки в разных вкладках для удобства. Или вот хотелось сделать вызов метода скрипта. Вообще писать кусочки скриптов. В теории можно, но как проверять валидность кода? Сложно будет.

Какое отношение к игровому ИИ? Хотелось сделать редактор иерархических конечных автоматов или что-то в этом роде. Видел готовые аддоны, но мне совершенно не нравится юзать ноды для этого.

Приуныл и растерял мотивацию. Как всегда...
2024-06-20 23-07-17.mkv2,5 Мб, mp4,
1920x1080, 0:42
344 957687
>>57651
>>57657
Ощутил прилив сил вечером и стал играться с кэфами. Первое что сделал это добавил коллизию главной ноде. Просто забыл, из-за чего обидно. Потом понизил усиление пружин на колесах. В общем сделал неопрокидываемое авто, физон которому можно улучшать бесконечно. Можете использовать мой рецепт для гонащек.
345 957688
>>57686
Ещё такая мысль, изначально я сделал возможным сворачивать (минимизировать) блок, чтобы остался только заголовок и связи, для этого кнопка с иконкой свитка (скрипта). Но я видел где-то такой подход, что спискота отображается в отдельном боковом меню, а граф содержит только ноды с заголовками. Думаю попробовать так, но тогда нельзя будет захватить всё содержимое графа в один скриншот, и могут быть дополнительные проблемы с drag&drop'ом.
346 957696
>>57681
Сложно как то и неудобно, да и фуллскрин у меня запускается на мое разрешение а не проекта.
image.png12 Кб, 432x227
347 957701
Делаю настольную 2д игру, в ней будут кубы, некоторые из них можно перебросить, как сделать так чтобы по клику можно было выбрать кубы, которые я хочу перебросить? Прикрепить анимированный спрайт к кнопке? И как это все дело выровнять горизонтально, подскажите плз
348 957707
>>57701
Делай контрол нодами. Сделай грид или Хсплит контейнер и засунь свои кубы туда для автовыравнивания. И используй не анимированнвй спрайт, а Текстурированый прямоугольник. Засунь свои кубы в ресурс анимейтед текстуре и меняй номер кадра для куба.
349 957712
4.3 Beta 2
https://godotengine.org/article/dev-snapshot-godot-4-3-beta-2/

Дисклеймер: делайте бэкап проектов, есть несовместимые изменения.

Однопоточный веб экспорт
Проигрыватель сэмплов, для веб аудио без заиканий. Очевидные подводные это не для процедурных звуков. И надо прогружать заранее.
Улучшенный бутскрин
Обещают улучшение работы веб экспорта на айфонах
Добавление в веб рендер недостававших: MSAA and resolution scaling, Glow, ReflectionProbes, LightMapGI, Adjustments and Color Correction

Какой то рефакторинг AnimationPlayer, пока не читал что именно https://godotengine.org/article/migrating-animations-from-godot-4-0-to-4-3/
Добавлена нода SkeletonModifier3D, вроде то что не успели к 4.0
Импорт fbx без сторонней утилиты.

Обратный буфер глубины 3д, некоторые шейдеры надо переписывать https://godotengine.org/article/introducing-reverse-z/
Некоторые улучшения для пиксель перфект 2д игр, https://godotengine.org/article/dev-snapshot-godot-4-3-beta-1/
Оптимизация рендерграфа, возможное ускорение на 10%

Автообновление версии движка из хаба
350 957713
>>57712

> делайте бэкап проектов


Или пользуйтесь godot-manager и тогда вы будете уверены, что ваш проект запускается на явно настроенной для него версии движка.
351 957714
>>57713
Речь про ситуацию, когда ты захотел перевести проект на след. версию, например ждал какую то фичу или исправление бага, но потом не понравилось, допустим появился другой баг, и ты хочешь открыть старой версией, но так не выйдет.
352 957717
>>57687

>понизил усиление пружин на колесах


Ты подвеску убил - не держит машину.

>неопрокидываемое авто


Такие настройки попробуй.
сцена.jpg76 Кб, 545x800
353 957720
>>57687

>добавил коллизию главной ноде


Зачем? Она (Node3D) коллизию не принимает.

Читай внимательно:
https://docs.godotengine.org/en/stable/classes/class_collisionshape3d.html

>A node that provides a Shape3D to a CollisionObject3D parent and allows to edit it. This can give a detection shape to an Area3D or turn a PhysicsBody3D into a solid object.


Т.е. она нужна только потомкам этого класса:
https://docs.godotengine.org/en/stable/classes/class_collisionobject3d.html

>Abstract base class for 3D physics objects. CollisionObject3D can hold any number of Shape3Ds for collision.



Лично от себя рекомендую держать CollisionShape3D в списке потомков ближе всего к её предку, чтобы в случае чего сразу видеть, к чему она относится:
- физическое тело или зона-датчик
- - форм(а/ы) коллизии
- - визуальная модель
- - колёса и всё такое прочее
354 957732
Я покакал сделал 2д игру из официального гайда. Такие дела. Теперь я могу писать в резюме, что я разработчик компутерных игор?
355 957738
>>57717
Полагаю что у VehicleBody3D из коробки откровенно всратые параметры физона по умолчанию, и поэтому многие разрабы берут сбалансированный RidgidBody3D чтобы хуяк-хуяк и сразу в игру закинуть. На данный момент у меня пружины дают адовейший body roll, который напрямую зависит от массы авто и гравитации. У тебя на видео лимузин рассекает в поле с физоном из роблокса, поэтому он устойчив. Столб с 4 колесами еще устойчивей будет, но можем ли мы его назвать машиной?

Попробую найти материал по зависимости параметров физона друг от друга. Не зря же советуют при массе 1000 делать тормоз 25. Существуют коэфы, которые предусмотрели разрабы, и при других значениях физон становится не очень.
scenesaver.PNG62 Кб, 804x395
356 957759
Сап, /gd/.

Хочу сохранять сцену как в различных РПГ от бефезды типа Skyrim, Fallout 3, чтобы все объекты сохранялись в том же положении, с теми же характеристиками и переменными, что и в момент игры. Я попробовал использовать методы ResourceSaver и Resourceloader. Они работают не так, как мне надо. Когда я сохраняю сцену, сохраняются только те объекты, которые были заранее на ней в момент её создания. Если добавить на сцену новый объект при помощи add_child(), он не будет сохраняться, при этом никакой ошибки редактор не выдаёт. Предметы можно свободно передвигать, физические объекты сохраняют инерцию и энергию, а новые дети сцены просто испаряются.

Сначала я попробовал это исправить через перебор всех детей сцены при помощи цикла for и метода PackedScene.pack(), но это не сработало потому что .pack() сохраняет только одну ноду, а прежнюю ноду из PackedScene стирает. Что надо сделать, чтобы сохранялись все ноды current_scene в файл PackedScene?
357 957760
>>57759
Почитай про owner. Но вообще тут надо делать свою систему сейвов.
358 957761
>>57760

>Но вообще тут надо делать свою систему сейвов.


Что ты имеешь ввиду? Эти функции не подходят для сейвов?

В голове есть представление как делать систему из создания новых и перезаписывания старых сохранений, это потом имплементирую. Сейчас пока с одним файлом работаю.
image.png11 Кб, 383x145
359 957762
>>57759
Сохраняешь ноду - проставляешь всем ее детям овнеров. А "своя система сейвов" не нужна. У меня два проекта на пакед сценах сделаны, полет нормальный.
360 957764
>>57759
Алсо для сохранения на диск я использую бинарный .scn вместо .tscn. С tscn был какой-то баг, уже не помню какой, писал о нем ИТТ тредов 15 назад.
361 957766
>>57760

>owner


Блин, чёт не работает.

У меня в коде записано примерно так:
holded = объект, который игрок держит в руках

face_cast.get_collider( объект, на который смотрит игрок ).add_child( holded )
holded.set_owner( holded.get_parent() )


Почему-то не работает, хотя проверка через print(holded.owner) показывает то что ожидалось.

>>57762
А какой смысл в пикрил? Разве овнеры сразу ещё не расставлены? Вроде всё нормально сохраняется кроме добавленных нодов. Энивей, попробую, с чем чёрт не шутит!
>>57764
Посмотрим, попробуем
362 957767
>>57766

> A node can have any other node as owner (as long as it is a valid parent, grandparent, etc. ascending in the tree). When saving a node (using PackedScene), all the nodes it owns will be saved with it. This allows for the creation of complex SceneTrees, with instancing and subinstancing.


>Note: If you want a child to be persisted to a PackedScene, you must set owner in addition to calling add_child(). This is typically relevant for tool scripts and editor plugins. If add_child() is called without setting owner, the newly added Node will not be visible in the scene tree, though it will be visible in the 2D/3D view.


Нет, овнеры не расставлены. Это не родители, это фича скорее от движка для движка.
363 957768
>>57761
Потому что в отличии от второго ответившего анона, я не считаю что для игры "типа скайрима" нужен сейв сцены со всеми коллайдерами и прочими зависимостями. А нужен сейв "предметной модели" - сохранить, например, что условная телега сейчас по координатам xyz под углом uvw, а при загрузке спавнить нужную сцену с коллайдером в нужном месте.
364 957769
>>57762
Сработало!!! Спасибо, не все герои носят плащи

>>57767
Понял, спасибо

>>57768
Я об этом думал, но понял, что гораздо проще в моём случае (небольшие, практически комнатные сцены) всю сцену сохранять в один файл. Понятное дело, что в игре с открытым миром каждый раз сохранять всю карту на отдельный сейв просто неразумно, а загрузки будут долгими.
365 957773
>>57738

>всратые параметры физона по умолчанию


Да, параметры странные, не менялись годами.

>RidgidBody3D чтобы хуяк-хуяк и сразу в игру


Я несколько раз пробовал сделать велосипед на RigidBody3D, это довольно сложно, я не осилил.

>пружины дают адовейший body roll


Поставь roll_influence = 1 или 2, немного поможет.

>У тебя на видео лимузин


Там габариты чуть короче и шире, чем у Жигулей.

>с физоном из роблокса, поэтому он устойчив


Даже в GTA 5 (!) увеличили силу тяжести машинам, прижимая их к асфальту так, будто они на рельсах.

>Столб с 4 колесами еще устойчивей будет


Нет. Чем выше центр тяжести, тем легче опрокинуть, поэтому специально занизил центр тяжести (смотри внимательнее на center of mass у VehicleBody3D).

>но можем ли мы его назвать машиной?


На видео вообще сфера. Туториал (устарел):
https://kidscancode.org/godot_recipes/3.x/3d/3d_sphere_car/

>найти материал по зависимости параметров


Самое надёжное - смотреть исходники движка. Но если ты хочешь прям реалистично, то тебе нужно самостоятельно делать всё на RigidBody3D...

Однако, я тебя не понимаю. Ты хочешь повторить игру, в которой машина не может развернуться на 180 градусов, т.е. это "вагонетка на рельсах", а не настоящая машина. Я бы на твоём месте взял ноды PathFollow3D и Path3D, чтобы привязать "машину" к дороге, а физику имитировал бы смещением меша.
https://docs.godotengine.org/en/stable/classes/class_pathfollow3d.html
В старых 2.5D гонках не было настоящей физики, машинка вообще никуда не катилась - создавали иллюзию за счёт смещения сегментов дороги.
366 957779
>>57768

>нужен сейв "предметной модели"


Годочую.

>>57769

>всю сцену сохранять в один файл


Проблемы с таким подходом:

1. В файл сцены можно запаковать скрипт, при чём автоматически запускаемый. Т.е. есть возможность разработать GDScript-вирус, который будет скакать по сейв-файлам и делать свои грязные дела. Это обсуждалось на GitHub, официальное мнение:

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


С чем я полностью согласен. Юзаем json.

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

3. Если ты хоть что-то в своих сценах меняешь, все сохранения этой сцены становятся неактуальными, проверить и исправить автоматически ты это вряд ли сможешь. Соответственно игроки вынуждены начинать игру с нуля, чтобы оценить новый контент.

4. Избыточные данные. Да, ты можешь сказать "да ладно, сцены небольшие", но есть нюансы:
- сцены небольшие, но их будет много (РПГ же?);
- некоторые ресурсы в сценах очень жирные, типа массивов тайлмапа/гридмапа, некоторые Shape3D, некоторые Mesh, и т.д. Буквально десятки мегабайт может занимать визуально простенькая сцена. О бинарном формате не знаю, что там по сжатию...

Короче, если делаешь что-то больше "игры-прикола" на один раз, лучше подойти к сохранениям серьёзно.
map.png281 Кб, 1200x600
367 957780
>>57159

>в 2D общие карты отрисовать


Вроде неплохо, но как-то однообразно.
368 957781
>>57773

>roll_influence = 1


>center_of_mass


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

Проворот тел вокруг своей оси отлично описывается здесь. У меня 1 в 1 опыт на 4.2.2..
https://forum.godotengine.org/t/issue-with-vehicle-suspension-when-applying-angular-forces/41729/6

>Ты хочешь повторить игру, в которой машина не может развернуться на 180 градусов, т.е. это "вагонетка на рельсах"


Хочу заменить езду на более технологичную, перейти с 2.5д на 3д. Чтобы слегка укачивало, был легкий крен и опрокидывание на крышу при вывороте руля на максимальной скорости.
369 957782
А что если сделать локал кооп (couch coop) игру? Насколько это удачная ниша? Плюс слышал что стим позволяет локал кооп одной галкой переделать в онлайн кооп.
370 957787
>>57782

>Насколько это удачная ниша?


1. Нужны друзья.
2. ...кому нравится играть в те же игры, что и тебе.
3. ...и они должны быть в одной комнате с тобой.
4. ...и у вас должно быть минимум два геймпада или желание сидеть вдвоём за одной клавиатурой.
5. ...при этом очень желателен большой монитор.

А теперь подумай сам о том, как ты сужаешь ЦА.

>одной галкой переделать в онлайн кооп.


Не знаю, не слышал, сильно сомневаюсь.

Там есть API для p2p мультиплеера, но локальный кооператив принципиально отличается от онлайна.
371 957788
>>57787
Брух, так у всех нормальных людей пункты 1-5 по дефолту присутствуют.

>сильно сомневаюсь


Погуглил - Remote Play Together называется.
372 957789
>>57781

>Когда коллизия ящик, то сначала все очень удобно, но если предусматривается крен, то он становится таким резким, что машина начинает вращаться вокруг своей оси.


Возможно, у тебя колёса в пол западают. У меня нормально с "ящиками", никаких сфер не нужно.

>Проворот тел вокруг своей оси


Так ведь там проблема была в apply_force(). Тебе эта функция вообще не нужна для VehicleBody3D.

>Чтобы слегка укачивало, был легкий крен и опрокидывание на крышу при вывороте руля на максимальной скорости.


Чисто технически, всё это возможно сделать через анимации, не используя физическую симуляцию. Физическая стимуляция нужна для неровного ландшафта, бордюров, сложных столкновений.
373 957794
>>57788
Брух, мы на дваче. Нормальные люди социоблядстивуют, а не капчу вводят.
374 957796
>>57794
Нет. Я нормальный. Нормальный.
image.png1,4 Мб, 1080x871
375 957800
376 957801
Свежее обсуждение статической типизации:
https://www.reddit.com/r/godot/comments/1dkzeun/statically_typed_gdscript_should_be_the_default/

>After having built a 3D bullet hell in GDScript, spending almost as much time doing optimizations as I spent on programming the prototype, and now building a similar prototype in C# using the physics / rendering server...I can't think of any reason to NOT statically type your GDScript code.


>I did a side-by-side optimization comparison test that directly accesses the Physics/Rendering 3D server to create 3000 bullets in GDScript and C#. Statically typed GDScript was only about 10% FPS slower than the C# version.


Из комментариев:

>And the gains going from dynamically typed GDScript to full out statically typed GDscript was literally 40-50 fps to 200+ fps.


>And this difference is only exacerbated the larger your project becomes, as games ultimately do.


Один из крутанов пишет:

>KoBeWi


>Actually, type hints are enabled by default in 4.3 and AFAIK demos/documentation are being updated to use typed code.

377 957803
>>57801
Все так. ГДСкрипт с тайпхинтами довольно шустр и гораздо удобней чем без, и его давно уже всюду пихают и правильно делают. Идеально. Не удивлюсь если юнька через пару лет гдскрипт украдет и он станет де-факто дефолтом для геймдева.
378 957806
>>57803

>если юнька через пару лет гдскрипт украдет


Юридически они имеют право, пусть крадут. Но эффективные менеджеры не смогут сладить с тысячами программистов, которые нужны, чтобы выкрутить лампочку виртуальную машину GDScript из Godot и вкрутить её в Unity. Дорого, тут нужны триллионы долларов, а $U всё падает и падает.

Поэтому продолжаем делать игры на Godot.
1718995742323.png130 Кб, 640x360
379 957848
>>57801
Выбор.
380 957850
>>57803

>станет де-факто дефолтом для геймдева


Game Develop Script
image.png4 Мб, 2000x2000
381 957853
Всем делать игры, иначе пикрил придет во сне и сделает игру из вас.
1718998896983.png276 Кб, 421x663
382 957854
>>57850
Еее! Вперёд, Годот!
static-assets-upload6955568285462496600.gif6,4 Мб, 755x509
383 957863
>>57853
А у него есть бур?
image.png144 Кб, 591x519
384 957866
385 957880
>>57717
Реализовал себе фичу из GTA 5: контроль поворота в воздухе. Знал об этой фиче много лет и активно её использовал, но и подумать не мог, как сильно она влияет на ощущения от геймплея. Разница уровня "беспомощный кирпич" vs "крутой акробат". Только теперь по-настоящему понимаю решение Rockstar.

>>57781

>становится таким резким, что машина начинает вращаться вокруг своей оси


Я вспомнил об одной очень важной для правильной физической симуляции настройке, о которой редко упоминают: angular_damp. Суть в том, что реальные объекты замедляются сопротивлением воздуха, зависящего от формы объекта, но в игровом движке слишком дорого симулировать потоки воздуха. Так придумали упрощённую формулу, приблизительно имитирующую сопротивление воздуха.

Короче, значение по умолчанию 0.1, оно нормально подходит только сферическим объектам. Машинке необходимо поднять это значение повыше, тогда спокойнее будет реагировать на работу подвески.

На видео angular_damp должен быть равен 1.0, но я сделал это для более точного контроля в воздухе.
1576945751310.png16 Кб, 652x80
386 957896
Как же я хорош.
Untitled-1.jpg115 Кб, 940x360
387 957899
388 957912
>>57896
Фигню какую-то сделал. У тебя только одна кнопка в главном меню? А зачем тогда она нужна? Или это экран "нажмите что угодно чтобы войти в главное меню"? Но тогда главное меню уже должно быть в дереве сцены, чтобы не тормозило.
389 957913
>>57912
Я тоже думаю стоит переделать архитектуру, на случай если захочется сделать кнопку мультиплеерной.
390 957914
>>57913
Не смешно. Поведение главного меню изменится с большей вероятностью, чем дизайн геймплея.

Алсо, любую игру можно переделать в мультиплеер, а мультиплеер чрезвычайно популярен у нормисов, так что полностью сбрасывать его со счетов нельзя.
391 957919
>>57914
Так и представляю как за месяц до релиза начинаю переделывать свою визуальную новеллу в ммо.
392 957945
>>57919

>за месяц до релиза


О, ты прям как ААА студия, дедлайн себе ставишь. Кранчишь поди 24/7, премию себе урезаешь за невыполнение сроков, потом переносишь релиз несколько раз, а на выходе всё равно киберпук77.

>визуальную новеллу в ммо


Книжки читать тоже можно большой компанией.
393 957946
>>57945
Я не, но даже это лучше чем как ты - бесконечно вариться в продакшн хелле, переделывая один участок кода раз за разом, в итоге выпуская игру морально устаревшую лет на 10, а то и не выпуская ничего.
394 957948
>>57946

>морально устаревшую лет на 10


Судьба всех труъ инди...

>а то и не выпуская ничего


Лучше вообще ничего не выпускать, чем пополнить огромную коллекцию никому не нужного софта.
395 957949
>>57948
Найс аутотренинг у тебя, канешн. Но мамка твоя тебя все же релизнула.
396 957959
>>57880
Молодец!

Вчера смог исправить все проблемы с физоном. Сделал коллизию авто из трех циллиндров. Этого за глаза для npc тачек. Главная машина временно будет такая же пока не решу какой ей нужен физон. Теперь пора соденинять несколько сцен чтобы была бесконечная прямая дорога, и процедурно добавлять в них встречные машины. Потом изучать работу физона столкновений со встречкой. Есть идеи на счет сюжета чтобы был смысл идти из точки А в точку Б. А то обычно в хоррорах просто бросают игрока в сцену и говорят: "давай дальше сам как-нибудь, только красную дверь не трогай, иначе умрешь".

Еще оказалось что игра Spooky Night уже существует, поэтому переименовался. Жаль имя Night Drive тоже было занято. Кстати графическая часть в Night Drive выглядит охуенно: езда от 1 лица с графоном и ебаками SCP. Вот только сами ебаки из SCP как бревна с глазами стоят и изредка двигаются. Сюжет на уровне найти на обочине ебаку чтобы сюжет продолжился.
397 957965
>>57959
Спасибо, ты тоже молодец.

>смог исправить все проблемы с физоном


Ээээ... Как бы сказать...

Во-первых, колёса VehicleWheel3D, по идее, должны располагаться примерно по середине меша шины колеса. В противном случае у тебя машинка будет физически заезжать колесом на бордюр, когда визуальное колесо ещё не находится на бордюре. От первого лица это не критично, наверное, но могут возникнуть проблемы со стенками (эти колёса не являются твёрдыми, там просто рейкаст) и NPC.

Во-вторых,

>Сделал коллизию авто из трех циллиндров


Это очень странное решение. На твоём же видео машинка нереалистично покатилась из-за того, что она физически круглая. А ещё вот:
https://docs.godotengine.org/en/stable/classes/class_cylindershape3d.html

>Note: There are several known bugs with cylinder collision shapes. Using CapsuleShape3D or BoxShape3D instead is recommended.


>Performance: CylinderShape3D is fast to check collisions against, but it is slower than CapsuleShape3D, BoxShape3D, and SphereShape3D.


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

В-третьих, попробуй менять angular_damp... или это:
https://docs.godotengine.org/en/stable/classes/class_rigidbody3d.html#class-rigidbody3d-property-inertia
Можно настроить вращение по каждой оси.

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

>Есть идеи на счет сюжета чтобы был смысл идти из точки А в точку Б. А то обычно в хоррорах...


Можно сделать что-то в этом духе:
https://ru.wikipedia.org/wiki/Мгла_(фильм)
Спасаемся от растущей зоны НЁХ, из которой лезут различные монстры. На мой взгляд, страшнее будет сделать так, чтоб монстры нападали в т.ч. друг на друга, ибо так они правдоподобнее (у них там своя экосистема, люди для них просто необычная еда). Геймплей можно завязать на том, что если хорошо водишь машину - отрываешься от монстров, а если плохо - должен чаще уворачиваться от нападений. Дальше оторвался - больше времени на заправке. Безумные водятлы, мешающие сбежать, олени на дорогах, упавшие деревья и камни, огромные ямы, перекрытые на ремонт участки дороги добавляют препятствий, повышая риск затормозить.

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

>переименовался


Не парься о названии пока.

Ещё о камере. Вроде ты хотел от первого лица, но почему-то размещаешь камеру снаружи машины. Вопрос, зачем? Вид камеры сильно влияет на ощущения от геймплея. Конечно, нужно сделать салон машины и прозрачные стёкла, но в лоуполи это не так уж сложно, и наверняка есть готовые бесплатные модельки с салоном.

Для камеры от третьего лица нужно как минимум:
1. SpringArm3D для вращения по X/Y и сближения, если между камерой и объектом препятствие.
2. Убрать вращение по Z, чтобы камеру не шатало вместе с машиной. Раньше думал, что это прикольно, однако быстро начинает раздражать.

С камерой от первого лица чуть проще. Но там свои проблемы, ведь угол обзора сильно ограничен.
397 957965
>>57959
Спасибо, ты тоже молодец.

>смог исправить все проблемы с физоном


Ээээ... Как бы сказать...

Во-первых, колёса VehicleWheel3D, по идее, должны располагаться примерно по середине меша шины колеса. В противном случае у тебя машинка будет физически заезжать колесом на бордюр, когда визуальное колесо ещё не находится на бордюре. От первого лица это не критично, наверное, но могут возникнуть проблемы со стенками (эти колёса не являются твёрдыми, там просто рейкаст) и NPC.

Во-вторых,

>Сделал коллизию авто из трех циллиндров


Это очень странное решение. На твоём же видео машинка нереалистично покатилась из-за того, что она физически круглая. А ещё вот:
https://docs.godotengine.org/en/stable/classes/class_cylindershape3d.html

>Note: There are several known bugs with cylinder collision shapes. Using CapsuleShape3D or BoxShape3D instead is recommended.


>Performance: CylinderShape3D is fast to check collisions against, but it is slower than CapsuleShape3D, BoxShape3D, and SphereShape3D.


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

В-третьих, попробуй менять angular_damp... или это:
https://docs.godotengine.org/en/stable/classes/class_rigidbody3d.html#class-rigidbody3d-property-inertia
Можно настроить вращение по каждой оси.

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

>Есть идеи на счет сюжета чтобы был смысл идти из точки А в точку Б. А то обычно в хоррорах...


Можно сделать что-то в этом духе:
https://ru.wikipedia.org/wiki/Мгла_(фильм)
Спасаемся от растущей зоны НЁХ, из которой лезут различные монстры. На мой взгляд, страшнее будет сделать так, чтоб монстры нападали в т.ч. друг на друга, ибо так они правдоподобнее (у них там своя экосистема, люди для них просто необычная еда). Геймплей можно завязать на том, что если хорошо водишь машину - отрываешься от монстров, а если плохо - должен чаще уворачиваться от нападений. Дальше оторвался - больше времени на заправке. Безумные водятлы, мешающие сбежать, олени на дорогах, упавшие деревья и камни, огромные ямы, перекрытые на ремонт участки дороги добавляют препятствий, повышая риск затормозить.

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

>переименовался


Не парься о названии пока.

Ещё о камере. Вроде ты хотел от первого лица, но почему-то размещаешь камеру снаружи машины. Вопрос, зачем? Вид камеры сильно влияет на ощущения от геймплея. Конечно, нужно сделать салон машины и прозрачные стёкла, но в лоуполи это не так уж сложно, и наверняка есть готовые бесплатные модельки с салоном.

Для камеры от третьего лица нужно как минимум:
1. SpringArm3D для вращения по X/Y и сближения, если между камерой и объектом препятствие.
2. Убрать вращение по Z, чтобы камеру не шатало вместе с машиной. Раньше думал, что это прикольно, однако быстро начинает раздражать.

С камерой от первого лица чуть проще. Но там свои проблемы, ведь угол обзора сильно ограничен.
1719063773082.png33 Кб, 529x203
398 957971
>>57896
Не так хорош, как я:
1719064100683.png33 Кб, 523x253
399 957972
>>57971
А впрочем, четвёрка же. Можно быть ещё круче.
400 957977
>>57965

В плане физона для npc машин оставляю то что есть. Вся надежда на то что машина быстро появляется в кадре, и так же быстро пропадает, из-за чего игроку ее физон вообще не важен пока поведение в пределах нормы. Камеру к машине для 1 лица еще не прикручивал. Все еще делаю тесты в 3 лице. Салон (и вся остальная машина вокруг) не в наличии, а без него 1 лицо имеет мало смысла. С новой моделькой надо заново все части машины собирать, и заново гонять параметры через тесты. Скачал Blockbench и MagicaVoxel для графона.

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

Все шейпы хороши, но для машин мне проще использовать циллиндр. Теоретики могут писать что хотят, но лично у меня в сценах все работает прекрасно без багов. В шейпе две оси, одна из которых напоминает куб, а вторая капсулу. Стык имеет специфичный физон, но, сюрприз, он такой же неочевидный в реальной жизни. То что "CylinderShape3D is fast to check collisions against, but it is slower than CapsuleShape3D, BoxShape3D, and SphereShape3D" меня не удивляет, и никак не мешает. Не понимаю почему дауны ожидают от опенсурсных упрощенных шейпов в godot каких-то чудес на уровне специализированного пропиретарного движка Havok.

Если нужен переворот на крышу на максимальной скорости при вывороте руля, то подгонять десятки параметров тела под этот случай можно бесконечно. Мне видится что намного легче сделать этот переворот когда достигнуты определенные значения скорости и угла руля. Как только оба значения равны искомому, делаем каунтер +=1 (1 фрейм условие выполнилось). При N фреймов переворачиваемся. В нейтральном положении руля сбрасываем каунтер. Мне будет в будущем проще код показать наверное, чем объяснить. Такой костыль мне дешевле по времени написать чем стать специалистом по RigidBody3D.

Сюжет простой: главгерой автостопом едет в ебеня чтобы купить себе машину. На месте выесняет что в машине умер дед. Ну и дальше чел уже один едет и офигивает, что он дорогу не знает, пытается достучаться до местных чтобы направили. И так едет из города в город. Ну а неписи как в Морровинде такие: как поедешь там за речкой сверни, а потом налево, че как маленький.
400 957977
>>57965

В плане физона для npc машин оставляю то что есть. Вся надежда на то что машина быстро появляется в кадре, и так же быстро пропадает, из-за чего игроку ее физон вообще не важен пока поведение в пределах нормы. Камеру к машине для 1 лица еще не прикручивал. Все еще делаю тесты в 3 лице. Салон (и вся остальная машина вокруг) не в наличии, а без него 1 лицо имеет мало смысла. С новой моделькой надо заново все части машины собирать, и заново гонять параметры через тесты. Скачал Blockbench и MagicaVoxel для графона.

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

Все шейпы хороши, но для машин мне проще использовать циллиндр. Теоретики могут писать что хотят, но лично у меня в сценах все работает прекрасно без багов. В шейпе две оси, одна из которых напоминает куб, а вторая капсулу. Стык имеет специфичный физон, но, сюрприз, он такой же неочевидный в реальной жизни. То что "CylinderShape3D is fast to check collisions against, but it is slower than CapsuleShape3D, BoxShape3D, and SphereShape3D" меня не удивляет, и никак не мешает. Не понимаю почему дауны ожидают от опенсурсных упрощенных шейпов в godot каких-то чудес на уровне специализированного пропиретарного движка Havok.

Если нужен переворот на крышу на максимальной скорости при вывороте руля, то подгонять десятки параметров тела под этот случай можно бесконечно. Мне видится что намного легче сделать этот переворот когда достигнуты определенные значения скорости и угла руля. Как только оба значения равны искомому, делаем каунтер +=1 (1 фрейм условие выполнилось). При N фреймов переворачиваемся. В нейтральном положении руля сбрасываем каунтер. Мне будет в будущем проще код показать наверное, чем объяснить. Такой костыль мне дешевле по времени написать чем стать специалистом по RigidBody3D.

Сюжет простой: главгерой автостопом едет в ебеня чтобы купить себе машину. На месте выесняет что в машине умер дед. Ну и дальше чел уже один едет и офигивает, что он дорогу не знает, пытается достучаться до местных чтобы направили. И так едет из города в город. Ну а неписи как в Морровинде такие: как поедешь там за речкой сверни, а потом налево, че как маленький.
401 957996
>>57946

>бесконечно вариться в продакшн хелле, переделывая один участок кода раз за разом


Так наоборот если говнокодить без какой-либо попытки заложить архитектуру на будущее, то увеличиваешь шансы увязнуть в лапше когда в очередной раз попытаешься добавить фичу и поймёшь что конструкция уже трещит по швам. Чистый код, паттерны и прочую залупу придумали на вот таких ошибках как у тебя, впрочем я думаю что пока говнокод тебя не ужалит в жопу, смысла втирать про бест практисес нет. Каждый должен наговнокодить свою долю прежде чем осознать зачем нужны паттерны.
402 958007
>>54699 (OP)
https://github.com/godotengine/godot-proposals/issues/56

>AThousandShips commented May 16, 2024


>At this time there isn't really anything that needs doing from any contributor, we're in feature freeze for 4.3 so it won't be merged right now, but hopefully it can be reviewed early in the 4.4 release cycle, it's a large feature so it's been hard for reviewers to find the time to focus on it properly.



https://github.com/godotengine/godot/pull/78656

>All core issues are resolved!


>var typed_key_value: Dictionary[int, String] = { 1: "first value", 2: "second value", 3: "etc" }


>var typed_key: Dictionary[int, Variant] = { 0: "any value", 10: 3.14, 100: null }


>var typed_value: Dictionary[Variant, int] = { "any value": 0, 123: 456, null: -1 }

403 958008
>>57971 >>57972
Палю лайвхак, никому не рассказывай:

>$PlayButton.pressed.connect(get_tree().start_the_game)


>$PlayButton.disabled = false

404 958026
>>58008
С коннектом любой дурак может.
17190736481270.jpg46 Кб, 470x960
405 958029
>>58026

>С коннектом любой дурак может.


Да не дура я! Сам дурак!
406 958036
>>57977

>В плане физона для npc машин оставляю то что есть.


Если игрок столкнётся с ними, они должны иметь достаточно точные коллизии. У тебя, как понимаю, коллизии выходят за пределы визуальной модели, поэтому игрок может случайно зацепить встречный автомобиль за невидимый выступ. Это раздражает игрока, когда он цепляет что-то невидимое, что по логике цеплять не должен, особенно когда игра наказывает за это (даже если неявно).

Если игрок не сталкивается, а машин NPC много, то физику им можно вообще отключать и вести их по заранее известным кривым (Безье - Path3D) дороги, как это делали в разных 3D GTA (это легко наблюдать прямо в игре: машины NPC иногда глючат, проходя сквозь асфальт или двигаясь боком, никакая подвеска у них не работает). Но пока что об этой оптимизации не думай - запаса производительности движка хватит на приблизительно сотню простых VehicleBody3D. Просто предупреждаю о подводных камнях и типичных решениях, потому что кроме физики тебе нужно ещё и графику рендерить, ресурсы подгружать и т.д., рано или поздно столкнёшься с необходимостью резать фичи оптимизацией.

Ещё узкое место движка на данный момент - спавн новых CollisionShape3D. Он происходит в основном потоке и выделить в отдельный поток нельзя (небезопасно). Из-за этого узкого места нужно регулировать (ставить в очередь), сколько шейпов ты спавнишь за один кадр (иначе блокируется главный поток -> игра заикается). Когда-нибудь эту проблему решат, но она на гитхабе несколько лет висит... Опять же, пока что не парься об этом, просто это одно из главных узких мест в процедурной генерации сцены на Godot.

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


По моему опыту, легче использовать возможности физического движка, чем изобретать такие хитрые иллюзии. Ты же всё равно используешь VehicleBody3D, у которого всё что нужно симулируется, так зачем иллюзии?

>мне проще использовать циллиндр


Ясно-понятно, делай как хочешь...

>Если нужен переворот на крышу на максимальной скорости при вывороте руля, то подгонять десятки параметров тела под этот случай можно бесконечно.


Ээээм, вообще-то, у всех новичков проблема ИЗБЕЖАТЬ переворота на крышу при малейшем повороте руля на высокой скорости движения (больше 100 км/ч). VehicleBody3D достаточно стабилен на низкой скорости, но на высокой стремится перевернуться - кто-то говорит, что это реалистично (смотрел много видео про разбор условно-реалистичной физики машин в GTA IV), но в играх игроки привыкли к другому, и приходится делать "quality of life" фичи, чтоб машина не переворачивалась. В реальности, вроде бы, существуют специальные механизмы против переворота на скорости, но в стандартном VehicleBody3D этих механизмов нет (как и в старых машинах).

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

>стать специалистом по RigidBody3D


Если планируешь и дальше делать 3D игры, хорошее понимание RigidBody3D пригодится. Даже если забросишь Godot, 3D физика твёрдых тел (rigid body) везде плюс-минус похоже работает (отличия в стабильности, точности, скорости, багах и т.п.). Хотя, конечно, далеко не всем 3D играм нужна физика.

>пытается достучаться до местных чтобы направили


Прикольно. Планируешь развилки с тупиками, чтоб игрок мог реально заблудиться?
406 958036
>>57977

>В плане физона для npc машин оставляю то что есть.


Если игрок столкнётся с ними, они должны иметь достаточно точные коллизии. У тебя, как понимаю, коллизии выходят за пределы визуальной модели, поэтому игрок может случайно зацепить встречный автомобиль за невидимый выступ. Это раздражает игрока, когда он цепляет что-то невидимое, что по логике цеплять не должен, особенно когда игра наказывает за это (даже если неявно).

Если игрок не сталкивается, а машин NPC много, то физику им можно вообще отключать и вести их по заранее известным кривым (Безье - Path3D) дороги, как это делали в разных 3D GTA (это легко наблюдать прямо в игре: машины NPC иногда глючат, проходя сквозь асфальт или двигаясь боком, никакая подвеска у них не работает). Но пока что об этой оптимизации не думай - запаса производительности движка хватит на приблизительно сотню простых VehicleBody3D. Просто предупреждаю о подводных камнях и типичных решениях, потому что кроме физики тебе нужно ещё и графику рендерить, ресурсы подгружать и т.д., рано или поздно столкнёшься с необходимостью резать фичи оптимизацией.

Ещё узкое место движка на данный момент - спавн новых CollisionShape3D. Он происходит в основном потоке и выделить в отдельный поток нельзя (небезопасно). Из-за этого узкого места нужно регулировать (ставить в очередь), сколько шейпов ты спавнишь за один кадр (иначе блокируется главный поток -> игра заикается). Когда-нибудь эту проблему решат, но она на гитхабе несколько лет висит... Опять же, пока что не парься об этом, просто это одно из главных узких мест в процедурной генерации сцены на Godot.

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


По моему опыту, легче использовать возможности физического движка, чем изобретать такие хитрые иллюзии. Ты же всё равно используешь VehicleBody3D, у которого всё что нужно симулируется, так зачем иллюзии?

>мне проще использовать циллиндр


Ясно-понятно, делай как хочешь...

>Если нужен переворот на крышу на максимальной скорости при вывороте руля, то подгонять десятки параметров тела под этот случай можно бесконечно.


Ээээм, вообще-то, у всех новичков проблема ИЗБЕЖАТЬ переворота на крышу при малейшем повороте руля на высокой скорости движения (больше 100 км/ч). VehicleBody3D достаточно стабилен на низкой скорости, но на высокой стремится перевернуться - кто-то говорит, что это реалистично (смотрел много видео про разбор условно-реалистичной физики машин в GTA IV), но в играх игроки привыкли к другому, и приходится делать "quality of life" фичи, чтоб машина не переворачивалась. В реальности, вроде бы, существуют специальные механизмы против переворота на скорости, но в стандартном VehicleBody3D этих механизмов нет (как и в старых машинах).

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

>стать специалистом по RigidBody3D


Если планируешь и дальше делать 3D игры, хорошее понимание RigidBody3D пригодится. Даже если забросишь Godot, 3D физика твёрдых тел (rigid body) везде плюс-минус похоже работает (отличия в стабильности, точности, скорости, багах и т.п.). Хотя, конечно, далеко не всем 3D играм нужна физика.

>пытается достучаться до местных чтобы направили


Прикольно. Планируешь развилки с тупиками, чтоб игрок мог реально заблудиться?
407 958051
>>57959
У тебя что, цилиндры поперек по дну? Там же клиренса нет, у тебя что, дорога идеальная без камушков и ям?
⏰.png8 Кб, 444x58
408 958071
>>58007

>reviewed early in the 4.4 release cycle


В свою документацию можно эмодзи добавлять.
На Windows 10: WinKey + ./ю или WinKey + ;/ж
Теперь точно могу модный 💩код писать. 👌👴
p.gif733 Кб, 460x258
409 958073
>>58051

>цилиндры поперек по дну? Там же клиренса нет


Без паники! У него всё в полном порядке:

>В идеале нужна даже не сфера, а эллипсоид


>Когда коллизия ящик, то сначала все очень удобно


>машина начинает вращаться вокруг своей оси


>Вчера смог исправить все проблемы с физоном


>Сделал коллизию авто из трех циллиндров


>для машин мне проще использовать циллиндр


>лично у меня в сценах все работает прекрасно без багов


У пингвинов вот тоже клиренса нет, а они быстро ездят.
1719116425275.png448 Кб, 449x606
410 958086
>>58029
Есть три базовых дурака: нейроёб, ассеточмоня и ецсшиз.

Какой из них не ты?
411 958102
>>58073
Сам Тодд Говард одобряет пришивание поезда вместо головы. Там чем я хуже? У меня машины неписей скрещены с пингвинами. Так сказать, коллизия червь-пидор, колизия пингвин. Машина просто катается на брюхе и слегка покачивается при поворотах на разницу в высоте между продольным и поперечными циллиндрами (анало-говнетная подвес-очка). Из пингвина можно так же сделать поезд или морское судно.

Отдельно буду делать модель машину без костылей для главного героя. Прям по докам попробую, если еще один гениальный костыль не придумаю. Шейп придется составлять из нескольких, и пока нет определенности в конечном виде. То ли кусок мыла из капсул получится, то ли стопка дров из циллиндров. Долго буду делать.
412 958103
>>54699 (OP)
Система частиц - огонь!
413 958150
>>58103
Это как это ты такую красоту намутил, не подскажешь анонче?
414 958153
>>58150
Моя ставка: партикли с квад мешами-биллбордами, с кривой скалирования и цвета. Аналогично для дыма.
415 958174
>>58150
Годетта: Artbreeder + спрайт Годетты + скриншот огня + короткое описание + подправил косяки вручную.
Godot 3D: кучка CSG шейпов; глаза: дырки с чёрной точкой на дне, такое часто юзают в аниме моделях.

Огонь:
1. Quad меш. Поставил галочки на "unshaded", "цвет вершин как альбедо" и "билборд для партиклов + keep scale" в StandardMaterial3D, конвертировал его в шейдер. В шейдере удалил всё лишнее (дало больше FPS), оставив только преобразования матриц для билборда и альбедо из вершин и из текстуры, добавил простейшую формулу для создания полупрозрачного круга (length(UV - vec2(0.5, 0.5));), чтобы выглядело гладко по краям, без острых углов. В альбедо поставил NoiseTexture2D с каким-то из шумов, чтобы разнообразить спрайты, плюс добавил необычный градиент для имитации чего-то вроде "волн" в огне (прозрачно > темно > прозрачно > светло и т.д.), он ложится на шум и создаёт узор. Перебрал много вариантов, тут по вкусу выбирать нужно - можно сделать гладкий поток, можно сделать завихрения, лабиринты какие-то, узоры, контуры. Это основа, в ней вся красота. Самое интересное начало получаться только когда в градиент текстуры шума добавил прозрачные точки, чтобы шум сделал из круга неровную кляксу. Градиент лучше оставить чёрно-белым, но можно добавить какой-либо оттенок, общий для всех частиц. Я хотел сделать ещё реалистичнее оттенки, но устал возиться.

2. GPU партиклы. Тут пришлось сильно повозиться, но только потому что параметры разбросаны как-то не интуитивно и я наугад их подбирал. Основное: начальный вектор скорости с разбросом (нужно, чтобы частицы летели и быстро, и медленно) и рандомный поворот при спавне (чтобы не выглядело как равномерная сетка, ведь спрайт всего один на всё), гравитация строго вверх (горячий газ взлетает), масштаб (расширяется: 0.5 > 10), градиент цвета (белый > жёлтый > оранжевый полупрозрачный > почти чёрный прозрачный, чтобы плавно исчезало), градиент эмиссии (в самом начале ярче светится, чем под конец). Дальше Sub Emitter - он почему-то должен иметь минимум в 2 раза больше частиц, чтобы спамить без перерывов. Это копия первой ноды, с тем же мешем и текстурой, но со своими настройками: нулевая скорость спавна, только взлёт вверх, увеличение масштаба ещё больше (10 > 30), градиент цвета от полупрозрачно оранжевого к чёрному прозрачному. Субчастицы эти спавнятся по истечению жизни предыдущих частиц, поэтому-то они должны лететь с разной скоростью (иначе весь дым будет в одной точке, а не облаком). Пробовал разобраться с коллизиями частиц, но что-то не получилось. Пробовал рандомные вариации оттенков (hue), но выключил - градиент точнее/удобнее регулирует переходы цвета. Ещё поставил Draw Order = View Depth, но это больше актуально если спрайты непрозрачные.

Есть один странный косяк у этой системы: при определённых положениях камеры порядок отображения между главными частицами и второстепенными резко переключается, из-за чего яркий жёлтый центр проступает через чёрный дым, который всё ещё на экране и должен его собой перекрывать. Draw Order с этим не помогает, что с этим делать - непонятно. Depth Draw тоже пробовал переключать, это не то. Впрочем, мне пока и так сойдёт.
415 958174
>>58150
Годетта: Artbreeder + спрайт Годетты + скриншот огня + короткое описание + подправил косяки вручную.
Godot 3D: кучка CSG шейпов; глаза: дырки с чёрной точкой на дне, такое часто юзают в аниме моделях.

Огонь:
1. Quad меш. Поставил галочки на "unshaded", "цвет вершин как альбедо" и "билборд для партиклов + keep scale" в StandardMaterial3D, конвертировал его в шейдер. В шейдере удалил всё лишнее (дало больше FPS), оставив только преобразования матриц для билборда и альбедо из вершин и из текстуры, добавил простейшую формулу для создания полупрозрачного круга (length(UV - vec2(0.5, 0.5));), чтобы выглядело гладко по краям, без острых углов. В альбедо поставил NoiseTexture2D с каким-то из шумов, чтобы разнообразить спрайты, плюс добавил необычный градиент для имитации чего-то вроде "волн" в огне (прозрачно > темно > прозрачно > светло и т.д.), он ложится на шум и создаёт узор. Перебрал много вариантов, тут по вкусу выбирать нужно - можно сделать гладкий поток, можно сделать завихрения, лабиринты какие-то, узоры, контуры. Это основа, в ней вся красота. Самое интересное начало получаться только когда в градиент текстуры шума добавил прозрачные точки, чтобы шум сделал из круга неровную кляксу. Градиент лучше оставить чёрно-белым, но можно добавить какой-либо оттенок, общий для всех частиц. Я хотел сделать ещё реалистичнее оттенки, но устал возиться.

2. GPU партиклы. Тут пришлось сильно повозиться, но только потому что параметры разбросаны как-то не интуитивно и я наугад их подбирал. Основное: начальный вектор скорости с разбросом (нужно, чтобы частицы летели и быстро, и медленно) и рандомный поворот при спавне (чтобы не выглядело как равномерная сетка, ведь спрайт всего один на всё), гравитация строго вверх (горячий газ взлетает), масштаб (расширяется: 0.5 > 10), градиент цвета (белый > жёлтый > оранжевый полупрозрачный > почти чёрный прозрачный, чтобы плавно исчезало), градиент эмиссии (в самом начале ярче светится, чем под конец). Дальше Sub Emitter - он почему-то должен иметь минимум в 2 раза больше частиц, чтобы спамить без перерывов. Это копия первой ноды, с тем же мешем и текстурой, но со своими настройками: нулевая скорость спавна, только взлёт вверх, увеличение масштаба ещё больше (10 > 30), градиент цвета от полупрозрачно оранжевого к чёрному прозрачному. Субчастицы эти спавнятся по истечению жизни предыдущих частиц, поэтому-то они должны лететь с разной скоростью (иначе весь дым будет в одной точке, а не облаком). Пробовал разобраться с коллизиями частиц, но что-то не получилось. Пробовал рандомные вариации оттенков (hue), но выключил - градиент точнее/удобнее регулирует переходы цвета. Ещё поставил Draw Order = View Depth, но это больше актуально если спрайты непрозрачные.

Есть один странный косяк у этой системы: при определённых положениях камеры порядок отображения между главными частицами и второстепенными резко переключается, из-за чего яркий жёлтый центр проступает через чёрный дым, который всё ещё на экране и должен его собой перекрывать. Draw Order с этим не помогает, что с этим делать - непонятно. Depth Draw тоже пробовал переключать, это не то. Впрочем, мне пока и так сойдёт.
пук.mp4904 Кб, mp4,
600x600, 0:34
416 958189
>>58103
Сегодня я узнал, что делать спецэффекты без референсов - всё равно что пытаться рисовать людей по памяти без знаний анатомии: получается какая-то нелепая кривота и я это интуитивно чувствую, но умом понять проблему не могу...
417 958208
>>57712
Захотел после этого анонса сделать следующую браузерку на 4-ке.
Пустая сцена террейн+моделька. В godot3 архив выходит 7Мб, в godot4 20Мб. Если без террейна, допустим сделаю террейн из кубиков, godot3 6Мб, godot4 12-14Мб.
Сам неупакованный wasm движка 20Мб против 60Мб.
В общем что-то опять сомнения по целесообразности вообще переползать на 4 в вебе.
418 958242
https://www.youtube.com/watch?v=DquTRgapsiM

ЕБАТЬ ВРОТ А ЧЕ НА ГОДОТЕ ТАК МОЖНО ЧТО ЛИ?
image.png9 Кб, 198x235
419 958248
Подскажите про передвижение 3д объектов в редакторе. Я включаю снап. Объект двигается по секте в 1 юнит, это можно поменять в настройках, ок. Шифт+движение двигает его по 0.1 юниту, это в настройках можно поменять?

Или, альтерантивно, хочу поменять контрол+движение. Хочу 0.01 юнит вместо 0.001 как сейчас.

И еще вопрос про скалирование в редакторе. Неужели нельзя scale snap привязать к юнитам вместо процентов?
420 958250
>>58242

>ТАК МОЖНО ЧТО ЛИ?


Там вся игра в одной комнате происходит, лол. Все ресурсы загружаешь в RAM/VRAM и не паришься. Ландшафт за окном вообще может быть плоским.
421 958251
>>58248

>Шифт+движение двигает его по 0.1 юниту


По-моему, шифт снижает шаг привязки до 1/10 от установленного тобой значения без шифта. Но я привязкой с шифтом никогда не пользовался.

>контрол+движение. Хочу 0.01 юнит


Что ты имеешь в виду? На Ctrl вроде бы зум.

>scale snap привязать к юнитам


Как ты себе это представляешь? Масштаб объектов вычисляется в процентах от обычного размера, например, Vector3(0.25, 1.0, 2.5): 25% по X, 100% по Y, 250% по Z. Так весь 3D софт работает по-моему. К каким таким юнитам ты хочешь это привязывать?

Но если очень нужно, можешь написать плагин. В документации есть объяснение, а тут есть примеры:
https://godotengine.org/asset-library/asset?filter=snap
422 958252
>>58251

>На Ctrl вроде бы зум.


Контрол+перетаскивание со снапом снапит по 0.001.

>Так весь 3D софт работает по-моему. К каким таким юнитам ты хочешь это привязывать?


Не, например в Blockbench не так, и поскольку я все ассеты в нем делаю, хотелось бы сохранить скалирование по юнитам как в нем.

Жаль что по-дефолту такого поведения нет. Посмотрю плагины, спасибо.
423 958254
Как перестать мусолить один и тот же код, бесконечно его улучшая и оптимизируя, и начать жить добавлять новые вещи?
424 958256
>>58254
Форма прокрастинации, чтобы игру не делать. Бороться так же как с любой прокрастинацией. Допиливаешь ммо-режим в свою кнопку в главном меню?
425 958257
>>58208

>wasm движка 20Мб против 60Мб


Вроде бы обещали сфокусироваться на улучшениях производительности и сокращении объёма в 4.4, не?

>сомнения по целесообразности... в вебе


Да зачем эти веб-игры вообще нужны?..

Раньше, во времена Flash, Silverlight, Java апплетов, Unity Player и других подобных, игрок скачивал весь движок один раз и играл на нём во что угодно, игры в основном были простые и нетребовательные.

Потом они убили все эти плагины, объяснив это стремлением к безопасности, но реальные мотивы наверняка были в другом (монополизация вокруг гугловского хрома). Теперь каждая игра, даже самая простая, грузится как грёбанный фейсбук из 00-х.

Но ладно, игра загрузилась и... Браузер пукнул и сдох, потеряв все твои вкладки и просрав кэш, так что всё по-новой открывать и скачивать. А если не сдох, то тормозит как будто там ААА 3D в инди поделке, и это независимо от движка, потому что браузеры - говно.

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

Короче, ящитаю, веб надо вернуть во времена где-то между Web1.0 и Web2.0, когда сайты были чистыми и лёгкими, а все эти примочки ещё не придумали, и ты заходил на сайт по делу, а не ждать закачки недоигр после ожидания закачки нескольких видов рекламы после ожидания закачки модного веб-фреймворка на 50 МБ, который используется для добавления <div>.

И это у меня ещё хорошая скорость, 8 МБ/с вроде бы, а как же люди, что живут в удалённых районах? Как раз деревенщина и есть основная ЦА веб-говна без установки, потому что они не шарят в компуктирах.

Хотите делать Игры - делайте для ПК.
426 958259
>>58256
Долго и мучительно менял екс библиотеку
427 958260
Подскажите, как сделать разный collisionshape в зависимости от анимации? Нужно просто добавить новые ноды с animatedsprite и каждому прикрепить дочерний collisionshape? Или как-то можно сделать проще?
428 958261
>>58260
Хотя там в принципе 2 получится в итоге, а не 4 для каждого. Т.е. размер спрайтов, для вверх/вниз одинаковый как и для лево/право.
429 958262
>>58261
Хотя стоп, коллижн пишет мол только дочерним для ареа2д, а для анимации его привязать нельзя. Помогите тупому разобраться.
430 958263
>>58252

>снапит по 0.001


Разве это снап? 0.001 вроде стандартный минимум изменения векторов в инспекторе. Я не знаю, где он настраивается, но все вектора округляются до 0.001, как минимум при отображении в редакторе.

>Blockbench


Там вообще всё не как у людей, я ниасилил его. В блендере и то проще разобраться, всё как у людей.

>скалирование по юнитам как в нем


Я не понимаю, что ты имеешь в виду. Какие юниты используются для масштаба? Масштаб в единицу - это сколько метров по расстоянию?

Я поискал, там ничего непонятно. Судя по всему, "размер" означает размер в блоках Minecraft. Это не масштабирование, это именно что "размер в блоках".

В Godot похожая настройка есть, например, у CSGBox, там можно изменить размер по каждой оси в метрах.

Короче, тут путаница в понятиях.
Масштаб (scale) - это изменение в процентах.
Размер (size) - в контексте майнкрафта - в кубиках.
431 958264
>>58257

>Да зачем эти веб-игры вообще нужны?..


>Хотите делать Игры - делайте для ПК.


Потому что мне сейчас доступны только я.игры как площадка.
432 958265
>>58260

>как сделать разный collisionshape в зависимости от анимации?


Создаёшь в новый скрипт. В скрипте делаешь:
1. @export... для спрайта и всех коллизий.
2. Метод animate(анимация) для управления извне.
3. В методе вызываешь play() у спрайта.
4. Одновременно с этим переключаешь disabled:

>for c in collisions: if c != current: c.disabled = true


>current.disabled = false


Скрипт можешь повесить на отдельную Node в сцене игрока, либо на самого игрока/персонажа. В первом случае скрипт игрока должен получить ссылку на этот скрипт, т.к. управление анимацией через него.
433 958266
>>58260
Как вариант перейти с animated sprite на animation player и там вкл/выкл соответствующие коллайдеры.
https://youtu.be/8EVHNbgQCBg?si=ATq6han-WUHRktOi&t=926
434 958269
>>58260 >>58265
Сразу предлагаю другой вариант.

У AnimationSprite2D есть сигнал animation_changed.

Создаём скрипт:
extends CollsionShape2D
@export var sprite: AnimationSprite2D
@export var enabling_animation: StringName
func _ready(): sprite.animation_changed.connect(_update)
func _update(): disabled = sprite.animation != enabling_animation

Связываем все коллиженшейпы ссылками на спрайт, вводим им названия анимаций, которые их должны активировать, и теперь всё работает автоматически с управлением анимациями AnimationSprite2D.play().
435 958270
>>58265
Я только учусь основам. Но примерно понял. Спасибо. Думал это немного проще делается.
436 958271
>>58269
Спасибо.
437 958272
>>58266
А, ну да, совсем забыл о нём.

>>58270

>Я только учусь основам


Читай вот эти страницы, там всё подробно:
https://docs.godotengine.org/en/stable/tutorials/animation/index.html
Это наиболее мощная система анимации, позволяет анимировать любые свойства любых нод и твой код.
438 958273
>>58272
Ну я понемногу мануал курю, вон игру 2д с него сделал. А сейчас решил сделать вместо доджера, что-то другое. Погуглил бесплатные ассеты на itch. Вон понравился песель. Идея простая, песель бегает по лужайке и собираем рандомно появляющиеся кости, счетчик считает количество костей. Для начала вроде будет нормально потренироваться. Тем более в учебном коде есть практически все для такого концепта.
439 958274
>>58254

>Как перестать мусолить один и тот же код, бесконечно его улучшая и оптимизируя, и начать добавлять новые вещи?


Нарисуй графическое изображение проекта со всеми отдельными компонентами на разных уровнях. Далее отметь в % прогресс разработки каждой части игры до юзабельного (можно использовать) состояния. Если слишком фокусируешься на одной части графика, то переходи к другой, чтобы % были равномерными.

Главное тут расставить приоритеты и делать то, что важнее для игры в первую очередь. Не следует переключаться на какие-то неважные детали.

>>58256

>Бороться так же как с любой прокрастинацией


Как? Статьи о прокрастинации слишком длинные.

>>58259

>Долго и мучительно менял екс библиотеку


А мог бы игру на ООП делать, нодами и сценами...
440 958276
>>58274

> Нарисуй графическое изображение


Попробую....

> А мог бы игру на ООП делать, нодами и сценами...


Или точно так же прокрастинировал бы, и переписывал бы рабочий код, потому что "не продумал архитектуру". Подозреваю тут дело не в подходе...
441 958277
>>58273

>песель бегает по лужайке и собираем рандомно появляющиеся кости, счетчик считает количество


Тогда оставь одну круглую коллизию, но уменьши её примерно в два раза. Спрайт собаки смести немного вверх, чтобы коллизия была ближе к ногам. Тогда, по идее, должно быть более интересно визуально (игрок должен непосредственно встать на кость, в не просто задать её, пробегая боком).
442 958278
>>58276

>прокрастинировал бы, и переписывал бы рабочий код, потому что "не продумал архитектуру"


Это не прокрастинация, это рефакторинг.
https://ru.wikipedia.org/wiki/Рефакторинг
Все серьёзные дяди в IT этим занимаются.
RootWalk.png4 Кб, 256x256
443 958279
>>58277
Как вариант. Можно вообще на голову сместить, чтобы типа съедала, но тогда все равно 2 коллизии нужно
444 958285
>>58279

>все равно 2 коллизии нужно


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

Такие коллизии вообще нужны для взаимодействия с неподвижными стенами в основном. Поэтому они должны быть простыми и, желательно, круглыми.

Коллизия, точно повторяющаяся спрайт, это обычно зоны попадания пуль или других подобных объектов.

Коллизия для сбора предметов зависит от игры, но, имхо, чаще встречается, что зона сбора предметов даже шире основной коллизии (ног/туловища).
bosin.mp47,3 Мб, mp4,
1280x720, 0:22
NavigationMesh 445 958296
У меня вопрос к знатокам. Как лучше всего сделать передвижение нпс в трёхмерном мире? Можно ли использовать NavigationMesh на больших плоскостях? Можно ли делить NavigationMesh на составляющие для оптимизации проекта; если да, то как (гайд или словами, буду благодарен в любом случае)?
446 958299
>>58296
Да. Но обновление навмеша может быть дорогим, смотря как его сконфигурируешь. Если он строится по статик коллайдерам, а они довольно простые, то терпимо. Как делить - хз, не делил.

Это про тройку, в четверке слышал навмеш сильно прокачали.
447 958300
>>58299
Мне как раз надо про четвёрку, спасибо
448 958301
>>58285
У меня пока появилась другая проблема, заставить проигрывать анимацию при движении по диагонали. На форумах пишут, что таки надо юзать анимейшентри, а это для начала лишняя информация. Либо через elif, но у меня чет оно не получается, где-то я туплю. Поразбираюсь пока с этим...
image.png368 Кб, 957x518
449 958305
Зачем люди городят grainy shader, если можно воткнуть на весь экран полупрозрачную текстуру с шумом?
450 958307
>>58305
Мне тоже интересно стало

mimo
изображение2024-06-24161613278.png259 Кб, 1920x1030
451 958308
>>58301
Я сделал, чисто случайно, но сделал. Оказывается надо было 4 базовые направления через elif, а уже диагонали через if, тогда анимация играется нормально.
452 958310
>>58308
А ты возьми тетрадку с карандашом, начерти табличку и пойми как расставить условия.
Например такой вариант: вообще убрать elif, оставить if.
Или: разделить движение и анимации на отдельные блоки условий. Вызывать анимацию если velocity.x != 0
453 958313
>>58310
Изначально там только if и было везде. Но тогда анимация не проигрывалась. Гуглил. Народ на зарубежных форумах писал, что надо анимейшентри юзать или елифы. Короче там связано с одновременным нажатием и тем, что пытаются проиграться 2 анимации сразу, поэтому получается только 1 кадр. Ну или я это так понял.

>If up and left are held at the same time, the script will play the left animation and then the topleft animation every frame, which resets the animation.

454 958316
>>58313
Зачем для этого что-то гуглить? Просто голову включай. По шагам проходи и понимай, что где проигрывается.
455 958319
>>58308
Ты всё неправильно делаешь (неудобно). Лучше будет как-то так:

>@export var speed: float = 100 # чтобы настраивать скорость из инспектора


>@onready var sprite := $AnimatedSprite2D # сохраняем ссылку - так удобнее


>func _process(delta):


> # Получаем Vector2 со всеми четырьмя направлениями, длиной не более 1:


> var input := Input.get_vector("move_left", "move_right", "move_up", "move_down")


> velocity = input x speed x delta # двач съедает звёздочку (x)


> if velocity.is_zero_approx(): sprite.stop() # никуда не идём


> else: # если куда-то идём - анимируем:


> _ # sprite.speed_scale = число x velocity.length() # если будешь делать бег (?)


> _ if velocity.y < 0: sprite.play("up")


> _ elif velocity.y > 0: sprite.play("down")


> _ if velocity.x < 0: sprite.play("left")


> _ elif velocity.x > 0: sprite.play("right")

456 958320
>>58305

>воткнуть на весь экран полупрозрачную текстуру с шумом


Зависит от того, какого эффекта ты хочешь добиться...
457 958323
>>58316
И как я без гугла должен был догаться почему дальше 1 кадра ничего не работает.
>>58319
У меня анимация идлы есть.

Кстати если оставлять коллижны для разных анимаций я уже догадался как это ещё можно сделать, через . disable = true/false. Можно в отдельную функцию ввести для сокращения кода, но я сделал просто под каждым ифом. Благо в самом движке можно включить отображение в дебагере и видеть, что происходит.
458 958324
>>58299

>по статик коллайдерам, а они довольно простые


Чё? Статики могут быть намного сложнее ригидов. Там ведь тримеши.

>>58296

>Можно ли использовать NavigationMesh на больших плоскостях?


Должно быть можно, но я не тестировал. Сложная тема вообще.

>Можно ли делить NavigationMesh на составляющие для оптимизации


Я читал, что можно, но это не для оптимизации, а для составных сцен.

>NavigationMesh гайд


https://docs.godotengine.org/en/stable/tutorials/navigation/index.html

>Как лучше всего сделать передвижение нпс в трёхмерном мире?


Это зависит от:
1. Размеры мира:
- Комнатки?
- Большой город?
- Процедурная бесконечность?
2. Используется ли высота (Y)? НЕ НЕРОВНОСТИ, а пересечения:
- Существуют ли в мире мосты/туннели, пересекающие пути?
- Можно ли прыгать, лазить по стенам, бегать по крышам?
3. Что должны делать NPC?
- находить цели или бесцельно блуждать?
- требуется ли им обходить друг друга?
- ходят ли они толпами или по одиночке?
- могут ли они ходить в неактивных чанках?
4. Как игрок влияет на маршруты? Как NPC должны реагировать?

Общие рекомендации:
- лучше AStar - он проще, чем навмеши.
- лучше упростить мир до 2D, если возможно.
- в большом мире сделать навигацию по чанкам.
- обход NPC друг друга - жопа, оставь надежду.
- в стратегиях управляй большими группами.
- лучше делой ЖРПГ с NPC-статистами))))
458 958324
>>58299

>по статик коллайдерам, а они довольно простые


Чё? Статики могут быть намного сложнее ригидов. Там ведь тримеши.

>>58296

>Можно ли использовать NavigationMesh на больших плоскостях?


Должно быть можно, но я не тестировал. Сложная тема вообще.

>Можно ли делить NavigationMesh на составляющие для оптимизации


Я читал, что можно, но это не для оптимизации, а для составных сцен.

>NavigationMesh гайд


https://docs.godotengine.org/en/stable/tutorials/navigation/index.html

>Как лучше всего сделать передвижение нпс в трёхмерном мире?


Это зависит от:
1. Размеры мира:
- Комнатки?
- Большой город?
- Процедурная бесконечность?
2. Используется ли высота (Y)? НЕ НЕРОВНОСТИ, а пересечения:
- Существуют ли в мире мосты/туннели, пересекающие пути?
- Можно ли прыгать, лазить по стенам, бегать по крышам?
3. Что должны делать NPC?
- находить цели или бесцельно блуждать?
- требуется ли им обходить друг друга?
- ходят ли они толпами или по одиночке?
- могут ли они ходить в неактивных чанках?
4. Как игрок влияет на маршруты? Как NPC должны реагировать?

Общие рекомендации:
- лучше AStar - он проще, чем навмеши.
- лучше упростить мир до 2D, если возможно.
- в большом мире сделать навигацию по чанкам.
- обход NPC друг друга - жопа, оставь надежду.
- в стратегиях управляй большими группами.
- лучше делой ЖРПГ с NPC-статистами))))
459 958325
>>58324

>3. Что должны делать NPC?


Забыл ещё: как двигаются NPC?
- по клеточкам как фигурки в шахматах?
- идут строго по прямой, разворачиваясь на месте?
- едут на машине с каким-то радиусом разворота?
- летят на ракете в космосе?

Вопросов куча, ответить нужно на всё - для себя.
460 958326
>>58323

>И как я без гугла должен был догаться почему дальше 1 кадра ничего не работает.


Пройтись по шагам.
var cond = 4
var x = 0
if cond > 0:
_x = 1
if cond > 2:
_x = 2
Понятно же что в такой ситуации x перезапишется внутри этого же кадра.
461 958327
>>58324
1. Город/Совковый ПГТ
2. В мире мосты/туннели, пересекающие пути. Ползание по стенам не планировал, но интересно как это работает.
3. Некоторые НПС просто блуждают, другие двигаются по маршруту. Из обоих типов переключение на третье состояние - преследование с последующей атакой. (через стейт машину могу сделать)
4. Маленькие НПС обходят игрока, а большие толкают. Не знаю как работать с навмешем, кроме примитивного преследования каких-то целей, когда сравниваю положение НПС и нужной точки.

>>58325
Двигаются НПС как физические объекты, к сетке не привязаны.

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

Алсо, может есть инфа про то как в скайриме работал ии противников/НПС? Там ведь не вручную расставляли сетку перемещения и вряд-ли навигационный меш был на всю карту один здоровый.

Нет, я не делаю скайрим 2, просто у меня карта большая, это обусловлено особенностями геймплея, а не размерами ради размера, шоб как в трипл эй

Спасибо
462 958330
>>58324

>Чё? Статики могут быть намного сложнее ригидов. Там ведь тримеши.


У навмеша есть опция генерации меша по, собственно, MeshInstance. Вот он был самый медленный, потому что модельки как правило сложнее чем их коллизии. ЕМНИП он стоял по дефолту.
463 958333
>>58327

>посёлок городского типа


Если мелкий - возможно, уместится в одну сцену. Главное чтоб LODы работали. Ещё можно настроить HLOD для объединения дальних объектов в цельный объект-заглушку. Если город большой, придётся резать на чанки и уже для чанков делать HLOD, в том числе для навигации NPC. Также есть вариант разделить город не на чанки, а на районы, например, в GTA 3 по идее всего 3 вытянутых района, разделённых мостами, между которыми есть загрузочный экран (на современном ПК экран пролетает за долю секунды, но в прошлом он имел смысл).

>В мире мосты/туннели


Кстати, вспомнилось что-то: в GTA IV машины, едущие по мосту, пугаются проезжающего трамвая и пытаются его объехать по другой полосе, потому что у них навигация как-то странно в 2D запечена и для них проезжающий под мостом трамвай выглядит внезапным препятствием. Очевидно, что навигация в игре оптимизирована в 2D, игнорируя высоту, и в большинстве случаев этого хватает - кроме таких вот мостов. Но в GTA V они это как-то пофиксили.

>Маленькие НПС обходят игрока, а большие толкают


ИМХО, это уже не задача навмеша/а-стара, т.к. поведение в непосредственной близости игрока. Если персонаж приближается к игроку, у него срабатывает логика обхода/толкания. Вопрос в том, должны ли они делать то же самое для всех персонажей в поле видимости игрока или только для игрока. Персонажи вдалеке от игрока могут вообще не использовать физику, если их нужно много... CharacterBody3D вообще сильно жрёт производительность, Area3D тоже не слишком быстра, самое быстрое - это считать квадрат расстояния или вхождение точки в Rect2, но это если тебе нужны прям сотни NPC на относительно слабом ЦПУ. Оптимизации в любом случае понадобятся...

>как физические объекты, к сетке не привязаны


Кстати, узнал где-то такую фичу: навигация может быть привязана к графу точек (waypoint называются), а NPC идут или едут по физике (когда она доступна), стараясь приблизительно достичь заданной точки. Т.к. доходить прямо до точки им не обязательно (допускается погрешность), в целом движение не выглядит привязанным к сетке. Точки могут быть выстроены по-разному, не обязательно сеткой.

>чтобы не сталкивались во время передвижения. Документацию давно читал, вроде ничего не было


Систему навигации сильно переделали в 4.x. Вроде бы вот тут объясняется:
https://docs.godotengine.org/en/stable/tutorials/navigation/navigation_using_navigationobstacles.html
Если использовать AStar на вейпойнтах, то точки графа можно временно отключать:
https://docs.godotengine.org/en/stable/classes/class_astar3d.html#class-astar3d-method-set-point-disabled

>как в скайриме работал ии противников/НПС?


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

>Там ведь не вручную расставляли сетку перемещения


Если не ошибаюсь, то как минимум в старых GTA (3/VC/SA) пешеходы ходят по сети точек, расположенных на тротуарах. В игре это хорошо заметно, когда NPC, убегающий от игрока или догоняющий игрока, предпочтёт бежать по тротуару вместо того, чтобы бежать по проезжей части или траве (и это, имхо, реалистично до некоторой степени). Автомобили тоже следуют точкам, но на проезжей части - можешь представить это как игру Pacman, где вместо пакмана - машина NPC, а точки невидимые. Все эти пути можно как-то менять в файлах игры...

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

>просто у меня карта большая


Запаришься с чанковой системой и подгрузкой/выгрузкой... А что уже есть, если не секрет?

>обусловлено особенностями геймплея


Геймплей ближе к РПГ про средневековье или к ГТА про современный город? Просто интересно, почему тебя интересует именно Скайрим - РПГ с редкими лошадьми, если у тебя современный город с автомобилями...

>>58330

>модельки как правило сложнее чем их коллизии


Для ландшафта имеет смысл тримеш (ConcavePolygonShape3D) использовать, чтобы он повторял визуальный меш, если нет возможности использовать HeightMapShape3D (у неё свои нюансы). Для дорог с частыми ямами, насыпями и бордюрами тоже тримеш лучше форму повторит, чем куча простых шейпов. Мне кажется, не стоит экономить на шейпах проходимой поверхности, чтобы ноги персонажей и колёса машин не проваливались "в текстуры" и не висели в воздухе. Экономить можно только на объектах, к которым персонаж подходит, например, статуя, стена, отвесная часть скалы - к ним нет никаких вопросов, если игрок не может подойти вплотную к чисто визуальной впадине.
463 958333
>>58327

>посёлок городского типа


Если мелкий - возможно, уместится в одну сцену. Главное чтоб LODы работали. Ещё можно настроить HLOD для объединения дальних объектов в цельный объект-заглушку. Если город большой, придётся резать на чанки и уже для чанков делать HLOD, в том числе для навигации NPC. Также есть вариант разделить город не на чанки, а на районы, например, в GTA 3 по идее всего 3 вытянутых района, разделённых мостами, между которыми есть загрузочный экран (на современном ПК экран пролетает за долю секунды, но в прошлом он имел смысл).

>В мире мосты/туннели


Кстати, вспомнилось что-то: в GTA IV машины, едущие по мосту, пугаются проезжающего трамвая и пытаются его объехать по другой полосе, потому что у них навигация как-то странно в 2D запечена и для них проезжающий под мостом трамвай выглядит внезапным препятствием. Очевидно, что навигация в игре оптимизирована в 2D, игнорируя высоту, и в большинстве случаев этого хватает - кроме таких вот мостов. Но в GTA V они это как-то пофиксили.

>Маленькие НПС обходят игрока, а большие толкают


ИМХО, это уже не задача навмеша/а-стара, т.к. поведение в непосредственной близости игрока. Если персонаж приближается к игроку, у него срабатывает логика обхода/толкания. Вопрос в том, должны ли они делать то же самое для всех персонажей в поле видимости игрока или только для игрока. Персонажи вдалеке от игрока могут вообще не использовать физику, если их нужно много... CharacterBody3D вообще сильно жрёт производительность, Area3D тоже не слишком быстра, самое быстрое - это считать квадрат расстояния или вхождение точки в Rect2, но это если тебе нужны прям сотни NPC на относительно слабом ЦПУ. Оптимизации в любом случае понадобятся...

>как физические объекты, к сетке не привязаны


Кстати, узнал где-то такую фичу: навигация может быть привязана к графу точек (waypoint называются), а NPC идут или едут по физике (когда она доступна), стараясь приблизительно достичь заданной точки. Т.к. доходить прямо до точки им не обязательно (допускается погрешность), в целом движение не выглядит привязанным к сетке. Точки могут быть выстроены по-разному, не обязательно сеткой.

>чтобы не сталкивались во время передвижения. Документацию давно читал, вроде ничего не было


Систему навигации сильно переделали в 4.x. Вроде бы вот тут объясняется:
https://docs.godotengine.org/en/stable/tutorials/navigation/navigation_using_navigationobstacles.html
Если использовать AStar на вейпойнтах, то точки графа можно временно отключать:
https://docs.godotengine.org/en/stable/classes/class_astar3d.html#class-astar3d-method-set-point-disabled

>как в скайриме работал ии противников/НПС?


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

>Там ведь не вручную расставляли сетку перемещения


Если не ошибаюсь, то как минимум в старых GTA (3/VC/SA) пешеходы ходят по сети точек, расположенных на тротуарах. В игре это хорошо заметно, когда NPC, убегающий от игрока или догоняющий игрока, предпочтёт бежать по тротуару вместо того, чтобы бежать по проезжей части или траве (и это, имхо, реалистично до некоторой степени). Автомобили тоже следуют точкам, но на проезжей части - можешь представить это как игру Pacman, где вместо пакмана - машина NPC, а точки невидимые. Все эти пути можно как-то менять в файлах игры...

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

>просто у меня карта большая


Запаришься с чанковой системой и подгрузкой/выгрузкой... А что уже есть, если не секрет?

>обусловлено особенностями геймплея


Геймплей ближе к РПГ про средневековье или к ГТА про современный город? Просто интересно, почему тебя интересует именно Скайрим - РПГ с редкими лошадьми, если у тебя современный город с автомобилями...

>>58330

>модельки как правило сложнее чем их коллизии


Для ландшафта имеет смысл тримеш (ConcavePolygonShape3D) использовать, чтобы он повторял визуальный меш, если нет возможности использовать HeightMapShape3D (у неё свои нюансы). Для дорог с частыми ямами, насыпями и бордюрами тоже тримеш лучше форму повторит, чем куча простых шейпов. Мне кажется, не стоит экономить на шейпах проходимой поверхности, чтобы ноги персонажей и колёса машин не проваливались "в текстуры" и не висели в воздухе. Экономить можно только на объектах, к которым персонаж подходит, например, статуя, стена, отвесная часть скалы - к ним нет никаких вопросов, если игрок не может подойти вплотную к чисто визуальной впадине.
464 958334
Почему я не могу добавить одну сцену несколько раз к главной ноде?!

Это работает
draw_road_one(["road_straight", "road_straight", "road_straight"])

func draw_road_one(paths: Array):
var y = 0
var z = 0
var path = load("res://scenes/%s.tscn" % paths[0]).instantiate()
y -= 1
z += 100
get_parent().add_child.call_deferred(path)
path.position = Vector3(0, y, z)
pass

Это не работает
draw_road_many(["road_straight", "road_straight", "road_straight"])

func draw_road_many(paths: Array):
var y = 0
var z = 0
for i in paths:
var path = load("res://scenes/%s.tscn" % i).instantiate()
y -= 1
z += 100
get_parent().add_child.call_deferred(path)
path.position = Vector3(0, y, z)
pass

Несколько раз переписывал, но не могу уловить опечатку в коде.
464 958334
Почему я не могу добавить одну сцену несколько раз к главной ноде?!

Это работает
draw_road_one(["road_straight", "road_straight", "road_straight"])

func draw_road_one(paths: Array):
var y = 0
var z = 0
var path = load("res://scenes/%s.tscn" % paths[0]).instantiate()
y -= 1
z += 100
get_parent().add_child.call_deferred(path)
path.position = Vector3(0, y, z)
pass

Это не работает
draw_road_many(["road_straight", "road_straight", "road_straight"])

func draw_road_many(paths: Array):
var y = 0
var z = 0
for i in paths:
var path = load("res://scenes/%s.tscn" % i).instantiate()
y -= 1
z += 100
get_parent().add_child.call_deferred(path)
path.position = Vector3(0, y, z)
pass

Несколько раз переписывал, но не могу уловить опечатку в коде.
465 958343
>>58334
Запусти отладчик и посмотри в remote какая реальная структура, сколько добавилось и какие у них координаты.
466 958356
Как в любую секунду можно получить список содержимого Area3D?
467 958365
>>58356
For n in get_child_count():
print(get_child(n))
468 958371
>>58356
get_overlapping_bodies
Но лучше через сигналы.
469 958374
>>57707 Я сделал сущность кубика, и дол ему свойство selected: bool , меняю по клику, создаю несколько кубиков с помощью .new() и они делят одно св-во на всех, как сделать так чтобу у каждого куба было свое состояние?
470 958375
>>58374
нужно сделать свой класс из "кубик + новое свойство" и инстанцировать экземпляры нового класса.
471 958376
>>58375
Не понял( есть пример?
472 958384
>>58374
Не выдумывай. Не делят.
473 958385
>>58384
Может я в коде ошибся, вот что я накалякал и результат: все кубы ебашат одновременно
474 958387
>>58376
class_name MyButton
extends Button

@export var id: int
475 958388
>>58387
Но тогда я должен id устанавливать снаружи MyButton, а я хочу внутри
476 958389
>>58385
Наверное, надо писать texture = textureRes.duplicate()
Правда я вообще не знаю зачем там ресурс понадобился.
477 958399
>>57712

>Однопоточный веб экспорт


>Проигрыватель сэмплов, для веб аудио без заиканий.


Храни боже Адама за то что он решил заняться вебом. Похуй что бета, переползаю на четверку. Правда сначала нужно потестить, но не думаю что чето критичное будет.
479 958412
>>58274
Я тут задумался, а есть ли инструменты для

> Нарисуй графическое изображение проекта


Я конечно понимаю, что всё можно текстом описать и карандашом нарисовать, но нет ли каких-нибудь удобных штук для составления диздока?
480 958419
>>58412

>текстом описать и карандашом нарисовать


https://excalidraw.com/ - редактор для эффективных менеджеров, хорошо работает даже на телефоне.

>удобных штук для составления диздока


https://obsidian.md/ - пишешь txt-заметки, а он тебе [[ссылки]] и граф (заметки - узлы, ссылки - рёбра).

Специализированного софта для проджект-менеджмента много, но соло инди это всё обычно не нужно.
color.mp44,4 Мб, mp4,
720x400, 1:01
481 958420
>>58403
ПРОКРАСТИНАЦИЯ
@
(ПРОДОЛЖАЕТЬСЯ)
482 958422
>>58403
>>58420
Жиза. Моя прокрастинация сейчас - запилить себе плагин на скалинрование по юнитам вместо процентов >>58248

Основа уже работает, довожу до ума.
483 958424
>>58422

>плагин на скалинрование по юнитам вместо процентов


А что конкретно тебе нужно масштабировать?

Если ты масштабируешь объект (например, простой кубик) размером 1 на 1 на 1 метр (Vector3.ONE), то любое число в scale будет идентично размеру в метрах:

>scale = size


Если ты масштабируешь объект размером X на Y на Z метр, то формула такая:

>scale = Vector3.ONE / initial_size × size


Как понимаешь, если initial_size == Vector3.ONE, то получаем предыдущее выражение.

У Mesh есть get_aabb(), возвращает минимальный AABB, в который вписывается меш, но я сомневаюсь, что это надёжно для определения "размера в метрах" для общего случая.

Вроде бы в плагине можно сделать ручки управления как у CSGBox3D:
https://docs.godotengine.org/en/stable/tutorials/plugins/editor/3d_gizmos.html
И тогда можно будет наращивать/убирать размер с каждой из трёх сторон по шагам.

Но зачем тебе это нужно для мешей - непонятно...
CollisionShape3D нельзя масштабировать неравномерно - баги, изменяй Shape3D.
CollisionObject3D вообще никак нельзя масштабировать - баги, изменяй потомков.
Остальные Node3D вроде не нуждаются масштабировании...
484 958426
>>58419
Спасибо!
485 958428
>>58424
Мне нужен удобный гизмо или хотя бы хоткеи, чтобы не вбивать значения в поля scale руками. И чтобы этот гизмо/хоткей снапался по 1 юниту, без этих scale.x=11.424, которые в итоге получаются от скалирования дефолтным процентным гизмо.
486 958430
>>58428

>снапался по 1 юниту


Ещё раз: зачем тебе это в редакторе сцен Godot? Я так и не понял этого. Как я это понимаю:
1. Хочешь накидать прототип по-быстрому -> юзай CSGBox (сцену можно экспортировать в GLTF).
2. Хочешь делать воксельную сцену прямо в Godot -> https://github.com/Zylann/godot_voxel
3. Хочешь масштабировать импортированные модели с привязкой по кубикам -> но зачем???
Возможно, у тебя http://ru.wikipedia.org/wiki/Проблема_XY ?
487 958431
>>58430
Нет, у меня не проблема XY, я строю блоковые уровни, элементы в которых должны быть расположены по сетке. А переходить на воксели - это ты из пушки по воробьям. Более-менее мою проблему решают гридмапы, но большой гридмап сажает производительность плюс имеет другие ограничения, которые все равно приходится закрывать обычными spatial сценами.

И конечно мою проблему решает пойти в свойства объекта и вручную выставить скейл 2, 3, 4 ... 14, но я заебался уже так делать, хочу оптимизировать процесс.
488 958434
>>58431
Ты еще не добавлял текстуры что ли?
489 958441
>>58434
Текстур не планируется. С удачно подобранными сплошными цветами выглядит ок, кстати.

Приведу пример проблемы. У меня есть пол. В нем - дыра, которую я хочу заделать блоком другого типа. Я знаю что размер этой дыры - целое_число на целое_число, конкретное число не знаю. Я беру блок 1х1, ставлю его в центр и начинаю вбивать значения "на глаз" в его scale свойства, чтобы растянуть его на дыру. 18 - слишком много. 11 - слишком мало. 13 - слишком мало. 15 - о, подошло, дыра была 15х15.

Гораздо удобней было бы взять scale gizmo и сразу растянуть блок как надо. Но поскольку scale gizmo работает с ебучими процентами, блок обязательно уедет на какое-нибудь 3.498, либо недоедет на 0.25, и это снова руками через свойства исправлять.

Или обратная проблема - у меня блок 8х1, я хочу уменьшить его длинную сторону. Но поскольку он уменьшается процентами, то единственное целое число, через которое я пройду - 4. А мне нужно было, например, 6.
490 958451
>>58420

>ПРОКРАСТИНАЦИЯ


Мне бы такую прокрастинацию.

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

>Текстур не планируется.


Думаю, не взлетит.
492 958467
>>58463
Лучше бы подумал как мне решить проблему малой кровью, пока я тут плагин допиливаю.
1685603901334.png105 Кб, 983x388
493 958468
>>58467
CSG Polygon положенный на бок. Позволяет мышкой перетаскивать вершины снэпом по сетке.
494 958469
>>58468
CSG медленные. В итоге мало чем лучше тормозных гридмапов.
495 958471
>>58469
Во-первых, не медленные. Медленные только рассчеты комбинирования, которых тут нет.
Во-вторых, элементарно конвертируются после того как закончишь прототипирование.
Хотя похоже ты просто разжигаешь.
496 958472
>>58471
Я делаю что мне нужно, и параллельно с тобой беседу веду. И я сделаю что мне нужно. Чилл.
497 958487
>>58428

> или хотя бы хоткеи, чтобы


Запили аддон с хоткеями, которые тебе нужны. Там несложно.
1719329587957.png162 Кб, 365x441
# OP 498 958492
Набампайте пожалуйста до лимита, а я пока перекачу.

Фил фри ту предлагайте арт.
499 958493
Короче внутри цикла технически невозможно добавлять инстансы одной сцены к текущей сцене. Выглядит как обсер разработчиков движка, благо обойти ситуацию легко. Просто присвоил по одной переменной на инстанс, и добавил их по очереди к ноде.

Так не работает:

>draw_road_many(["road_straight", "road_straight", "road_straight"])



>func draw_road_many(paths: Array):


>var y = 0


>var z = 0


>for i in paths:


>var path = load("res://scenes/%s.tscn" % i).instantiate()


>y -= 1


>z += 100


>get_parent().add_child.call_deferred(path)


>path.position = Vector3(0, y, z)


>pass

2024-06-25 22-20-23.mkv1,9 Мб, mp4,
1920x1080, 0:32
500 958495
501 958496
>>58493

> технически невозможно добавлять инстансы одной сцены к текущей сцене


А если await frame?
>>58495
Перепаковывай видосы обс. Фаерфоксогоспода не смогут увидеть непожатый мкв.
ПЕРЕКАТ # OP 502 958499
503 958501
>>58496

>Фаерфоксогоспода не смогут увидеть непожатый мкв


А, точно. То самый случай, когда works on my machine. Запакую в mp4 x264.
504 958513
>>58501

> Запакую в mp4 x264.


Не ну прям с перепаковкой ебаться не надо, если у тебя OBS там в меню Файл - перепаковка (которая раньше демультиплексированием называлась).
505 958568
>>58493
Звучит как то, что ты бездумно копипастишь строки кода откуда то, не понимая последовательности событий и что такое deferred
506 958569
>>58568
В функции пробовал 3 способа добавлять чайлд ноду, и на момент когда я постил не закомментирован был get_parent().add_child.call_deferred(path). В актуальной версии используется просто get_child(path).
1.png334 Кб, 757x687
507 958643
Сап, посаны.
Поясните такую вещь, на каком языке лучше пилить штуки в годоте, чтобы потом можно было чиркануть в резюме, что ты молодец?
Или дроч шарпа в годоте никак не повлияет на конечный навык говнокодинга?
508 958775
>>58643
Не привязывайся к инструментам. Выбери движок более подходящий для резюме, если для тебя это важно. Годот с гдскриптом хорош для многих вещей но не для резюме. Если ты новичок то шарп очень не рекомендуется.
509 958776
>>58775

>Если ты новичок то шарп очень не рекомендуется.


Если ты новичок то шарп в годоте очень не рекомендуется

самофикс
510 958808
>>58775

>Годот с гдскриптом хорош для многих вещей но не для резюме.


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

Вот только зачем тебе идти рабом к дяде, если ты и самостоятельно можешь начать, сделать и закончить достаточно сложный популярный проект? Ты только талант свой закопаешь, уйдя в рабство к дяде.
511 958841
512 960226
Есть тут кто-нибудь кто нвимом пользуется с годотом? У меня чёт автокомплит хуёво с сервером взаимодействует.

Если я продолжаю печатать слово, то варианты из автокомлита пропадают. Я начинают писать имя переменной, она появляется на первой строчке и если я после этого ещё символ напечатаю она пропадает. Самое отвратное, что если удалить символ то автокомплит другой почему-то предлагается и переменная не вылазит снова и приходится всё слово стирать.

Проверил автокомлит отдельно, работает нормально. В ридере и эдиторе годота, тоже всё нормально работает. Проблема только между нвимом и годотом.
513 960251
>>60226
Отписываюсь, может потом кому-нибудь поможет.

Глючит из-за этой строки в конфиге нвима:
completion = { completeopt = 'menu,menuone,noinsert' }
Пока разницы не вижу, что с ней что без неё.
514 968657
Решил запилить неистовый твин-стик шутан, но щас задумался: а как заставить мышку быть нормальным стиком? Нужно чтобы в независимости от положения персонажа на экране, нужная амплитуда движения мышки для поворота была бы всегда одинаковой.

С камерой зафиксированной на персонаже все работает как надо, тк очевидно персонаж всегда в одной точке по центру. А вот если камеру отдалить/отключить/зафиксировать на чём-то другом – то приходится елозить мышкой по всему столу, как на втором видосе.

Щас поворот делается через обычный лук_ат
515 968995
Наверное платина, но не могли бы пояснить за публикацию проектов? В интернетах пишут про какие-то перекомпиляции движка для дистрибуции через Стим и всякое такое. Это устаревшая инфа?
Анимация 516 969153
Сап, годотач, есть нарезанная моделька персонажа, надо сделать анимацию процедурную или рэгдольную, похожую на ту, что в баротравме, искал в документации, делал, но по итогу у меня нихуя не вышло, может у кого есть опыт чего-то подобного или совет?
517 969436
Моя игра попала в хуавей стор, как прикрутить к ней монетизацию??
518 970429
Объясните как Годот Фоундейшен зарабатывает деньги? Неужели всё на донатах только?
519 970430
Also, посоветуйте ютуб каналы по годоту годные
520 970658
Сап, годач. Такое дело - делаю ретрошутер в духе doom. Заметил, что есть статтеры, картинка очень дерганная, и плюс текстуры с nearest фильтром мерцают на экране. Код как в видео. Что может влиять на такое поведение, кто сталкивался?

Железо в норме, тянет всякие халфлайфы2, а в другое я не играю.

https://www.google.com/url?sa=t&source=web&rct=j&opi=89978449&url=https://m.youtube.com/watch%3Fv%3DjzbgH4AMtI8&ved=2ahUKEwimqo2U3v6HAxWiJhAIHRxSDVAQwqsBegQIDxAG&usg=AOvVaw0yASfV3tq5Aej8cVXYDZsW
C++ в годот 521 971330
Использует ли кто нибудь C++ в Годот? Пишите только плагины или скрипты? Какие подводные и реально ли совмещая GDscript и C++ сделать проект?
1724591944041.png272 Кб, 897x673
ПЕРЕКАТ # OP 522 971438
image.png116 Кб, 836x788
523 972876
>>54699 (OP)
Анон, можно как-нибудь включить сглаживание в редакторе, а то немного раздражает эта "пила" у линий?
524 972954
>>72876
Нашел в настройках, включил FXMAA, большая часть "лесенок" исчезла, но края квадратов отрендеренных материалом все равно в лесенках.
Возвращаться в UE не хочется
525 973513
>>72876
В настройках проекта вкладка Сглаживание, выкручиваешь хоть MSAA хоть рендер в x2, хоть FSR2
Одновременно настройка и для игры и для редактора
526 975220
>>57803
Я если честно вообще не понимаю нахрена разрабы годота создали еще один динамически типизированный язык. Ну поиграли с этим говном в 90-е, обосрались и хватит. Разработка на динамически типизированных языках уже везде мертва как концепт. Для жс придумали тайпскрипт, в пистон добавили и юзают типы, в пхп тоже есть типы.
527 975942
Сап! Я делаю арканоид как свой первый проект и у меня супер дебильная проблема: Я платформу сделал как CharacterBody2D и мяч как RigidBody2D... и когда мяч стукается об платформу, то платформа от удара сползает вниз чуток, как это исправить лол?
1727363667208.png272 Кб, 897x673
ПЕРЕКАТ # OP 528 975946
529 980978
Говно Хрюлика

Sup двач

Знаю что не по теме, но как насчёт захейтить игру Юлика Хрюлика. Хрюлик возомнил себя мамкиным Кодзимой и решил засрать наш любимый Стим и оскорбил священный Godot. Мало того что игра говнище, так она ещё и стоит 3,5$.
https://store.steampowered.com/app/2883280/Dog_Brew/
image.png196 Кб, 695x368
530 981634
Лицо движка
531 982560
Аноны, вы какую литературу читаете по гдскрипту? Хотел бы ротироваться с юнити, да только на юнити тех же книг как говна а на годот нет вообще. Посоветуйте с чего начать
532 985113
Что с документацией? Почему сайт недоступен?
Обновить тред
« /gd/В начало тредаВеб-версияНастройки
/a//b//mu//s//vg/Все доски

Скачать тред только с превьюс превью и прикрепленными файлами

Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах.Подробнее