image(1).png459 Кб, 850x1164
Godot #41 Не-ОП Edition 910890 В конец треда | Веб
Добро пожаловать в тред любви и взаимопомощи, диздоков и прототипов!
Шапка: https://hipolink.me/godothread
Предыдущий: >>907152 (OP)
Архивный: >>901894 (OP)
2 910895
Как в редакторе добавить сцену в текущей позиции, а не в (0,0,0)? То есть, хотя бы примерно туда, куда смотрит внутри-редакторовская камера, а не в центр мира. Каждый раз добавляется в центр, а мне потом уныло перетаскивать через всю карту.
3 910898
>>910850 →
>>910826 →
Да, оказалось плагин старый, перекачал с гитхаба - работает.
Теперь следующий вопрос - а можно-ли привязать кнопку продолжения диалога не на физическое устройство, а на ноду кнопки? В (скудной, быть честным) доке к Диалогику ничего похожего не нашёл, залез в код - тоже ничего, можно в итоге или придётся мудрить костыли?
4 910899
>>10898
Ты можешь симулировать нажатие физической кнопки через action_press("action_name")
5 910900
>>10899
Ништяк, спасибо.
6 910902
Официально запрещаю физикосрачи в этом итт треде! Спасибо.
23101941854.png15 Кб, 424x154
7 910909
>>10899
А вот щас немного не ништяк, хз по какому принципу Диалогик ловит нажатия, но явно жопой, раз когда я вызываю действие из кода - ничего не работает, принты отрабатывают штатно, значит функция выполняется полностью.
godot.png555 Кб, 1068x1463
8 910911
>>10890 (OP)
Что за фигня, ОП?
9 910916
>>10911
Перекатили с тем, что было.
10 910918
>>10895

>Как в редакторе добавить сцену в текущей позиции, а не в (0,0,0)?


Два варианта:
1. Перетащить сцену во вьюпорт, а не в дерево.
2. Перетащить сцену в потомки какой-либо ноде, а потом перетащить по дереву куда захочешь.

В первом случае позиция сцены будет примерно той, где ты отпустил кнопку мыши. Как минимум в 2D.

Во втором случае сцена сначала будет расположена в точке отсчёта локальной системы координат своего предка (.ZERO), а потом конвертирует координаты в глобальные... или что-то вроде. Сам попробуй.

Меня лично бесит, когда сцену кидаешь, а она не в точке отсчёта, а хрен знает где. БЕСИТ.
image843 Кб, 1280x905
11 910919
>>10911
Наконец-то у юнити-чан появилась достойная соперница!
12 910920
Можно ли velocity.length(), которая float и обычно выдает 0.0000000, до int или хотя бы до 0.0 ??? .floor() и .ceil() не работают.
14 910923
>>10921
Мне нужно было передать длину желательно в виде целого числа. На самом деле я там уже переписал так, что мне не придётся это делать. Но всё равно большое спасибо, это всё рано или поздно пригодится.
15 910925
>>10918
А если я добавляю через ПКМ по дереву -> Instance Child Scene? Перетаскивать из файлсистема - такое себе.

Но пока похоже первый вариант лучший. Спасибо.
16 910927
>>910793 →

>можно их сумму


В том-то и дело, что нельзя.

>applied_force для тройки


Нет такого в 3D физике. Только в 2D физике.

>constant_force для четвёрки


Это совершенно другое. Это ввели, чтобы не нужно было 60 раз в секунду запрашивать приложение одной и той же силы. Можно один раз прописать ПОСТОЯННУЮ (constant) силу и она будет автоматически работать, пока не сбросишь.

>>Речь о 3D физике


>Какая разница-то?


Если ты гений, чтобы физический 3D движок с нуля велосипедить - пожалуйста, никто не останавливает.

>>910869 →

>приходит, т.е. воздействует, это сила.


Мне не важно, кто там в тебя приходит.

Мне нужно узнать УСКОРЕНИЕ объекта.
17 910928
>>10925

>А если я добавляю через ПКМ по дереву -> Instance Child Scene?


Создай несколько Node3D нод с разным смещением. Добавь к ним чилдренов. Потом перемести эти ноды в другое место дерева. Точка в пространстве останется без изменений, но координаты изменятся, потому что у ноды изменится координатная система.
18 910936
>>10927

> Мне нужно узнать УСКОРЕНИЕ объекта.



Ну так возьми посчитай, подели дельту координат на дельту времени
19 910938
>>10936

>Ну так возьми посчитай


Кто? Я?? Я посчитаю, а движок почему отлынивает?

>подели дельту координат на дельту времени


Это скорость. Ускорение - дельта скорости на время.

Хотя я начинаю думать, что мне нужен рывок...
20 910943
>>10927

>Мне нужно узнать УСКОРЕНИЕ объекта.


Зачем тебе знать ускорение, шиз?
21 910955
Где игры? Какие жанры то хоть делаете?
23 910964
>>10955

> Где игры?


В магазинах же. https://itch.io/games/made-with-godot
24 910965
>>10963
С новой системой плагинов сообщество пошустрее плагинов напилит. Скоро будет у нас швейцарский нож для ассетофлипа. Хуяк-хуяк и в продакшон. Без единой строчки гдскрипта. Разве не об этом мы мечтали? Разве не этого ждали?
>>10955

> Какие жанры то хоть делаете?


Почему мы обязаны делать игры? Мы вполне можем делать плагины. И что ты нам зделоеш?
25 910966
>>10965
Плагины какого жанра ты делоешь?
26 910967
>>10938

> а движок почему отлынивает?



А движку это и знать не надо, ему похуй на ускорение.

> Это скорость. Ускорение - дельта скорости на время.


ну подели еще раз, получишь из скорости ускорение.
Понял?
Движку не надо считать ускорение
27 910969
>>10966
Контроллер 3D-персонажа, движущегося в зоне с точечной гравитацией по внутренней поверхности сферы. Спиздил исходники планетарного контроллера из ассетлиба и перепиливаю под свои нужды.
1698517542202.mp43,3 Мб, mp4,
854x480, 0:30
28 910971
>>10963
Божечки-матрёшечки! Это климакс!
29 910972
>>10969

>в зоне с точечной гравитацией по внутренней поверхности сферы


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

Персонаж на унитаз похож
30 910975
>>10964
Открыл ссылку, а на меня моя игра смотрит. Наес.
1698518431419.png138 Кб, 961x568
31 910976
>>10972
Воц гоин он?
В тумане скрываются монстры.
1697534077053545.png513 Кб, 2063x1299
32 911000
>>10969
Куда плагины выкладываешь? Где их вообще поискать можно?

Я хочу в рамках знакомства с движком почитать несколько гитов хороших проектов. Что можете порекомендовать?
33 911005
>>10969
Это ты спрашивал каких плагинов не хватает? Мне не хватает нормальной Line3D. Чтобы, грубо говоря, трубы делать. В ассетах есть пара реализаций, но они в разных местах кривят.
34 911015
>>11005
Хм. Любопытно. Записал себе в todo.
>>11000

> Куда плагины выкладываешь?


На гитхаб.

> Я хочу в рамках знакомства с движком почитать


В рамках знакомства с движком тебе о плагинах думать рано.

> несколько гитов хороших проектов


В окне менеджера проектов (которое открывается первым) есть вкладка с проектами-шаблонами из ассетлиба. У каждого из них свой гит, если уж так гит нужен, но вообще, прямо в редактор скачиваешь проект и смотришь прямо там, не отходя от кассы.
35 911019
>>11015

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


Эт не то, вот посмотреть на 15 коммитов подряд срущих в мастер чтоб поправить одно говно, это всегда глаз радует.
36 911023
Так. Я начинаю новый проект. А то предыдущий доделал где-то месяц назад, потом хуи пинал. Было несколько идей, не решался взяться ни за одну.
Щас официально. Выбрал самую перспективную идею, которую я точно могу реализовать. Но делаю на четвёрке, потому что надо же когда-то начинать с ней разбираться.

UPD: я наконец-то понял, для чего нужны PhysicalBone2(3)D и соответствующие модификации скелета. С их помощью можно чуть ли не Эйфорию запилить. То есть, они работают по физике, но передают своё положение скелету (а не наоборот). Теоретически, так можно запилить персонажа с супер-сложной процедурной анимацией.

>>10972

>Персонаж на унитаз похож


В 2к23 это в каком-то смысле даже плюс...
37 911024
>>11019
Ну это сразу нахуй, в срачетред, и репорт за движкосрач вдогонку, чтоб бежалось бодрей.
38 911028
>>11024
Почему? Самая мякотка опенсурса же.
39 911038
Надо дизайн подновить
40 911039
>>11038
Хреново же. Особенно эти округлые вкладки, теперь напоминающие выпирающие прыщи. Единственный плюс - повышенная компактность местами.
41 911042
>>11023

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


Минус один троечник. А я еще посижу.

>предыдущий доделал где-то месяц назад


Как успехи по итогам?
1698534245216.png712 Кб, 1024x500
42 911043
Наступает ночь.
43 911045
>>11043
Время делать игры.
44 911046
>>11039
Да, слишком закруглено, но мне нравится темные места, как-то контрастнее стало, лучше видно секции
45 911048
Я могу как-нибудь сделать связи между разными, не загруженными, сценами? То есть, у меня уровень 1 и на нем дверь-выход. При переходе через эту дверь хочу указать чтобы персонаж появлялся на уровне 2 в точке А. Но если игрок на уровне 1 прошел в другую дверь-выход, то на уровне 2 в точке Б

Уровней и точек планируется довольно много, в десятках, и хотелось бы сделать это наглядно для себя и не скатываться до хардкода.
46 911049
>>11048
То есть, я ищу что-то гуевое типа @export var entrance_point: NodePath
47 911050
>>11048
Ссылку на точку назначения заведи в телепорте (двери) и прописывай.
48 911051
>>11050

>Ссылку


Что это? NodePath, как я понимаю, нельзя указать на ребенка внутри другой сцены. Предлагаешь просто строкой указывать?
49 911052
>>11049
Нет, пути придётся либо вручную прописывать, либо, если ты с самого начала грамотно каталогизировал свои сцены (что врядли), ты можешь прописывать только их имена, а общую часть строкового пути вынести в константу, а из имён сделать энум и в ГУЕ выбирать нужное имя.
50 911053
>>11051
Да просто строкой >>11052
51 911054
>>11053
Ок, понял-принял, спасибо. Не идеально но сойдет. Если найду способ лучше - отрепорчу в ИТТ.
52 911055
>>11042

>Как успехи по итогам?


Пока никак. Жду, пока на яндексе одобрят, тогда релизну и на открытых сервисах.

>>11048
У ноды, отвечающей за телепорт:
@export_file и в гуях можно выбирать файл другой сцены. @export вектор - координаты выхода.
Тащемта подобным образом устроены переходы между уровнями даже в каком-нибудь Халф-лайфе. Потому что ну а как ты ещё укажешь на какую-то точку в каком-то другом файле, который даже не загружен?
Можно усложнить. В уровнях завести массив/словарь координат, через которые можно на этот уровень зайти. В выходной ноде тогда надо указывать не координаты, а индекс в массиве/словаре. Тогда точку входа на уровень ты сможешь редактировать прямо изнутри этого уровня. Или даже это может быть не словарь, а определённая именованная нода, но путь к ней придётся прописывать ручками в точке выхода.
И обязательно в каждом уровне нужна дефолтная точка спавна, на которую игрок попадает, если что-то пошло не так.
23101153955.png228 Кб, 1920x1050
53 911074
Тут-же можно своё говно "на заценить" вкидывать?..
Валька на Годоте, с нуля, я не тролль.
54 911093
>>11074
Братишка! Обнял!
Это же шедевр! Куда нести деньги?
55 911097
Коллеги из соседнего треда обратили внимание на одну проблему в Годоте: https://twitter.com/cyangmou/status/1718191813993848974
Есть мысли тех, кто реавльно пользуется вдижком, а не срачи устраивает? Насколько это большая проблема? Сталкивались ли?
56 911106
>>11097
Это очень специфичная проблема. Я сделал две пиксель-перфект игры еще на тройке, и могу сказать что пиксель-перфект делается легко, и плавная камера делается легко. А вот объединить их в один проект, чтобы они не портили друг друга - сложно, потому что с одной стороны тебе нужен четкий снап по внутри-игровым пикселям, с другой - плавная субпиксельная камера. Сам понимаешь. Я в итоге сделал это через шейдер.

Добавлю что речь идет именно о пиксель-перфект. Обычные пиксельные игры в стиле террарии такой проблемы не испытывают. Пиксель-перфект вообще тонкая штука с кучей подводных. Но подозреваю твои движкосрачеры из соседнего треда не в курсе про разницу. Лучше бы игры делали. И ты тоже.
57 911109
>>11106

>И ты тоже.


Я жду 4,2(чтобы потом ждать 4,3 и атк далее)

>движкосрачеры из соседнего треда не в курсе про разницу


да не, там просто вкинули ссылку, никакого обсуждения не было, на в твитторе немножко побухтели
58 911114
>>11097
Осваиваю движок и пробовал делать плавную камеру для пискельной графики, но ебало пиксели. В итоге сделал без плавности и пошел дальше.
59 911138
Дано:

main - родительская нода сцены со скриптом main
control - дочерняя нода main со скриптом control
buttonOne - кнопка, дочерняя ноды control

В скрипте main есть условие
if Input.is_action_just_pressed(Keyboard_1):
$control/buttonOne.DRAW_HOVER_PRESSED (Да на самом деле что угодно)

Собственно, всё. Не работает скрипт. Что может быть? Я опять туплю?
60 911140
>>11138
Не указал экшн в настройках проекта -> input?
61 911141
>>11140
Указал указал. Этот экшн другие дела делает, перед тем как на кнопку повлиять.
62 911142
>>11140
>>11138
К слову, там в main.gd в начале
@onready var buttonOne = $control/buttonOne
А то ругается на null instance
63 911144
>>11141
Тогда возможно перед твоей кнопкой стоит другой контрол, съедающий инпут. Мышкой то кнопка нажимается?

Еще зависит от того, где у тебя стоит этот if Input.is_action_just_pressed(Keyboard_1)

Оно должно не в _input и не в _unhandled_input (с этими двумя работать надо чуть иначе, эвентами а не опросом), а в _process или _physics_proccess.
64 911146
>>11144
Другой контрол стоит, но он кнопок не касается. Мышкой кнопка нажимается. if стоит в функции которую я определил сам, и запускаю в _process.
65 911148
>>11144
Хотя, есть в том контроле что непосредственно над кнопками скрипт, в котором стоят сигналы _on_pressed с кнопок. Но только что сигналы, Инпут же они не съедают.
66 911152
>>11148
Бля, если у кнопки не DRAW менять, а visible то всё работает. Но мне то DRAW менять нужно... Ну или альтернативы подсвечивания, выделения кнопки.
67 911185
>>11152
Потому что DRAW_ это не проперти кнопки, ты не можешь его выставлять снаружи.

Объясни попроще, что именно ты хочешь сделать
68 911188
>>11185
Чтоб по нажатию клавиши кнопка подсвечивалась якобы она активна.
69 911189
>>11188
тогда можешь по нажатию клавиши заменять стайлбокс кнопки, неактивный на активный.

Выглядеть будет так будто кнопка нажата.

Ещё у кнопки есть метод set_pressed_no_signal, посмотри класс BaseButton, может это то что тебе нужно.
70 911193
>>11189
Двачую этого.
Я в прошлом году экспериментировал с темами контролов, решал задачу о том, что в дефолтных темах у большинства контролов не было визуального подсвечивания при наведении мыши или захвате фокуса. Задачу я успешно решил путём добавления в кастомную тему кастомных стайлбоксов и настройки контролов (кнопок и чекбоксов) на переключение этих кастомных стайлбоксов.
71 911196
>>11189
>>11193
Спасибо. Но если у меня 4 кнопки, но подсвечиваться должна одна из них. Получается на нажатие одной кнопки нужно дописывать смену остальным кнопкам стайлбокса? И так у всех кнопок. Типа если нажата кнопка_1: кнопка_2.стайлбокс = дефолт, кнопка_3... и тд. Простите за мой английский. Или есть способ сделать это легче?
72 911205
>>11196

> Или есть способ сделать это легче?


Есть такой способ. Называется ООП. Если конкретнее - наследование. Ты делаешь один скрипт, который наследуется от Button и назначаешь его всем своим кнопкам. И все твои кнопки наследуют поведение, которое ты описал один раз.
73 911206
>>11205
Если ты создаёшь кнопки программно, назначь скрипту class_name MyButton и далее во всех скриптах где ты делал Button.new() делай вместо этого MyButton.new(). Если же ты подготовил "префабы кнопок" в виде сохраненных tscn-файлов, и загружаешь их через PackedScene.instantiate() то тогда class_name задавать не обязательно, но желательно, чтобы автоматически тянуть свои кастомные методы в интеллисенсе редактора через вывод типа.
74 911246
Годаны, загадка века. Решена ли в четвёрке задача отражения 2д-анимаций?
Что я имею ввиду. Вот у меня персонаж, состоящий из частей, анимируется скелетно (новая система инверсной кинематики ОХУЕННА, но в неё надо вкурить). Я сделал несколько анимаций лицом вправо. Теперь мне надо повторить те же анимации лицом влево. Натыкивать их мышкой заново? Это ж к тому же все ИК-цепочки переделывать: ограничения коленных, локтевых сгибов и тому подобное.
Со спрайтовой анимацией всё просто, а вот тут куча подводных... Как эта проблема у образованных людей решается?
75 911255
>>11246
В общем, пока решение такое, в целом рабочее.
Вся анимация только на ИК. Маркеры-цели для ИК все лежат внутри одной ноды, назовём её контейнером. Если надо что-то двигать не-ИКшное, двигаем его при помощи RemoteTransform'a, сам ремоут кладём туда же, где маркеры.
Флип состоит из трёх частей:
1. Ставим контейнеру скейл (-1, 1)
2. Меняем местами position.x у симметричных костей, типа "плечо", "бедро"
3. В скелетных модификациях инвертируем:
а) Для TwoBoneIK: flip_bend_direction
б) Для LookAt: constraint_angle_invert - но только для тех, которым это нужно
Ну и, конечно же, сами спрайты, из которых состоит персонаж, флипаем тоже.
В целом, пока я не дал ему оружие, выглядит адекватно. С оружием придётся возиться отдельно. Но хотя бы я уже избавил себя от возни с зеркальными дублями анимаций.

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

И упаси вас г-сподь скалировать скелет. Начинается то самое, от чего все священники будут в ужасе уходить за кадр со словами "ну нахер". Скелет лучше вообще лишний раз не трогать, а один раз настроить модификации, после чего двигать уже только маркеры.
76 911258
таки разобрался с мультмешем и шейдерами. все таки 2 float4 как параметры инстанса пиздец как мало.
77 911284
>>11258
Что ты делаешь вообще?
sample33288b0c179f36ab3f3bd2b4a777008b.jpg151 Кб, 850x1164
78 911298
79 911301
>>11284
страдаю херней. если конкретно - разбираюсь с флексом(опенсорс экс) и годотом. конкретно здесь передача свойств из экс в годот. спрайты начинали тормозить где-то за 500 (а потом оказалось что если я хочу например приебенить к нему эфект например растворения, то придется каждому спрайту ебащить свой материал, ибо 2д в инстанс униформы шейдера не умеет) потому сделал через мешинстанс2д. 2500 псевдоспрайтов, которые могут в трансформ2д, цвет, покадровую анимацию из атласа и еще 3 флоата остались для параметров(тут 2 используется для растворения и покраснения)
80 911307
>>11298
Забрал домой. Напоил чаем.
81 911313
>>11301
Посмотри на Arch https://github.com/genaray/Arch там есть пример для годота, там тоже много объектов на экране
82 911320
Блять. Почему у SceneTree есть get_first_node_in_group(), но нету get_first_node_in_tree(). Как взять main ноду всего древа без свистоперделок с индексом, патчем, стринг неймом и тд и тп. Просто хочу что-то вроде get_tree().get_first_node_in_tree и всё! Неужели я многого прошу?
83 911325
>>11320
GetTree().Root?

>>11313
да не, тут проблема в годоте. т.е. вполне неплохо батчит спрайты с одинаковым материалом, но если хочется обмазать шейдером - то материал нужно клонировать, в итоге батчинг идет к херам и каждый спрайт рисуется самостоятельно, что херит производительность уже на сотнях. не сказать что бы прям уж маленькое значение, хватит практически для всего, кроме чего-то типа вампир сурвиворс при чем для 3д в 4.0 рендер перерисали под полноценный инстансинг а в 2д есть только старый мешинстанс2д, который берет только трансформ2д и 2 флоат4 как параметра для отдельного инстанса. судя по обсуждениям на гитхабе - "не горит"
84 911337
>>11301
Вот это же?

https://github.com/SanderMertens/flecs

Ты его в гдэкстеншен собрал?
85 911339
>>11337
все гораздо хуже, через дотнет обертку
https://github.com/BeanCheeseBurrito/Flecs.NET
86 911366
А можно как то реализовать object.set("value", != "value") ? Чтоб меняло на противоположное себе значение. Value - bool, если что.
87 911369
>>11366
Бля проебался. Не "value", != "value", а "value", !"value". Или как то так.
88 911370
>>11366
нихера не понил. для булена поменять на противополжное

value = !value;
89 911372
>>11370
Ну это я знаю. Мне нужно переменную в nodeOne.gd поменять через nodeTwo.gd. nodeOne.set("varibale", value), такой тип синтаксис там. Переменная как string, после запятой значение. Но !"value" не работает там.
sample.mp4814 Кб, mp4,
1034x606, 0:06
90 911375
Как делать такие же красивые анимации кнопок?
91 911377
>>11372
а, ну так да, работать не будет
1. сначала получить через гет потом поменять на противополжное
var t : bool = nodeOne.get("value")
nodeOne.set("value", !t)
2. добавить в nodeOne что-то типа
func toggle():
value = !value
92 911380
>>11377
Спасибо, догадался таки до первого варианта как раз. Кстати, а обязательно когда переменную объявляешь указывать её тип?
93 911381
>>11380
нет, но я привык к строгой типизации на уровне рефлексов. т.е. сразу начинают лезть в голову вопросы "а что случиться если там не бул?" так то я хотя бы получу инвалид каст ошибку. воопше можно "сократить" до
set("value", !get("value"));
94 911383
>>11381

>можно "сократить" до


За это отдельное спасибо! Интересно получается, забираю.
95 911390
>>11375
Через AnimationPlayer играешься с свойствами/стилями кнопок. А вообще всрато, отвлекает от задачи игры.
96 911396
>>11325

>GetTree().Root


>The SceneTree's root Window.


>Window


А мне надо node, но всё равно спасибо.
97 911414
>>11325
Правильно понял, подобие вампиров надо на шейдерах делать, чтобы летало. Простые ноды с текстуркой не сойдут?
98 911426
>>11414
зависит от тонкостей батчинга. суть в том, что отрисовать сотню спрайтов поштучно критично дороже, чем обрисовать 100 одинаковых спрайтов. и вот эта самая "одинаковость" величина сильно плавающая. простейшая оптимизация - движок собирает спрайты в один меш из кучи квадов, формирует атлас из их текстур, подгоняет стандартный шейдер под это, и все - они "одинаковые" и рисуются разом. пока тебе не понадобятся какие-то специфичные фичи, которые в этот стандартный шейдер не влезет. например свой шейдер на спрайт точно в эти рамки не влазит.
4.png2,4 Мб, 2048x2736
99 911471
100 911479
>>11471
А что за тянка, маскот годо? Я здесь новенький прост.
101 911482
>>11479
да, трахаю её по вечерам, она бесплатная, всем дает
102 911485
>>11482
Иди отсюда, пидор грязный.
103 911488
>>11471
Нейросеть обмазала?
Если нет - то моё увожение художнику, очень сочно.
104 911490
>>11488
да, ет нейронка
105 911492
>>11490
Да, я уже и сам разглядел. Рот проёбан, цвет глаз проёбан. Бретелька правая проёбана. Зато ляхи сочные. Да. Выражаю респект авторам модели и авторам арта, на котором модель тренировалась.
image.png234 Кб, 850x754
106 911493
Что тут у вас? Безобразничаете?
107 911496
>>11471
Почему так мало такого с годеточкой, годотеры что всё время делают игры и нет времени отвлечься?
108 911498
>>11496
Ну я мог бы создать в коикатсу перса и генерить её в любых позах, но надо ли?
109 911499
>>11496
Юнитеса уже и писю, и анус показала, а годеса все жмется. Ну, ничего, может дорастет до полноценного движка и тогда покажет.
110 911501
>>11498
Если будут классные пикчи то надо, но ты же сделаешь проходное г, лучше не трать время, я скорее про рисовак говорил. Наклепали бы интересного, нужно привлекать игроделов, раз гдскриптя медленная, пусть хоть годеточка заманивает прелестями
111 911502
>>11471
Как же нейронки ебут. Страшно за человечество
112 911503
>>11502
Скоро уже, скоро, сделают кнопку "зделоть зоебись".
image.png316 Кб, 522x741
113 911504
>>11499
Опенсорс же, зделой сам.
114 911505
>>11503
Выглядеть это будет так: кидаешь чату-гпт-9 пасту кирилла, а он тебе ориджинал-контент на 69 часов игры скидывает, сразу ссылкой на установщик.
115 911510
>>11502
Цвет глаз, прическу, стиль проебали, уууух как же ебут.
116 911517
>>11510

>Цвет глаз


в промте не указал, оцени >>11504 тут тоже цвет проебан, лол

>прическу


не помню как эта прическа называется на кругляшки, там конкретное название

>стиль проебали


дык в этом и суть, что стиль другой

>>11493
Хотим и безобразничаем, все же код писать!
1698688886424.jpg211 Кб, 2000x1414
117 911526
>>11517
Цвет глаз по канону зеленый, точнее что-то типа желтовато-бирюзового.
Screenshot10.png170 Кб, 1161x631
118 911527
Есть идеи что это за ошибки при открытии любого, даже нового проекта?
119 911531
>>11510
Ну нарисуй так же не проебывая, посмотрим насколько ты лучше
120 911538
>>11527
Попробуй почистить кэш.
121 911543
>>11517
Сделай эту еще >>11526
122 911548

>Note: call_group() will always call methods with an one-frame delay, in a way similar to Object.call_deferred()


Сюка, сколько жопоболи мне это доставило, пока документацию не прочитал.
123 911549
1. Как сделать, чтобы при сужении окна по ширине кнопочки имели минимальный размер, после которого, не сужаются как на видео? Поставил для контейнера кнопочек мин. сайз 500, не помогло.
2. Как сделать, чтобы при сужении окна по высоте кнопочки перестраивались как на видео, сейчас они у меня просто уменьшаются вместе с контейнером (контейнер VBox, внутри которого HBox).
124 911569
>>11526
Смысл вообще цепляться за этот образ, это цвета флага Аргентины, движок давно стал международным, сам Хуан перекатился в Испанию от поборов, фонд зарегистрирован в Голландии, а W4 Games в Ирландии.
125 911570
>>11569
У флага Аргентины другие цвета. Даже синий там другого оттенка. А зеленого, черного, розового там нет совсем.
1698696603305.jpeg8 Кб, 130x187
126 911573
>>11570
Чел, у нее поэтому была белая прядь посередине.
image.png358 Кб, 403x335
127 911577
>>11573
Тащемта Хуан - шотландец.
128 911578
>>11526

>по канону


Цвет глаз не канон, годотная башка канон, а значит только прическа с проседью канон, остальное любое
129 911581
https://docs.godotengine.org/en/stable/tutorials/io/saving_games.html

Для сейвов/загрузки есть какие-нибудь альтернативы вот такому ручному отслеживанию и восстановлению переменных? Как я понимаю можно тупо сцену целиком сохранять, но там проебутся все переменные, которые не export
😻😻😻.mp45,1 Мб, mp4,
480x640, 0:33
130 911588
1698666385075.jpg138 Кб, 400x600
131 911590
>>11471
Какой же годот все-таки классный движок
132 911593
>>10890 (OP)
Только начинаю вникать в этот великолепный мир шейдеров и столкнулся с проблемой. Есть вот такой шейдер: https://pastebin.com/Pkte3PGJ
И, вроде, все хорошо, но когда спрайт подходит к границам видимой области, то начинает тянуться шлейф. Я понимаю, что это происходит из-за distraction_strenght, но почему это происходит - понять не могу. Помогите, пожалуйста.
133 911602
>>11526
>>11543
держи, отдельно сгенерил каждую, потому что промт разный должен быть
134 911608
>>11581

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


Есть.
Если вкратце, тебе нужен объект-синглтон для сериализации (назовём его world_data). Это одна из редких задач, где синглтон реально нужен и антипаттерном не является.
Вся остальная игра состоит из объектов синхронизирующихся с этим объектом, ворлд-датой. При своей загрузке, они запрашивают данные для себя у ворлд-даты, при своей выгрузке, или при наличии изменений, они самостоятельно загружают данные в вордл-дату.
Само же сохранение в файл в этом случае будет сериализацией всего одного объекта - ворлд-даты.
Сохранение контрольных точек в оперативке? Изи.

Загрузка сейва не должна выгружать текущую сцену принудительно. Загрузка сейва только загружает ворлд-дату, которая испускает сигнал "я обновилсо". После чего, куррент-сцена и объектты на ней, которые у тебя подписаны на сигналы ворлд-даты, действуют соответствующе. Если сейв хранил данные о другой локации, то куррентлокация выгружается полностью, и загружается локация по имени из сейва. Если же локация соответствует, то просто обновляются параметры. Встают мёртвые враги. Телепортируются в места, где должны стоять. Стейтмашины переключаются в те стейты, которые должны. И так далее.

И еще. В ворлд дате хранятся именно имена, в контексте "бизнес-логики" игры. Никаких путей, никаких сцен. Только имена и цыфры.

Думой.
135 911661
Бляяяя. Заморочки какие-то со слоями, узлами, древами. Кароче, есть узел control, к нему весь интерфейс привязан. Один из таких элементов control нода для элементов инвентаря. У нее дочерняя сцена инвентаря. И вот мне нужно, что бы когда я наводился на ноду control инвентаря, у меня отправлялся сигнал в скрипт. Окей, через _mouse_on() работает. Только получается так, что у control в инспекторе mouse filter должен быть на ignore, что бы у меня кликалось на элементы самого инвентаря на которые нужно, но блядский ignore игнорирует не только нажатие, он вообще всё игнорирует включая наведение мыши. И как прикажете это фиксить? Я уже все что можно попробовал, и какие то z-index'ы, и маски, хуяски. Почему так заморочено то, нельзя было сделать на разный импут разный фильтр? Пиздец.
136 911685
>>11602
Нужна thicc версия.
137 911687
>>11608
Интересно. Попробую. Ручной работы много, правда. Сейвы - самая унылая часть геймдева. Третий раз их делаю и третий раз страдаю.
138 911689
>>11661
Попробуй pass вместо ignore. Pass позволяет кнопке получить инпут, а потом передает весь ее инпуп родителю.

Еще ты все еще можешь поймать инпут в этой кнопке даже не смотря на ее игнор. Я себе для тач-контроля вот так сделал: https://pastebin.com/9vFLW6BM

Но тебе лучше через пасс.
4.png778 Кб, 1024x2048
139 911696
>>11685
держи
140 911699
>>11696
Бимбо-унитаз
141 911700
>>11699
движок для траханья*
142 911702
>>11696
Наделал бы с ней классов-наследников
143 911703
>>11687

> Ручной работы много, правда.


Если всё организовать правильно, то вся работа будет делаться один раз.

> Третий раз их делаю и третий раз страдаю.


Годотред спешит на помощь. Давай пройдёмся по деталям моего предыдущего поста. Всё ли ясно как реализовывать? Может что-то подробнее обеснить?
144 911709
>>11702
Вряд ли она бы дала безигорнику.
145 911710
>>11709
Она была рождена для безыгорных
146 911711
>>11703
Да-да, я понял, давай без странностей.
1698751238023.png59 Кб, 474x553
147 911718
>>11711

> давай без странностей


На.
Дальше сам.
4.png6,5 Мб, 3840x2160
148 911727
149 911730
>>11727
Это тоже нейронка замутила??
150 911735
>>11730
Да, сделал артик вам, раз такое дело.
151 911736
>>11727
представляю как там воняет
image.png152 Кб, 645x716
152 911737
153 911745
>>11727
Ахуенно
154 911747
>>11727
Лицо не то. Я представлял такое лицо у гендира Юнити, когда он роялти всем вводил.
155 911753
>>11375
Не слушай этого >>11390, используй твины
https://docs.godotengine.org/en/3.5/classes/class_tween.html
Это как раз их изначальная дисциплина. Такие анимации делаются твинами в одну строчку кода.
156 911754
>>11753
Ок, посмотри еще >>11549 мой ревест
157 911759
>>11754
А вот это хз, с гуями плаваю. Обычно на рандоме тыкаю параметры, которые похожи на то, что мне надо, и нахожу нужные.

Но вообще, попробуй вместо двух бокс-контейнеров использовать один FlowContainer, он организует элементы как слова на строке: с автопереносом и выравниванием типа "justify".
Мин сайз надо ставить не контейнеру, а самим кнопкам. И залезть к ним в SizeFlags, поставить галки Fill + Expand, чтобы они занимали всё доступное пространство в контейнере.

Ремарка: это всё в тройке; как там что перепилили в четвёрке - я вообще зх.
158 911762
>>11689
С pass у меня не работает должным образом.
159 911767
Гододи перешли на новую тактику - заманивают в свою секту аниме сиськами.

Довольно низко, нечестный прием.
160 911768
Как избежать подачи сигнала _mouse_exited(), когда курсор попадает на дочерние элементы ноды?
6.png5,4 Мб, 2048x3072
161 911769
162 911770
>>11769
Когда тебя выкупили корпорации и сделали closed-source
163 911775
Почти закончил просмотр гайдов хёрт биста и впал в уныние. Ещё из-за своих правок, выскакивают баги то тут то там, которые исправляю сутками. Как дальше жить, не знаю, пойду нажрусь
164 911779
>>11775
Это норма. Я в своей первой игре тоже тупил неделями на простейших задачах. Теперь вжух и геймджам. Все приходит с опытом, продолжай делать игры.
165 911780
>>11775
Синие собаки хороши. Им в напарники нужны зеленые
Видео-31-10-2023 160225.mp47,9 Мб, mp4,
1274x714, 0:25
166 911782
>>11780
Они ещё ебашить будут прикольно, но надо будет перерисовать, тк на двух ножках всего в 16 пикселей и попадают по яйцам
>>11779
Особенно смуту сеет то что старания напрасны могут быть, тк я пилю менеджер в опенворлде, с различными фичами типа банд, кредитов, казино и тп, а из-за графики мало кто оценит. Но надо пилить, согласен
Видео-31-10-2023 163713.mp4155 Кб, mp4,
516x350, 0:06
167 911783
>>11782
не то видео
168 911789
>>11783
У тебя на моменте, когда хуйня встает, она телепортируется на пару пикселей к центру. Лучше исправь
image.png906 Кб, 1280x720
169 911791
Dev snapshot: Godot 4.2 beta 4
https://godotengine.org/article/dev-snapshot-godot-4-2-beta-4/

Поскорее бы уже rc и release, эх...
170 911793
>>11727
На Алину Рин похожа...
171 911796
Всем ребятам, всем привет. Движок просто класс! А есть ли игры на этом движке? Ну, я имею ввиду шутеры от первого лица
172 911798
>>11593
Неужели никто в шейдерах не разбирается?
image.png72 Кб, 324x717
173 911799
>>11798
Не вижу никакого шлейфа. Если ты про пикрил, то это фон полосы прокрутки.
16079757674750.jpg11 Кб, 320x320
174 911800
В годоти что нет RaycastAll()?
Нельзя запустить луч с бесконечной длиной?
SphereCast нету, нужно ноду какую-то создавать, что за наркомания?
175 911801
>>11800

>нужно ноду какую-то создавать


описал литерали любое действие в годоте
14868369523040.jpg14 Кб, 250x250
176 911803
>>11801
Ну блять, для рейкаста не надо, почему для сферкаста надо? Какой-то элементарщины нету, пишут, что raycastall можно самому заскриптить, в цикле перезапускать из точки столкновения, вообще ебануться движок
177 911808
>>11799
Взял картинку, на которой получше будет. Если изображение не у края экрана, то все нормально, если у края, то получается, как на втором.
178 911810
>>11808
Пон. Хз, может визуальный баг? В игре нормально отображается:?
179 911811
>>11810
Точно так же. Вообще, я понимаю из-за чего это. В 15 строчке эта часть "SCREEN_UV + distraction_strenght * vec2(depth)" может стать больше 1.0(Максимум для UV координат, на сколько я понимаю), но как это обойти - не понимаю.
180 911812
>>11811
Но это не точно, я шейдеры почти не понимаю.
181 911813
>>11811
Начинай с самого тупого и простого, хуярь if со сранением >= 1. Дальше уже пляши от этого, если работает.
182 911815
>>11813
Да вот непонятно, что делать потом. Вот жду специалиста по шейдерам, может что подскажет, так как не хочется менять этот шейдер на другой. Этот самый красивый.
183 911821
>>11815
На реддите спроси, там больше шансов.
184 911823
>>11821
Видимо, придется.
185 911826
>>11823
Но все равно буду рад, если кто здесь ответит.
186 911827
>>11821
Еще дискорд есть, очень активный.
187 911828
Оцените ок ли организация скриптов для уровней. Есть базовый код, который должен быть у всех уровней. При этом есть особые уровни, каждый из которых требует парочку своих дополнительных функций.

Планирую так. Сделать LevelBase.gd, прикреплять ко всем уровням. Потом, если понадобится дополнительный функционал, открепляю LevelBase.gd от уровня, и вместо этого делаю ему Level666.gd, который наследует от базового, extends "res://LevelBase.gd"

Ок способ? Или есть получше?
188 911830
>>11827
А можно ссылочку?
190 911832
>>11831
Спасибо, спросил ещё и там.
191 911834
Годаны, а вы пользуетесь метаданными? Я чёт ни разу. Для чего они вообще нужны? Я вот между

>var foo


>if node.has_meta("bar"):


> foo = node.get_meta("bar")


и

>var foo


>if node.get("bar") != null:


> foo = node.bar


не вижу принципиальной разницы, но второй вариант как-то больше контроля имеет.
Есть какие-нибудь живые примеры использования из личной практики?
192 911835
>>11834
Ну тут скорее как в программировании, когда якобы дублиррубющийся код, на самом деле первый вариант показывает кодерку конкретно, что он работает с метой, а во втором примере хуй знает что-то "бар" сравнивается с налл. Годотом не пользуюсь, поэтому не знаю, на сколько это приминимо к нему.
193 911837
>>11828

> Ок способ? Или есть получше?


Это ты легаси нарисовал, которое было в двушке и первых версиях трёшки. Потом ввели class_name.

По современному будет так:

> Сделать class_name LevelBase, прикреплять ко всем уровням. Потом, если понадобится дополнительный функционал, открепляю LevelBase.gd от уровня, и вместо этого делаю ему Level666.gd, который наследует от базового, extends LevelBase

194 911838
>>11834

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


Практика не личная, но пример живой: аддон Dialogic для создания диалогов, весь работает на метаданных. Я когда его ковырял, тестировал, долго не мог понять, что там за магия, что диалоговые данные волшебным образом хуяк - и появились сохраннные. А потом обнаружил, что они в метаданные пишутся.
195 911840
>>11837

>class_name


Бля, точняк. Спасибо.
196 911842
>>11832
Найдёшь решение, сюда запости, вдруг кому пригодится.
197 911844
Делайте игры.
198 911855
>>11791
ну дык сначала мелкософт должен почесатся и выпустить таки нет8 в релиз

>>11815
насколько помню у текстур в импорте должен быть параметр как обрезать. там должны быть варианты кламп/врап/стретч

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

vec2 uv = SCREEN_UV + distraction_strenght vec2(depth)
vec4 test
test.xy = step( vec2(1.0),uv) //права низ
test.zv = vec2(1.0) - step(vec2(0), uv) //лево верх
float newa = 1 - step(1.0, test.x + test.y + test.z + test.z); //если где-то вышли за границы (0,1) - получаем 0
.....
COLOR.a
= newa; // и этот пиксель не рисуется
изображение.png10 Кб, 442x129
199 911856
>>11855
сука форматирование
200 911857
>>11800

>В годоти что нет RaycastAll()?


>Нельзя запустить луч с бесконечной длиной?


>SphereCast нету, нужно ноду какую-то создавать, что за наркомания?


Этого нет и не будет, потому что Хуан считает, что это избыточно, это всё можно накодить самому. Там всё по такому принципу.
201 911897
>>11857
Не ну игровой движок тоже можно накодить самому, хули. Операционную систему тоже.
202 911901
>>11803
Шейпкаст делается точно так же как и рейкаст.

Хочешь - ноду ставишь
Хочешь - вручную запрашиваешь сервер физики

PhysicsDirectSpaceState2D -> intersect_shape()
203 911902
>>11901
PhysicsDirectSpaceState3D то есть
204 911908
В скрипте ноды 1 следующее:

var item = ITEM.instantiate()
item_container.add_child(item)
item.connect("gui_input", _on_gui_input)

Потом в функции _on_gui_input():

print(gui_input.get_object()) выдаёт почему-то ноду скрипта 1, хотя в документации написано >Returns the object emitting this signal.
Главное сигнал издается как раз правильно, когда нажимаю на тот самый item. Почему так?
205 911909
юнитиребёнок плачется, что нельзя просто накидать говна и получить игру, а приходится самому что-то там писать, спешите видеть
image.png22 Кб, 455x158
206 911910
>>11855

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


Не ждём, а готовимся!
1698831778421.png190 Кб, 400x400
207 911911
>>11856

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


А што если на пастебин выкладывать код? Да не, хуйня какаята. Лучше продолжать бороться с разметкой.
208 911916
>>11911
Лучше бы макака [code][/code] ввела. В /pr же был.
209 911918
Анонсы, обесните что за хуйня тут происходит.

Есть (не моя) игра: https://broelbrak.itch.io/nextdoor

Почему у нее так много комментариев? Почему так много ВИДЕО? Я покликал по этим летсплеям - все они от ноунеймов с 20-40 просмотрами. Итч какие-то ачивки этим людям дает? Или что? Или это боты? Откуда это все? Как стать таким же успешным?

Причем у этого автора есть вторая игра, и на ней совсем другая картина - 3 комментария за 2 года. Как и на моих играх. То есть это даже не автор суперзвезда.

Уже не первый раз натыкаюсь на подобный наплыв восторженных летсплейщиков. Что за хуйня?
210 911923
>>11916
Ну пока что не ввела. Жаль.
211 911924
>>11918

> Что за хуйня?


Слэшдот эффект называется.
image.png458 Кб, 640x480
212 911925
>>11924

>Слэшдот эффект

213 911938
>>11918

> Short cinematic pixel horror game inspired by Junji Ito's manga.


> Как стать таким же успешным?



А у тебя тоже короткий пиксель арт хоррор по сценарию знаменитого мангаки?
214 911940
>>11924
Но что за наплыв ютубовских ноунеймов? Покликай их. Они все как один. Хотя, без сомнения, живые люди, светящие своим лицом.

>>11938
Я видел похожий положняк и по играм не основанным ни на чем.
1698836927232.png65 Кб, 709x433
215 911943
>>11940
Пиздуй в гугл, читай матчасть, хватит срать в треде, блядь.
216 911944
>>11943
Да знаю я про твой слешдот эффект. И реддит эффект. И ЛОР эффект, и хабр эффект, и любая залупа-нейм-эффект. Объясняет наплыв, не объясняет идентичность и ботоподобность.
217 911945
>>11940
Ладно, открою секрет успеха.
Игра должна нормально выглядеть и бесплатно а еще запускаться в браузере, но это уже совсем пушка будет

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

> двач, я ем с ножа.jpg

image.png85 Кб, 953x591
219 911966
Заебало это говно, нет чтобы на каждую функцию пример сделать как в юнити, я не прогер, нихуя непонятно. Годот уже десять лет существует, инфы мизер, хуан специально меняет названия чтобы было сложнее!
>>11901

>PhysicsDirectSpaceState2D -> intersect_shape()


Так или что?
221 911972
>>11970
Да разговор про shape ебучий, Хуан реально заставляет создавать круг, еще бы заставлял координаты каждой точки окружности вписывать, издевается
222 911975
>>11972
А может проблема X-Y? Не? Я просто не вникал в предыдущий дискасс. Мимокрокодил. В чём задача?
223 911979
>>11975
Проблема в том, что Хуан пидарас, ему такую функцию написать три секунды, а я пол часа сидел. У него во многом ошибочные представления. Недавно он написал, что посмотрел стримы изучающих годот и ахуел, что все пытаются сразу создать куб как в юнити и не могут найти, типо не знал, что это так популярно. Я тоже так же пытался, представляю десятки тысяч людей тыкались в непонятках из-за этого одного клоуна. Избыточно, говорит, сферкаст делать, петух
224 911982
>>11979

> У него во многом ошибочные представления.


А вот копипаста из растотреда в /пр/. Как раз в тему.

> > > Хранить трансформацию в виде матрицы поворота и вектора смещения - не самая здравая идея.


> > А вот тут поподробнее. Я на двачах слышал ровно противоположное. Что матрица трансформации это на порядок более-лучшее решение, чем квартернионы, мало того что устраняют гимбал лок эйлеровских осей, так ещё и устраняют кукую-то траблу, которую порождают квартернионы.



> >А вот тут поподробнее.


> Матрица кроме ориентации и скейла хранит еще наклон осей (skew, оси могут быть не ортогональны), если ты например, трансформацию анимируешь, то надо на каждый чих матрицу править - ортонормировать, проверять что длина векторов единичная (если скейла нет, если есть - будет копиться ошибка), если матрица 4х4, очищать нижний ряд (0 0 0 1). Матрица может неожиданно стать вырожденной, тогда ее уже никак не поправить. Т.е. в матрице слишком много лишней информации для хранения ориентации. С кватернионом все проще - нормализовал и все. Плюс физика со скейлом (особенно неюниформным) совсем не дружит, т.е. для физики нужна будет отдельный вид трансформации без скейла. Ну и матрицы будут тормознее даже без проверок, например, инверсия трансформации с кватернионом гораздо проще и быстрее. Ну и сами кватернионы идеологически проще, если их понимаешь.

image.png15 Кб, 1088x117
225 911987
226 912018
Подскажите. У объектов есть гет: https://docs.godotengine.org/en/3.5/classes/class_object.html#id1

Я могу сделать, например, get("transform"). А могу ли я сделать что-то типа get("Pivot/Body.transform")?

То есть, я конечно могу написать вспомогательную функцию, которая будет разделять пути и трансформировать запрос в get_node("Pivot").get_node("Body").get("transform"), но нет ли чего готового?

Делаю на тройке.
228 912032
>>12021
Работу когда найдешь?
🙀🙀🙀.mp4832 Кб, mp4,
562x572, 0:12
229 912042
>>12032
Неожиданный сюжетный поворот.
230 912055
>>12032
У меня есть.
231 912064
>>11855
Спасибо за попытку анон, но теперь просто шейдер просто ничего не рисует в том месте, где раньше шлейф был.

Ну, а на реддите и в дискорде даже не ответили.
232 912091
>>12064
Так, хорошо. А что он должен рисовать? И откуда ему эту информацию взять?
Я другой анон, есичо, но тут обитаю и всю эту проблему наблюдаю с самого начала. Просто в шейдерах не спец, поэтому не думал, что чем-то помогу. А щас вник...
Вот строчка 15:

>SCREEN_UV + distraction_strenght vec2(depth)


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

>clamp(SCREEN_UV + distraction_strenght vec2(depth), vec2(-1.0, -1.0), vec2(1.0, 1.0))

233 912093
>>12091
Только не уверен, в каких границах надо клампать. Вроде от -1 до 1, но там сам проверяй.
234 912125
>>12091
Шейдер берет и искажает изображения под ним так, будто оно находится под водой. Но побочных эффектом является то, что изображение сдвигается влево вниз под шейдером относительно оригинального изображения. Думаю в этом основная проблема и из-за этого выходит за границу текстуры.

К сожалению, твой вариант не работает.
235 912146
Ребят, а как сделать чтоб неписи передвигались только .Х координатам? А то чет они у меня левитируют когда прост ходят
236 912150
Сделайте за меня игру? Сложно штоле?
image.png1,1 Мб, 700x917
237 912153
>>12150
Раньше люди в сложнейших условиях создавали шедевры игропрома, а сейчас для тебя все движки бесплатные, нейронки на любой вкус, а ты что
238 912170
>>12125
Я потыкал твой шейдер у себя и имею сказать следующее.
1. Покажи настройки шума water_noise и water_noise2. Или ты там просто картинки воды используешь?
Я у себя создал NoiseTexture / OpenSimplexNoise, получил ОЧЕНЬ глубокие искажения на дефолтных настройках. Чтобы получить что-то похожее на твои скрины, пришлось убрать distraction_strength примерно до 0.02, но вместе с ним ожидаемо ушёл и краевой глитч. А у тебя, походу, исходные шумы очень светлые, почти всегда близки к 1.0.
2. Нашёл очень элегантное решение. На строке 13, где текстуры умножаются, заменить умножение на вычитание. Ну и кламп на 15 строке оставить, чтобы не вылезать за пределы текстуры вьюпорта.
239 912172
>>12125
Вообще, на самом деле, это очень простой шейдер, щас тебе быстро объясню.
Надеюсь, строки с объявлением переменных объяснять не надо.
Шейдеры устроены так, чтобы можно было их легко распараллелить. Как? Просто работаем с каждым пикселем параллельно и всё. Таким образом, шейдер описывает, в какой цвет следует покрасить один пиксель на экране.
SCREEN_UV - координаты нашего пикселя. (0,0) это центр экрана, (1,1) это правый верхний угол.
SCREEN_TEXTURE - указатель на текстуру экрана.
Мы не можем работать с целыми текстурами, можем только доставать из них отдельные пиксели. Собственно, именно этим и занимается функция
texture(tex, uv), где tex это указатель на текстуру, а uv это координаты доставаемого пикселя.
Рассмотрим подробнее, что происходит с координатами на строке 13:
UV + scroll TIME
TIME это постоянно тикающее время, scroll - коэффициент, который это время сжимает. UV (локальные координаты) в данном случае можно заменить на SCREEN_UV, всё равно у нас тут полноэкранный шейдер, локальные координаты совпадают с глобальными. Текстура шума бесконечная, а значит её можно скроллить сколько угодно, то есть нам не обязательно обнулять TIME.
Итак, на 13 строке мы добыли пиксель текстуры шума одной и второй. Это значение находится в диапазоне от 0.0 до 1.0. При умножении, соответственно, мы остаёмся в этом диапазоне. А при вычитании уже получается от -1.0 до 1.0.
Ещё обращаю внимание: мы здесь берём только один канал текстуры, потому что float.
Дальше наконец мы лезем в текстуру вьюпорта, чтобы добыть из неё цвет пикселя. Нам нужен весь цвет, так что выбираем тип vec4. Вообще, texture возвращает тот тип данных, который мы от неё запросим.
Итак. Мы хотим взять пиксель вьюпорта. Но не тот, который сейчас обрабатывается, а какой-то рядом, чтобы было искажение. То есть, берём SCREEN_UV и сдвигаем на размер искажения. За силу этого сдвига отвечает юниформ distraction_strenght, а за рандомность - полученное в 13 строке depth. Соответственно, некоторые пиксели в правой-верхней части экрана получат UV-координаты больше 1.0 и, таким образом, попадут за пределы текстуры. Эту проблему решает clamp, он возвращает нас из-за пределов текстуры ровно на её границу. Так что несколько пикселей, слишком близких к краю, будут взяты из одного и того же пикселя на краю.
Дальше строчка top_light.
smoothstep(light_start,light_end,depth) - это мы находим число от 0.275 до 0.4 (при дефолтных юниформах), где значение depth (снова 13 строка) определяет, насколько оно близко к 0.4. Умножив на цвет top_color, мы получили линейный сдвиг цвета, который используем ниже.
Послоедняя строчка.
screen_color
tone_color - мы взяли полученный ранее пиксель вьюпорта и окрасили его в цвет тона.
+ top_light - тут мы не просто окрашиваем. При больших зачениях топлайта мы можем вылезти за пределы 1.0 по всем каналам. Тогда пиксель окрасится в белый, только и всего.
Ну и наконец. COLOR = здесь мы присваиваем пикселю на экране то значение, которое насчитали. Какому пикселю? Тому самому, с которым всё это время работали. Напомню, в шейдере мы работаем с одним пикселем, то есть со всеми сразу параллельно. И вот тут-то мы ретёрним его значение.
Вот как-то так.
239 912172
>>12125
Вообще, на самом деле, это очень простой шейдер, щас тебе быстро объясню.
Надеюсь, строки с объявлением переменных объяснять не надо.
Шейдеры устроены так, чтобы можно было их легко распараллелить. Как? Просто работаем с каждым пикселем параллельно и всё. Таким образом, шейдер описывает, в какой цвет следует покрасить один пиксель на экране.
SCREEN_UV - координаты нашего пикселя. (0,0) это центр экрана, (1,1) это правый верхний угол.
SCREEN_TEXTURE - указатель на текстуру экрана.
Мы не можем работать с целыми текстурами, можем только доставать из них отдельные пиксели. Собственно, именно этим и занимается функция
texture(tex, uv), где tex это указатель на текстуру, а uv это координаты доставаемого пикселя.
Рассмотрим подробнее, что происходит с координатами на строке 13:
UV + scroll TIME
TIME это постоянно тикающее время, scroll - коэффициент, который это время сжимает. UV (локальные координаты) в данном случае можно заменить на SCREEN_UV, всё равно у нас тут полноэкранный шейдер, локальные координаты совпадают с глобальными. Текстура шума бесконечная, а значит её можно скроллить сколько угодно, то есть нам не обязательно обнулять TIME.
Итак, на 13 строке мы добыли пиксель текстуры шума одной и второй. Это значение находится в диапазоне от 0.0 до 1.0. При умножении, соответственно, мы остаёмся в этом диапазоне. А при вычитании уже получается от -1.0 до 1.0.
Ещё обращаю внимание: мы здесь берём только один канал текстуры, потому что float.
Дальше наконец мы лезем в текстуру вьюпорта, чтобы добыть из неё цвет пикселя. Нам нужен весь цвет, так что выбираем тип vec4. Вообще, texture возвращает тот тип данных, который мы от неё запросим.
Итак. Мы хотим взять пиксель вьюпорта. Но не тот, который сейчас обрабатывается, а какой-то рядом, чтобы было искажение. То есть, берём SCREEN_UV и сдвигаем на размер искажения. За силу этого сдвига отвечает юниформ distraction_strenght, а за рандомность - полученное в 13 строке depth. Соответственно, некоторые пиксели в правой-верхней части экрана получат UV-координаты больше 1.0 и, таким образом, попадут за пределы текстуры. Эту проблему решает clamp, он возвращает нас из-за пределов текстуры ровно на её границу. Так что несколько пикселей, слишком близких к краю, будут взяты из одного и того же пикселя на краю.
Дальше строчка top_light.
smoothstep(light_start,light_end,depth) - это мы находим число от 0.275 до 0.4 (при дефолтных юниформах), где значение depth (снова 13 строка) определяет, насколько оно близко к 0.4. Умножив на цвет top_color, мы получили линейный сдвиг цвета, который используем ниже.
Послоедняя строчка.
screen_color
tone_color - мы взяли полученный ранее пиксель вьюпорта и окрасили его в цвет тона.
+ top_light - тут мы не просто окрашиваем. При больших зачениях топлайта мы можем вылезти за пределы 1.0 по всем каналам. Тогда пиксель окрасится в белый, только и всего.
Ну и наконец. COLOR = здесь мы присваиваем пикселю на экране то значение, которое насчитали. Какому пикселю? Тому самому, с которым всё это время работали. Напомню, в шейдере мы работаем с одним пикселем, то есть со всеми сразу параллельно. И вот тут-то мы ретёрним его значение.
Вот как-то так.
240 912216
Игры делать лень.
Давайте лучше программистские загадки разгадывать?
Как я сделал пикрелейтеды? Именно, какова реализация?
Ответ завтра.
241 912240
>>12216
Играешься с каким-нибудь name или class_name. Крч с форматом, которым твой класс печатается в строку.
242 912241
>>12240
>>12216
Важное дополнение. Ответы принимаются в виде скрина кода, делающего аналогичное.

И вдогонку вопрос. Будет ли утечка памяти после выполнения этого кода? Впрочем, ответ на этот вопрос ждать смысла нет, поэтому ответ под спойлером.
243 912252
Читайте документацию, пидоры.
страдал 2 дня ради нихуя
244 912255
>>12252
А это между прочим в шапке написано (в новой модной шапке по ссылке).
245 912266
>>12255
Сейчас бы еще шапки читать, когда даже документацию не читаешь.
F93HMPWX0AAkFpa.mp431 Кб, mp4,
614x326, 0:13
246 912278
247 912289
>>12170
Спасибо огромное, анон! Реально помогло вычитания.

И спасибо тебе за объяснение! >>12172 я даже понял почему помогло вычитание.

Добра тебе и храни тебя Хуан!
248 912295
https://godotengine.org/article/maintenance-release-godot-4-1-3/

Обновляйтесь. И делайте игры.
249 912305
>>12289
Кста, можно ещё вот что, забыл ночью написать, хотя думал.
clamp всё равно создаёт артефакты по краям. Но можно и без клампа. Можно vec2(depth) домножать на

>(vec2(1.0) - abs(SCREEN_UV)).


Тогда эффект искажения будет тем менее интенсивен, чем он ближе к краю. А если тут вместо abs(SCREEN_UV) сделать SCREEN_UV * SCREEN_UV, то спад интенсивности будет не такой заметный. Можно вообще pow(abs(SCREEN_UV), n) и поиграться со значениями n.
250 912373
>>12305
Честно говоря, вообще не заметил артефактов, когда тестировал. Но спасибо, попробую! А то вдруг в будущем вылезут проблемы без этого.
251 912377
>>12295

> Обновляйтесь


scoop update godot
252 912403
Пятница вечер, а игры никто не делает.
sage 253 912412
>>12403
Даже на Сахалине ещё не вечер, шиз.
254 912413
>>12412
Пятница НОЧЬ, а игры никто не делает.
1699000954.png91 Кб, 810x455
255 912457
>>12216
А вот и обещанный ответ. Впрочем, всем похуй.
256 912473
>>12457
А я так и знал.
1699022914969.png19 Кб, 744x511
257 912516
Вторая загадка от Михаила из Твери. Что изображено на картинке?
Время пошло.
...
Отвечает Александр Друзь:
258 912533
>>12516

> Что изображено на картинке?


Твое избегание игростроя?
259 912534
>>12516
какой-то двухсвязный список или что-то типа того
260 912578
Сидишь такой, пытаешься понять почему редактирование export переменных не работает, а потом замечаешь что запускаешь сцену1, а редачишь сцену2, блять.
1699039894895.png89 Кб, 717x776
261 912580
>>12534

> какой-то двухсвязный список


Бинго!
Я сделяль на гдскрипте двусвязный зацикленный список. Называю его RingedList. У него есть забавные свойства, например то, что без дополнительных проверок попытка его обхода будет крутиться бесконечно. Ну точнее, до переполнения стека вызовов.

Вот сижу и думаю, как бы его применить? Сделать на его основе загадки с сейфом? Взлом замков?

Вообще, всё это делается на обычных массивах, но почему бы не выябнуться тормозным велосипедным рингедлистом? Ну не игры же делать, в самом-то деле?
>>12533

> Твое избегание игростроя?


Твоё.
262 912583
>>12580

> как бы его применить?


Вообще я плавно подбираюсь к созданию нейросети на гдскрипте. Будет класс нейрон и у него массив синапсов - линков на другие нейроны. И всё это будет многомерным связным списком, в котором сигнал будет уходить вглубь, ветвиться по слоям и обретать сознание, чтобы завоевать мир. Йохохо!
263 912585
>>12583

>завоевать мир


Пусть игру за тебя сделает
264 912586
>>12585
Ну, как вариант.
265 912592
>>12586
Это для тебя единственный вариант
266 912598
Интересно что если сохранить сцену из рантайма, при этом иметь включенным дебаг, то дебаговые меши (коллизии и навигация) тоже сохранятся и перекочуют в не-дебаг.
267 912622
Как бы так реализовать систему событий и скриптинга?
Ничего не нашел в гугле.

Пока что придумал делать блок схему событий во внешнем редакторе, и из нее генерировать класс (простую портянку из функций, ждущих своих сигналов)
1669454930749.png193 Кб, 1920x1080
268 912627
>>12622
Ты имеешь в виду чтобы игрок это делал?
Потому что так то у тебя уже есть гдскрипт и сигналы, лол.

> блок схему событий во внешнем редакторе


Ну вообще есть умельцы которые делают прямо внутри редактора. Что то типа https://godotengine.org/asset-library/asset/1197 Искать по node
269 912628
>>12146
У тебя берется вектор направления между опорной точкой спрайта и опорной точкой цели. Если они на разной высоте, то они и полетят по кратчайшему пути туда.
270 912630
В вебе нельзя же поймать момент выхода из игры? Например если игрок обновил страничку или просто закрыл ее.

MainLoop.NOTIFICATION_WM_QUIT_REQUEST не ловит. Либо не успевает отработать.
271 912631
>>11979
Хуй знает о чем ты, куб создается в полтора нажатия клавиш: + CSGBox.
Либо + MeshInstance, Cube
Либо установкой ассета на прототипирование кубами.
Потому что те, кто ковыряются, должны сначала прочитать доки и посмотреть туториалы, а потом уже включать стрим, чтобы не позориться.
272 912634
>>12630
Скорее всего это не имеет смысла - если начнешь делать сейв или отправлять что-то на сервер, браузер может это прибить. Просто делай свои сейвы регулярно.
Вообще можешь попробовать JS событие https://developer.mozilla.org/en-US/docs/Web/API/Window/beforeunload_event и там вроде можно получить окошко "вы действительно хотите закрыть вкладку?" как в gmail когда что-то не сохранил
Но там официально сказано что это ненадежно, особенно на мобилках.
273 912636
>>12634

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


Да, так и буду. Гениальная идея.
274 912640
>>12627

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



Цепочки событий примерно такие:

1. Поставить npc в точку (x,y)
2. Назначить взаимодействию с этим npc диалог с dialogue_id=666
3. Ждать сигнала о том что диалог прочитан
4. Положить в рюкзак ключ
5. Разблокировать дверь с door_id=420
6. Переместить того npc в (x1, y1)

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

> пикрел


Меня гораздо больше интересует не конкретная реализация, а общие программные принципы.

Я тем или иным способом получил формализованное описание событий, а теперь надо их запустить как-то.

Должна наверное быть какой-то объект, который проходит по этому описанию и выполняет команды?
И как эти события записаны, может быть как (тип,параметры)?

Нашел событие типа X, нашел функцию которая ему соответствует, вызываешь process_event_X(params)

Это я так, просто рассуждаю как может выглядеть система игровых скриптов.

Хочется послушать разные мнения как это можно сделать, или может кто-то знает как это делается в настоящих больших играх, там где программисты большие деньги за это получают.
274 912640
>>12627

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



Цепочки событий примерно такие:

1. Поставить npc в точку (x,y)
2. Назначить взаимодействию с этим npc диалог с dialogue_id=666
3. Ждать сигнала о том что диалог прочитан
4. Положить в рюкзак ключ
5. Разблокировать дверь с door_id=420
6. Переместить того npc в (x1, y1)

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

> пикрел


Меня гораздо больше интересует не конкретная реализация, а общие программные принципы.

Я тем или иным способом получил формализованное описание событий, а теперь надо их запустить как-то.

Должна наверное быть какой-то объект, который проходит по этому описанию и выполняет команды?
И как эти события записаны, может быть как (тип,параметры)?

Нашел событие типа X, нашел функцию которая ему соответствует, вызываешь process_event_X(params)

Это я так, просто рассуждаю как может выглядеть система игровых скриптов.

Хочется послушать разные мнения как это можно сделать, или может кто-то знает как это делается в настоящих больших играх, там где программисты большие деньги за это получают.
275 912642
>>12640
Я делаю нечто похожее, только без диалогов. Мой подход - компоненты ссылающиеся друг на друга. Игрок/НПС проходит по кнопке (возможно невидимой), кнопка при нажатии на себя открывает дверь по NodePath, или мост, или ловушку выдвигает. Сундук при взаимодействии с собой проверяет у взаимодействующего наличие ключа-флага. И так далее. Если делать компоненты похожим образом, то их можно зацепочить вот так по десятку, когда одно открывает другое.

Но у нас возможно разные жанры. Предположу что у тебя point-and-click адвенчура?
276 912645
>>12640
Схема представляет собой конечный автомат / FSM / Finite State Machine
Либо несколько, раз они у тебя такие независимые. Также они могут быть иерархичными (HFSM). То есть стейт машина, содержащая другие стейтмашины.
Дальше тебе нужен паттерн команда. Например поставить нпц в точку, отправить нпц идти в точку. Очевидно что у него есть параметры, например id нпц и x,y
Ждать событий не надо, это происходит само. Надо подписываться на нужные сигналы. Когда сигнал срабатывает, выдается нужная команда.
Как ты хранишь данные, хоть в json, хоть в словарях гдскрипта, хоть рисуешь нодами. Потом они заполняют некую структуру узлов
Что представляет собой такой узел? Это вот то что на картинках DialogueNode, с данными, а стейтмашина находится в одном из них, а по сигналам при соблюдении условий переходит в следующий. Связь между ними ты тоже должен прописать. Вроде в предыдущем треде как раз подобное обсуждали.
Конечно программировать все руками не надо, тебе надо запрограммировать только категории событий.
Что вызывает события? Обычно Area когда в них кто-то заходит или залетает.

Отличие от того, что анон выше написал, видимо, в том, что у него сами объекты реагируют и посылают что-то дальше, в этом варианте - есть главный менеджер, который всех слушает и всеми командует. Редактировать имхо его потом проще.
277 912647
Кстати про диалоги. Чем готовым можно подобное сделать?
https://www.reddit.com/r/godot/comments/17lkm9u/a_rockshooting_cannon/
278 912648
>>12645
Про паттерн команда не все понял. Кто именно выдает команды? Фсм идет по узлам и выдает команды?

Вот дошли до узла где нужно чтобы продвинуться нужно иметь в инвентаре некий предмет, а дальше как этого дождаться? Инвентарь имеет сигнал item_added.emit(item_name)
279 912653
>>12640

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


Компьютер должен угадать, что ты от него хочешь?
280 912654
>>12640

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


Ты начинаешь догадываться о том, о чем я предупреждал еще три года назад, и о чем только сегодня начинают говорить: Создание универсальных редакторов игр было ошибкой. Движок это не редактор, движок это код, ядро. Старые игры программировались следующим образом:
1. На этапе предпродакшена продумывается будущая игра.
2. Пишется или берется со стороны движок этой конкретно игры. Движок-код.
3. На движке-коде игры пишется редактор игры. Этой конкретной игры.
4. Уже на игровом редакторе начинается построение мира, расстановка ассетов и сриптов.
5 6 7 8 ПРОФИТ

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

Просто задумайся, если для твоей игры движок предлагает "бред полный, кучу ручной работы", значит у тебя в организации техпроцесса что-то очень сильно не заладилось. Либо тебе нужен движок-без-редактора (так называемый тулкит) и написание собственного редактора, отвечающего твоему техпроцессу, чтобы тебе было удобно; либо создать аддон в годоте; либо пересмотреть свой подход к девелопу.
281 912673
>>12631
Ну может это ты что-то должен, а тебе ничего не должны, люди пробуют, и годот сразу начинает их бесить своей неюзабельностью. Это наблюдения хуана, ему и пиши что он хуйню пишет
282 912675
>>12673
Ну пусть успокоительное попьют, все топовой юзабельности.
283 912676
>>12675
Тебе то лучше знать, чем разрабу годота, да, клоун? Сам успокоительного попей, успокойся там, никто на годоту не нападает
284 912677
>>12654
Ты выпускал коммерчески успешные игры или просто так пиздишь?
285 912678
>>12648
FSM находится в каком-то состоянии, например WaitDialogEnd.
Когда условия перехода дальше сработали, вызывается функция например transition_to_state(new_state)
new_state берется из текущего, тут могут быть описаны развилки, или просто переход дальше.
Соответственно, там может быть указано что у следующего
TriggerCategory = ItemAdded
Arg = GoldenKey66
Вот тут можно и подписаться, напр.
inventory.item_added.connect(self, onitemadded)
в onitemadded(itemname)
if itemname == Arg: next_state()
next_state() делает всякую очистку transition_to(new_state)
Можно еще подумать насчет шини событий (event bus)
ТОгда все подписываются на нее и сигналы шлют в нее
Может иметь смысл если например квест убить 10 волков, но волки спавнятся по 1 значит сразу всех ты подписать не можешь. Или тебе придется подписывать их в момент спавна.
286 912679
>>12676
Ты буквально нападаешь, клоун.
287 912683
>>12679
Не на годоту, а на тебя дурачка, что ты вылез вообще. Я просто написал про твит хуана, твои пояснения как куб создавать это просто смешно.
288 912684
>>12683
Смешно - это не прочитав документацию как поставить куб, подрубать стрим и опозориться, не справившись с элементарным действием. Вот это смешно. Пусть учатся, материалы в открытом доступе.
Ну и ты видимо не понял смысл твита, да.
289 912688
>>12677

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


>>12654

> На движке-коде игры пишется редактор игры. Этой конкретной игры.


Aurora Engine -> Neverwinter Nights, Ведьмак1
NetImmerse (Creation Engine) -> Morrowind, Fallout3
Doom
Quake
Unreal

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

Из редактора Unreal, ЧСХ, вырос в конечном итоге современный УЕ.

>>12677

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


Ну разумеется, я просто так пизжу.
290 912711
>>12684
Смысл твита в сожалении хуана и намерении добавить кнопку "сделать быстро куб как в юнити, чтобы было заебись", а зачем ты свои визги начал и обвинения пользователей, не зная ситуации, вообще непонятно. Реально таблеток въеби
291 912713
>>12654

>я предупреждал еще три года назад


>Создание универсальных редакторов игр было ошибкой


>>12688

>Ну разумеется, я просто так пизжу.


Сразу видно эксперта гд, уважение
1699088445917.png31 Кб, 160x160
292 912726
>>12713
Спасибо!
293 912745
>>12654

>если для твоей игры движок предлагает "бред полный, кучу ручной работы"


Это не движок предлагает, это юзер движка наткнулся на неподходящее ему решение. В движке нет одного-единственного верного способа сделать Х. Способов - дохуя. Значит надо думать дальше, искать подходящее решение, а не ломиться реализовывать первое попавшееся. Ты же не срешь посреди вагона метро потому что тебе организм так предложил, ты ищешь подходящее решение. А вот если бы твоей целью был перформанс и бунт - ты бы там так и насрал. Хорошо иметь разные способы.
294 912746
>>12745
Ну в общем-то я именно об этом и писал.
295 912747
>>12746
Нет, ты предлагал отказаться от удобного материального, выйти куда-то в астрал и насрать там.
296 912751
>>12747

> Нет, ты предлагал


>>12654

> если для твоей игры движок предлагает "бред полный, кучу ручной работы", значит у тебя в организации техпроцесса что-то очень сильно не заладилось


> либо пересмотреть свой подход к девелопу


>>12745

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


> надо думать дальше, искать подходящее решение



Литералли сейм. Или как там у вас, пригоревших зумеров, говорят?
297 912754
>>12751
Искать внутри движка, потому что движок тебе предлагает еще пару десятков решений. Учитывай контекст.

>В движке нет одного-единственного верного способа сделать Х. Способов - дохуя.

298 912761
>>12754
Учту.
299 912765
>>12761
Вот и умничка.
300 912774
>>12647
Бамп вопросу.
301 912778
Сап годач. Смотрю сейчас туториалы по годоту на англ и столкнулся вот с такой конструкцией отнимания хп у игрока:

var max_health = 4
var health = 4: set = set_health

signal player_died

func set_health(value):
health = clamp(value, 0, max_health)
if health == 0:
emit_signal("player_died")

Понятно, что при получении условно 1 урона health меняется на 3 и далее задействуется func set_health. Но по идее clamp между 0 и 4 должен выбрать наиболее близкое, т.е. 4 и хп не изменится. Но вместо этого оно исправно отнимается. При этом если убрать эту строчку с clamp, то хп не уменьшается вовсе. Как работает эта шайтан херовина? Почему без нее хп не уменьшается? Для изменения health вот такая штука:
Player_stats.health -= damage
302 912779
>>12778
Не знаю твой ли случай, но я хорошо выучил что сеттеры/геттеры не работают изнутри объекта, внутри которого они определены. Бай дизайн.
303 912780
>>12779
Не, у меня то он как раз работает.
Просто не пойму, зачем вот эта конструкция и как именно она работает:
health = clamp(value, 0, max_health)
Если ее можно заменить
health = value

В доке такие примеры:
var a = clamp(-10, -1, 5)
# a is -1
var b = clamp(8.1, 0.9, 5.5)
# b is 5.5

Но как в доке, она не работает
304 912783
>>12778

>по идее clamp между 0 и 4 должен выбрать наиболее близкое, т.е. 4 и хп не изменится.


Кламп это ограничитель, гугли лучше
305 912792
>>12780

>health = clamp(value, 0, max_health)


>Если ее можно заменить


>health = value


Если заменишь, то при отрицательном value не сработает проверка if health == 0
306 912794
>>10967

>Движку не надо считать ускорение


Я нашёл алгоритм, в котором считается ускорение:
https://en.wikipedia.org/wiki/Verlet_integration#Algorithmic_representation

>The Verlet integrator provides good numerical stability, as well as other properties that are important in physical systems such as time reversibility and preservation of the symplectic form on phase space, at no significant additional computational cost over the simple Euler method.


Вкратце, ускорение нужно для сглаживания скорости, чтобы объекты вели себя стабильнее.

Этот метод позволяет двигать объекты по более стабильным и точным траекториям и накладывать стабильные ограничения. Смотря на то, как ведут себя Joint3D, мне кажется, все бы только выиграли от применения этого метода глобально. А то сейчас накладывать ограничения на RigidBody3D смысла практически нет, их будет ломать от рандомных коллизий так, что они успокоиться не могут.

А если бы движок использовал этот метод внутри, осталось бы только сделать API для получения актуального ускорения любого объекта извне.
307 912795
>>12783
Загуглил, ага. Ну так он нахуй тут ненужон получается
>>12792
Можно просто if health <= 0 сделать

Короче, пока юзлес шляпа
308 912806
>>12779

>сеттеры/геттеры не работают изнутри объекта


В 3.x не работают, и это проблема.
В 4.x работают. Сеттеры/геттеры не вызываются только изнутри самих себя, т.е., например:

>var a: int:


>set(value): a = value


>get: return a


Здесь не будет бесконечной рекурсии. В остальных функциях класса доступ к a вызывает сеттер/геттер.

>>12795

>тут ненужон получается


>Можно просто if health <= 0 сделать


>Короче, пока юзлес шляпа


В твоём примере clamp() нужен, чтобы здоровье игрока не выходило за ожидаемые пределы.

Функция clamp() аналогична этому коду:

>func clamp(value, min_value, max_value):


>if value > max_value: return max_value


>elif value < min_value: return min_value


>else: return value



Если мы сделаем так:

>health = health + change


Тогда игрок сможет получить столько здоровья, сколько сможет собрать лечилок; будет продолжать получать урон даже после достижения 0 здоровья.

Поэтому мы делаем так:

>health = clamp(health + change, min_health, max_health)


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

Почему это важно? С лечением очевидно: у игрока сейчас 99/100 здоровья и он использует лечилку на +50, он должен получить +1 до 100, а не +50 до +149.

С нанесением урона ситуация чуть сложнее. Пока игрок способен только умирать, всё ок. Но если, допустим, мы сделали возможность воскреснуть, и она работает как лечилка, дающая +50 здоровья, а игрок получил урон на -75, имея здоровье 5/100, то в результате здоровье было -70 и после воскресения у него -20/100, а не 50/100. Чтобы таких багов не было, мы заранее ограничиваем здоровье допустимыми рамками.

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

А вот чтобы лечилки не уходили впустую и мобы не издевались над трупами нужны другие проверки. Допустим, код игрока проверяет, нужно ли ему брать лечилку перед её использованием; мобы проверяют, жива ли их цель в своей логике поведения, но не заботятся о том, сколько у неё здоровья.
308 912806
>>12779

>сеттеры/геттеры не работают изнутри объекта


В 3.x не работают, и это проблема.
В 4.x работают. Сеттеры/геттеры не вызываются только изнутри самих себя, т.е., например:

>var a: int:


>set(value): a = value


>get: return a


Здесь не будет бесконечной рекурсии. В остальных функциях класса доступ к a вызывает сеттер/геттер.

>>12795

>тут ненужон получается


>Можно просто if health <= 0 сделать


>Короче, пока юзлес шляпа


В твоём примере clamp() нужен, чтобы здоровье игрока не выходило за ожидаемые пределы.

Функция clamp() аналогична этому коду:

>func clamp(value, min_value, max_value):


>if value > max_value: return max_value


>elif value < min_value: return min_value


>else: return value



Если мы сделаем так:

>health = health + change


Тогда игрок сможет получить столько здоровья, сколько сможет собрать лечилок; будет продолжать получать урон даже после достижения 0 здоровья.

Поэтому мы делаем так:

>health = clamp(health + change, min_health, max_health)


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

Почему это важно? С лечением очевидно: у игрока сейчас 99/100 здоровья и он использует лечилку на +50, он должен получить +1 до 100, а не +50 до +149.

С нанесением урона ситуация чуть сложнее. Пока игрок способен только умирать, всё ок. Но если, допустим, мы сделали возможность воскреснуть, и она работает как лечилка, дающая +50 здоровья, а игрок получил урон на -75, имея здоровье 5/100, то в результате здоровье было -70 и после воскресения у него -20/100, а не 50/100. Чтобы таких багов не было, мы заранее ограничиваем здоровье допустимыми рамками.

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

А вот чтобы лечилки не уходили впустую и мобы не издевались над трупами нужны другие проверки. Допустим, код игрока проверяет, нужно ли ему брать лечилку перед её использованием; мобы проверяют, жива ли их цель в своей логике поведения, но не заботятся о том, сколько у неё здоровья.
309 912816
>>11005

>Мне не хватает нормальной Line3D. Чтобы, грубо говоря, трубы делать.


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

Я видел даже решения на шейдерах, без построения специального меша. Натуральная магия...

Даже в 2D универсального решения нет, встроенная нода подходит только для простых применений.
310 912818
>>12647
Буквально Label с percentage visible и Twine easing
311 912820
>>12806
Понял. Спасибо, анон, что разжевал все подробно
312 912822
>>11023

>PhysicalBone2(3)D


>Эйфорию запилить


Для этого нужно настраивать джойнты и чтобы эти джойнты работали стабильно. Иначе даже самый простой, пассивный физический регдолл начинает колбасить по всему миру. Jolt Physics стабильнее встроенной, но тоже не идеален. А у Эйфории весь прикол в симуляции мышц... Так что задолбаешься циферки вписывать в джойнты, чтобы настроить и наблюдать, как всё разлетается по сцене.

Вообще не понимаю, кто все эти люди, которые рекомендуют соло индюкам делать процедурные анимации вместо классических. Они что, садисты?

Всем тем, кто планирует заняться процедурными анимациями: не ведитесь на советы, подумайте несколько раз, ЗАЧЕМ вам эти анимации нужны. Большинство анимаций могут быть классическими, которые многократно легче реализовать, придав им индивидуальность. Во многих случаях игрок вообще разницу не заметит и/или не оценит сотни часов, вложенных в отладку процедурной анимации, чтобы она хотя бы не глючила. Разнообразие? У вас будет точно такой же процедурный хаос, как во множестве других игр с процедурной генерацией. Единственное преимущество - можно генерировать анимации для произвольных скелетов и произвольной геометрии уровня, но это нужно очень специфичным играм, в которых от этого зависит весь геймплей.

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

Алсо, встроенные средства Godot заточены под управление классическими анимациями. Для процедурной анимации придётся в основном изобретать велосипеды вместо использования удобных дизайнерских штучек UI Godot/Blender.
1699117198625.png387 Кб, 503x498
313 912827
Моё лицо после недели кодинга.

... зато я укрепил скиллы.
314 912829
>>12827
Алсо, читаните вот эту статью https://habr.com/ru/articles/148037/
Рикаминдую!
315 912830
>>12818
Как баббл и анимацию сделать я знаю. Хочется более законченного решения. С последовательностью диалогов, с сохранением позиции, с next, с ответами, с реакциями на состояние мира/игрока/нпс.
316 912838
>>12830
Проверь Dialogue Manager примеры https://godotengine.org/asset-library/asset/1207
Там вроде было
317 912841
>>12827

> укрепил скиллы


Фибоначчи в треде.
318 912844
>>11834

>а вы пользуетесь метаданными?


Пока не пользовался, не приходилось как-то.

>if node.has_meta("bar"): foo = node.get_meta("bar")


>if node.get("bar") != null: foo = node.bar


>не вижу принципиальной разницы


Принципиальная разница в том, что в первом случае запрашиваются метаданные. Во втором случае ты запрашиваешь свойство класса, а не метаданные.
https://docs.godotengine.org/en/stable/classes/class_object.html#id1

>Returns the Variant value of the given property. If the property does not exist, this method returns null.


https://docs.godotengine.org/en/stable/classes/class_object.html#class-object-method-get-meta

>Returns the object's metadata value for the given entry name. If the entry does not exist, returns default. If default is null, an error is also generated.



>второй вариант как-то больше контроля имеет.


Наоборот. Вообще сомневаюсь, что get() вернёт тебе метаданные, но если вернёт - как ты поймёшь, что это метаданные, а не свойство класса? А если не вернёт, тогда ты метаданными не пользуешься.

>Для чего они вообще нужны?


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

>Lastly, every object can also contain metadata (data about data). set_meta can be useful to store information that the object itself does not depend on. To keep your code clean, making excessive use of metadata is discouraged.


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

>Есть какие-нибудь живые примеры использования


Читай обсуждение здесь, мне лень цитировать:
https://github.com/godotengine/godot/issues/18591
319 912851
ну да
320 912856

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


Вы заебали тут срач разводить, барины-перебежчики. Займитесь уже чем-нибудь полезным.
321 912862
>>12856
Там было просто упоминание поста Хуана, но ты начал визжать и оскорблять изучающих годот, порось, а сейчас опять визжишь, займись чем-нибудь полезным сам
322 912867
>>12862

>ты


Постера то угадал, шиз? Я вас даже не читал, открывал вкладку, видел нерелейтед кал, которым вы себе сраки чешете, и закрывал.
323 912869
>>12822

>рекомендуют


Шиз штоле? Где ты там в тексте рекомендацию увидел?

>встроенные средства Godot заточены под управление классическими анимациями


В тройке да. В четвёрке скелетная анимация процедурно делается быстрее и легче, чем прежним методом: настраиваешь ИК-цепочки и двигаешь таргеты, всё. К тому же интереснее выглядит при смешивании анимаций.
Пример. Мой персонаж держит в руках ружьё. Вот он побежал, для этого слегка наклонился телом вперёд. В тройке, если я наклоняю тело скелета, то руки, как ноды-дети, наклонятся тоже, а значит уедет и наклон оружия. В четвёрке же концы рук привязаны к таргетам, а таргеты не обязаны быть детьми скелета; я наклоняю туловище, а руки сами по ИК выстраиваются к таргетам.
324 912870
Шизы спок.
pP8fakE48GWeH7H.mp4312 Кб, mp4,
460x816, 0:07
325 912871
>>12867

>Постера то угадал


Не важно, шиз, считайте что я вас обоих остроумно попустил, стыдитесь
326 912872
В тему SphereCast.

Если кратко, Godot предоставляет несколько разных запросов с шейпами. Чтобы сделать "SphereCast", необходимо сделать несколько простых шагов:
1. Создать/добыть где-то шейп. Его можно юзать многократно для разных целей, что очень удобно; например, можно использовать шейп персонажа.
2. Поскольку нам нужно движение, нужно сначала сделать cast_motion(), он вернёт нам две позиции: максимальное движение до столкновения и минимальное движение для столкновения.
3. Если нам нужна дополнительная информация из точки столкновения шейпа, меняем запрос:
3.1. Вычислить новую позицию шейпа, это легко, всего лишь сложить вектор позици с вектором движения, умноженным на число из пункта 2.
3.2. Для получения только контактных точек, достаточно сделать запрос collide_shape().
3.3. Для получения подробной информации о том, с чем конкретно мы столкнулись: intersect_shape().

Если тебе это часто нужно, просто оформляешь в виде функции и обращаешься уже к ней.

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

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

То, что движок возвращает Dictionary вместо объекта, конечно, неоптимально. Думаю, это исправят, т.к. разработчики обратили на это внимание.

Если нужен просто шейпкаст, можно создать ноду, добавить её в сцену и проверять по необходимости. Можно выключить её непрерывное обновление и запрашивать только по необходимости. Главное преимущество этой ноды в том, что её видно в редакторе сцен и при отладочном показе шейпов.
326 912872
В тему SphereCast.

Если кратко, Godot предоставляет несколько разных запросов с шейпами. Чтобы сделать "SphereCast", необходимо сделать несколько простых шагов:
1. Создать/добыть где-то шейп. Его можно юзать многократно для разных целей, что очень удобно; например, можно использовать шейп персонажа.
2. Поскольку нам нужно движение, нужно сначала сделать cast_motion(), он вернёт нам две позиции: максимальное движение до столкновения и минимальное движение для столкновения.
3. Если нам нужна дополнительная информация из точки столкновения шейпа, меняем запрос:
3.1. Вычислить новую позицию шейпа, это легко, всего лишь сложить вектор позици с вектором движения, умноженным на число из пункта 2.
3.2. Для получения только контактных точек, достаточно сделать запрос collide_shape().
3.3. Для получения подробной информации о том, с чем конкретно мы столкнулись: intersect_shape().

Если тебе это часто нужно, просто оформляешь в виде функции и обращаешься уже к ней.

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

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

То, что движок возвращает Dictionary вместо объекта, конечно, неоптимально. Думаю, это исправят, т.к. разработчики обратили на это внимание.

Если нужен просто шейпкаст, можно создать ноду, добавить её в сцену и проверять по необходимости. Можно выключить её непрерывное обновление и запрашивать только по необходимости. Главное преимущество этой ноды в том, что её видно в редакторе сцен и при отладочном показе шейпов.
327 912873
>>12871

>считайте


Да-да, главное таблетки свои прими.
328 912883
>>12872

>Unity в данном случае скрывает от пользователя возможности и генерирует лишнюю информацию даже в самых простых случаях


Ну и пусть генерирует, сишарп тупо мощь. Это же Хуан на каждом углу лечит, что гдскрипт для быстрого прототипирования, и не нужно пердолиться байтоёбить. Где тут быстрое, если вместо одной строчки нужно написать 10? При том что это всё на скрипте, который медленнее в 40 раз. Я всё это время думал наоборот, что на годоте всё это давно сделано удобно, множество функций на все случаи жизни, и за это удобство нужно платить низкой производительностью скрипта, а в итоге хуй, наебал аргентинский пахом. Вы просто неправы в этих оправданиях самодура, нужно признать, что он сам себе противоречит и смириться с неадекватом шизика
329 912890
>>12869

>Где ты там в тексте рекомендацию увидел?


В каком тексте?

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

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

Даже здесь, в /гд/, встречал совет уровня "сделай ХОТЯ БЫ процедурные анимации".

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

>настраиваешь ИК-цепочки


Где? В 2D? Возможно, не проверял. Ты про это?
https://docs.godotengine.org/en/stable/classes/class_skeletonmodificationstack2d.html
В 3D ничего не поменялось - новую систему убрали
из-за каких-то там багов:
https://github.com/godotengine/godot/pull/71137
Тем временем SkeletonIK3D deprecated:
https://github.com/godotengine/godot/pull/65801
По сути встроенного IK для 3D в движке пока нет:
https://github.com/godotengine/godot-proposals/discussions/7468

>Calinou on Aug 9


>>If the stability issues were resolved, would the 3D skeleton modification stack be acceptable?


>Last time I remember, the consensus was that the feature itself needs to be redesigned.


Когда этот редисигн будет, каким он будет - вообще непонятно, по issue/pull request ничего не нахожу.

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

>побежал, для этого слегка наклонился вперёд


>руки наклонятся тоже, уедет и наклон оружия.


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

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

Опять же, ИК - это только малая часть. Упомянутая Эйфория симулирует целого человека с мышцами и повреждениями, а не примитивные ИК-цепочки.

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

А кто-то советует делать это, будучи соло инди...
329 912890
>>12869

>Где ты там в тексте рекомендацию увидел?


В каком тексте?

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

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

Даже здесь, в /гд/, встречал совет уровня "сделай ХОТЯ БЫ процедурные анимации".

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

>настраиваешь ИК-цепочки


Где? В 2D? Возможно, не проверял. Ты про это?
https://docs.godotengine.org/en/stable/classes/class_skeletonmodificationstack2d.html
В 3D ничего не поменялось - новую систему убрали
из-за каких-то там багов:
https://github.com/godotengine/godot/pull/71137
Тем временем SkeletonIK3D deprecated:
https://github.com/godotengine/godot/pull/65801
По сути встроенного IK для 3D в движке пока нет:
https://github.com/godotengine/godot-proposals/discussions/7468

>Calinou on Aug 9


>>If the stability issues were resolved, would the 3D skeleton modification stack be acceptable?


>Last time I remember, the consensus was that the feature itself needs to be redesigned.


Когда этот редисигн будет, каким он будет - вообще непонятно, по issue/pull request ничего не нахожу.

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

>побежал, для этого слегка наклонился вперёд


>руки наклонятся тоже, уедет и наклон оружия.


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

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

Опять же, ИК - это только малая часть. Упомянутая Эйфория симулирует целого человека с мышцами и повреждениями, а не примитивные ИК-цепочки.

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

А кто-то советует делать это, будучи соло инди...
330 912897
>>12890
Блин, ты так расписываешь, индюков делающих 3д в принципе немного, а делающих с анимациями это вообще редкость, максимум какой-нибудь человечек из майнкрафта, какие процедурки
331 912900
Э, что за дискриминация. Я индюк и я делаю в 3д. С капсулами вместо моделек.
332 912904
>>12883

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


Да. Но с учётом внутренностей движка. Для говнокодинга можно было любой готовый ЯП прикрутить, вроде JavaScript, AngelScript или Lua.

>сишарп тупо мощь


C# - тупо проприетарная библиотека для создания программы, выглядящей в стиле C++, работающей медленнее программы на C++, и имеющей меньше кроссплатформенных возможностей. Вся суть C# - переманить фирмы с Java на продукт от Microsoft.

Никогда не испытывал необходимости в C#, а если оптимизировать код - то уж точно не на C#.

>на скрипте, который медленнее в 40 раз


Только когда тебе нужно брутфорсить числа. Для брутфорсинга нужно модуль на C++ написать, а не говнокодить на языке для скриптов.

>множество функций на все случаи жизни


За этим тебе нужно скачать 40 Гб UE5, там и правда множество лишних функций на все случаи, которые никогда в твоей жизни не произойдут. Философия разработки Godot стремится охватить широкую аудиторию без написания функций, которые 99% аудитории никогда не понадобятся.

Вот я давно движком пользуюсь в 3D, никогда не испытывал острой необходимости в "SphereCast". Даже обычные лучи редко нужны были.
333 912909
>>12904
Очевидно что здесь сравнение идет только между юнити и годотом, как только ты плюсы начал приплетать и анриал это сразу ты расписался в собственном бессилии.
Для чего существует функция создать шейп? Избыточно пиздец, ну импортируй модель и все, зачем гдскриптю засорять. Годотька уже разбух от излишков, напишите чтобы удалили эти цирклы и сферы, а то мешают игру делать, глаза мозолят
334 912911
>>12897

>индюков делающих 3д в принципе немного


Достаточно, чтобы упоминать "в 2D", когда речь идёт об универсальном движке с 3D графикой.

>а делающих с анимациями это вообще редкость


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

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


Забавно, но модели в Майнкрафте вроде как раз процедурно анимируют. Часто замечал, что такое сверхлоуполи чаще анимируют кодом.

Если нужно что-то примитивное, то кодом описать будет несложно. Типа движения по синусоиде. Но для такого физические кости скелету не нужны.
335 912914
>>12911

>Достаточно


Ну назови игры с доски где юзают 3д модели со своими анимациями
336 912916
>>12883
Давай-ка попустись, анон. Попарься в бане. Оформил тебе заявку.
337 912920
>>12909

>плюсы начал приплетать


Это ты начал про производительность, я говорил только про гибкость кода. Или хочешь несколько десятков функций типа sphere_cast, rectangle_cast, triangle_cast, pyramid_cast, cylinder_cast, teapot_cast, susanne_cast, earth_globe_cast и т.д.?

>Для чего существует функция создать шейп?


Чтобы потом поместить этот шейп в физическое тело, в зону-датчик Area, или сделать тот же "каст".

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


Тогда у тебя игра тормозить будет из-за того, что физическая модель избыточна. Даже PhysX не следует перегружать лишним мусором. Для этого существуют эти "шейпы" - это не обычные меши, а особые фигуры, оптимизированные для физики.

Подробнее читай в документации:
https://docs.godotengine.org/en/stable/tutorials/physics/collision_shapes_3d.html
https://docs.godotengine.org/en/stable/tutorials/physics/collision_shapes_2d.html
image.png499 Кб, 1957x1747
338 912924
>>12920

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


Годот же очень заботится о производительности да? Я вот на юнити 40к рейкастов до просадки фпс запускаю, а на годоти 3к, почему так?

>Или хочешь несколько десятков функций типа sphere_cast, rectangle_cast, triangle_cast, pyramid_cast, cylinder_cast, teapot_cast, susanne_cast, earth_globe_cast и т.д.?


Ой, как же юнитя со своими бокскаст, сферкаст, рейкаст... Ну тупые да? Только ты умный с хуаном ни лишней строчки
339 912929
>>12924

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


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

>40к рейкастов до просадки фпс


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

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

>юнитя со своими бокскаст


Юнити не пытаются вжать в ~50-100 Мб редактора и у них нет встроенного скриптового языка, куда все эти API нужно делать доступными, и вроде бы у них нет своего аналога GDExtension.
340 912930
>>12924

>3к, почему так?


Насколько я понял, это из-за Dictionary.

Уже обсуждали с ключевыми разработчиками.

Ответ Хуана:
https://gist.github.com/reduz/cb05fe96079e46785f08a79ec3b0ef21

>The problem is that, at the C++ level, this function takes a struct pointer for performance. But at the language binding API this is difficult to expose properly. This is very old code (dating to the opensourcing of Godot) and a Dictionary was hacked-in to use temporarily until something better is found. Of course, other stuff was more prioritary and very few games need thousands of raycasts, so pretty much nobody complained. Still, there is a recently open proposal to discuss more efficient binding of these types of functions.

341 912935
>>12930

>Ответ Хуана:


Да у вас с хуаном на все есть ответы, по ходу весь путь годота состоит из идеальных решений, на всё какие-то отговорки, ни шагу назад, ни лишней строчки врагу
342 912938
>>12935

>весь путь годота состоит из идеальных решений, на всё какие-то отговорки, ни шагу назад


Всё так, производительность на уровне C будет:
https://github.com/godotengine/godot-proposals/issues/7329

>FlatArrays are a special case of struct array that allocate everything contiguous in memory, they are meant for performance only scenarios. Will describe how they work later on, but when this is used together with typed code, performance should increase very significantly. In fact, when at some point GDScript gets a JIT/AOT VM, this should be near C performance.


Так победим C#.
343 912942
>>12938

> In fact, when at some point GDScript gets a JIT/AOT VM, this should be near C performance.


Этого не будет в ближайшие 5 лет, там есть большой тред с обсуждением jit/aot, так ни к чему и не пришли. Пару лет будут рожать решение, потом еще пару лет Хуан будет в голове воплощать, потом уже может что-то высрет
345 912949
>>12890

>В каком тексте?


В том тексте, на который ты отвечал. Проследи цепочку ответов выше по треду.

>Разве это неправильно?


Да, это неправильно. Если я держу в руках предмет (например, кружку с чаем) и стремлюсь сохранить его положение в пространстве, я буду делать это, независимо от наклона моего тела, например. Тем более если это оружие, у которого надо не сбить прицел.

>Где? В 2D?


Ну, вообще да. Про то, что

>В 3D ничего не поменялось - новую систему убрали


я вообще не в курсе.
Ну, как убрали, так допилят и вернут. Почитал обсуждение, там вопросы скорее к недопиленности четвёрки, чем к самому факту ИК в 3Д.
346 912950
Ну что, как ваши игры? Сделали уже? Я через недельку планирую выкладывать свой прототип на итч и в дискорд закину, оценю фидбек.
347 913081
>>12938

> Так победим C#


ИМХО, вообще не нужно было побеждать что-либо. Нужно было с самого начала проектировать транспилер (транслирующий компилятор). Пользователь пишет на гдскрипте, а на выходе компилируется с++.
И всё. Проблем не было бы вообще. Сразу искаробки была бы производительность крестов, плюс, можно было бы в гдскрипт завезти ключевое слово что-то вроде embed {} с блоком чистого с++ кода, который идёт на выход без обработки транспилером. Плюс, промежуточные файлы складывались бы в отдельную папочку и можно было бы подключить к ноде промежуточный код на сях, отбросить предварительно написанный гдскрипт и далее уже допиливать код на сях, уходя в дебри байтоёбства и указателей.

Вообще не вижу помех, почему так нельзя было сделать с самого начала? Возможно, конечно это мой уровень даннинга-крюгера не позволяет мне увидеть фундаментальные помехи реализации вышеописанного.
348 913083
Подскажите вот что. Как получить имя инстанса? Есть сцена Health. Я прикрепляю ее к НПС, называю ее NPCHealth. Внутри сцены Health делаю print(get_name()), вижу имя Health. Как получить то имя, которое я установил в родительской сцене, то есть NPCHealth?
349 913084
>>13081

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


Ну хоть это ты понимаешь
350 913086
>>13084
Я недавно ознакомился с LLVM и реально не понимаю, почему продолжают пилить какие-то велосипедные байт-код недокомпиляторы, когда можно запилить полноценный компилируемый язык. Можно было бы запилить компилятор гдскрипта в нативную либу, которая прозрачно для пользователя подключается к запускаемому проекту. Что им помешало это сделать?
351 913089
>>13086
Спроси здесь >>12944
352 913106
>>13089
Вау. Это литералли то что я написал/предложил выше. Паямо сам хуан предлагает, как один из вариантов, подключить внешний компилятор, который будет при запуске обновлять либу со скомпилированными скриптами. Хуан пишет, что это может быть хлопотно. Но позвольте. Это не хлопотнее, чем подключать ручками rcedit и fbx2gltf в настройках редактора. Делаешь один раз и получаешь нативизированный гдскрипт искаропки.

Я - за.
353 913107
>>13106

>Я - за.


А вот хуй тебе, 5-10 лет жди
354 913109
>>13106

>Я - за.


Ну все, Хуан и все остальные побежали делать, раз ты за.
355 913110
>>13107

> жди


Йеп. Это Годот!
356 913111
>>13110
Берешь и делаешь, и открываешь пулл реквест, и обсуждаешь с разработчиками. Опенсорс же. Но ты не можешь или не хочешь, а вот сренькать на харкаче - можешь и хочешь. Даже обсуждаешь не там, где тебя могут услышать люди, способные что-то реализовать, а здесь. Показательно это все конечно.
1699197094777.mp416,6 Мб, mp4,
640x360, 3:22
357 913113
>>13111

> Берешь и делаешь


Зорплату плоти.
>>13107

> жди


Подождём...
358 913115
>>13113
А за размазывания соплей по двачу 24/7 тебе конечно зарплату платят, да.

>>13114 (Del)
Ну вот и все. Не вижу смысла тогда вникать в твои посты. Они пустые.
359 913117
>>13115

> размазывания соплей по двачу 24/7


Я ващето размазываю по двачу многомерные циклические ссылочные списки.
360 913118
>>13115

>Они пустые.


Да, иди про ecs посрись в движкосрач, пердолик.
361 913120
>>13117
А вот ещё, зацени.
362 913122
>>13120
Как же ты ебошишь. Наверное, у тебя будет невероятная игра
363 913123
>>13122
Вселенная-наоборот с толщеходами.
А это будет покер-наоборот с толщеколодой.
364 913205
>>13114 (Del)
Ты наркоман. Игры делай, а не мышкой возякай.
365 913229
https://github.com/blackears/cyclopsLevelBuilder/releases
Годный билдер уровней, если кто не знал о таком
366 913233
>>13232 (Del)
От кого ты ожидаешь чтобы тебе сделали, нарк? От местных анонов? Или ты думаешь Хуан тут сидит? Пиздуй на гитхаб и открывай issue.

И нахуй вы вообще кормите этого залетного движкосрачерского дебича с его "годотьки зделойте мне я хочю а вот в юните-то давно есть". Он половину треда уже засрал, блядь.
367 913239
>>13237 (Del)
Я тебе пишу чтобы ты прекращал движкосрач на весь тред разводить. И я каждый твой пост буду репортить. Уебывай в тред для движкосрача, либо уебывай на гитхаб и убеждай тех, кто может сделать твою хотелку, либо сам ее сделай. Так что лови репорт.
368 913252
Анимирую я, значит, аниматором разные свойства ModificationStack'а в скелете. И вроде даже работает. А потом выясняется, что вообще так лучше не делать, и даже движок не предусмотрел прямого обращения к стаку, а надо делать get_modification_stack, менять полученное, а потом set_modification_stack.
Как-то это слишком заёбисто, на мой взгляд. Но лучшего способа флипать скелет по горизонтали я пока не нашёл. Ну, то есть, можно как раньше через анимейшонплеер, но мало ли что от такого обращения поломается.
369 913258
>>13252

> Как-то это слишком заёбисто, на мой взгляд.


Один раз сделай переменную mod_stack : set = set_modification_stack, get = get_modification_stack и обращайся к ней через self.mod_stack. Делов-то.
image.png77 Кб, 660x585
370 913298
Блядь, почему? С другими типами узлов работает нормально, но не конкретно с этим KinematicBody2D (Cat).

System.InvalidCastException: Specified cast is not valid.
<Ошибка C++> Unhandled exception
<Исходный код C++>:0
<Трассировка стека>:0 @ ()
PackedSceneExtensions.cs:20 @ Cat Godot.PackedScene.Instance<Cat >(Godot.PackedScene+GenEditState )()
Main2.cs:26 @ void Main2.OnButtonPressed()()
371 913305
>>13298
Техническая поддержка 3 версии ИТТ закончилась в августе. Сорян.
372 913308
>>13305
Чего? Впереди еще релиз 3.6
373 913333
>>13305
Не выдумывай.
374 913366
Годаны, два нубских вопроса по твинам в четвёрке.
1. Пишут, что твин надо создавать непосредственно перед использованием. А вот если я захочу его прервать, мне надо где-то хранить данные о нём. Что будет, если я сделаю foo = create_tween() до того, как предыдущий твин foo отработал? Он ведь не останется висеть в памяти, а самоудалится сразу же, как только отработает?
2. Что будет, если я буду твинить один и тот же параметр? Типа, сначала create_tween().tween_property(bar, "rotation", PI, 10.0), а через секунду create_tween().tween_property(bar, "rotation", 0.0, 1.0) - что произойдёт с твинами? Второй отменит первый? Они наложатся? Первый удалится после запуска второго? Будет утечка памяти, мой компьютер взорвётся?
375 913372
>>12598
Продолжаю делиться наблюдениями. Если сохранить сцену из рантайма, проставив рекурсивно всем детям овнера, и сохранить через ресурс сейвер в .tscn, то по некой магической причине дерево нод потеряет детей после определенной глубины. Тогад как сохраняя в бинарный формат, в .scn, все ок.

>>13366
Я использую так
var tween
if tween: tween.kill()
tween = create_tween()
tween.tween_property
376 913390
>>13372
А я вот чёт подозреваю, что это излишне. Твинил свойства так и эдак, каждый раз создавая новый твин - всегда при запуске нового двина старый просто прекращался; зато килл давал разные визуальные баги, на один кадр анимация улетала в позу отдыха.
Как я понял, где-то в дебрях движка есть глобальная таблица всех твинящихся стрингнеймов, а это всего лишь интерфейс к ней. Но пока не стопроцентно уверен.

Посоны, а в чём может быть проблема? В анимации есть воспроизведение звука, при проигрывании через АнимейшонПлеер звук играет; включаю АнимейшонТри, та же самая анимация - звука нет.
377 913391
>>13390
А всё, я дебил, на адде, который прямо перед выходом из дерева, была включена фильтрация.
378 913400
А что если делать звуки прямо в игре? Есть что-нибудь для этого? Хочу одну строчку кода, типа play_sound(beep, power, length, ...) и она мне пищит. Насколько разъебет уши такой подход?
379 913413
>>13333
В этом треде пацаны угорают по четверке, нодам и сценам. Только молодость! Только четвёрка! Только хардкор! 412!
381 913445
>>13414
Нихуя себе.
382 913461
>>12890

>Создаётся впечатление, будто десятки часов отлаживать математически сложный код проще, чем подвигать несколько костей (буквально 2-3) в блендере и переимпортировать модельку.



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

Я веду к тому, что гибрид статической анимации с процедурной был бы и красивее и проще. Можно задать основному телу статическую анимацию, а конечностям -- процедурные. И если персонажу прилетает бочка под ноги, они получают стан и отлипают от земли, отключают выравнивание тела и персонаж шмякается на землю, словно он процедурный. Хотя туловище всё ещё статично и поменялся лишь угол, конечностям включился рэгдолл и выглядит это в итоге близко к гта 4 и 5, но гораздо дешевле, чем учить персонажа держать баланс, и настраивать его так, чтобы он не падал от пинка под зад или пули в ногу, но падал от бочки, да прилетающей не по касательной

Костыли -- лучшее средство оптимизации человекочасов

эйфория кст тоже далеко не идеальна, и костыли могли бы сделать персонажей менее кукольными
383 913495
$AnimationPlayer.play("one")
$AnimationPlayer.play("two")

Как запустить вторую анимацию только после того, как первая отработала?
384 913497
>>13495
yield($AnimationPlayer, "animation_finished")

Сам спросил, сам ответил.
385 913498
>>13298
В созданном по новой проекте все заработало. Видимо какая-то локальная хуйня приключилась.
подождём.jpg11 Кб, 350x500
386 913549
>>12942

>Этого не будет в ближайшие 5 лет


>Пару лет будут рожать решение


>потом еще пару лет


Ты куда-то торопишься?

>>13081

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


+15 минут на каждый запуск проекта после изменения всего лишь одной строчки одного скрипта. Доволен?

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


Единственное преимущество - скорость рантайма. В остальном сплошные недостатки.

Киллер-фича Godot в том, что GDScript запускается сразу после нажатия F5/F6 в редакторе. Этап компиляции C++ убивает эту фичу.
1699371756376.png49 Кб, 636x254
387 913552
Добрался таки до своего скринсейвера и сделал ему многооконность. Да, у меня много мониторов.

И подумал тут. А мы теперь можем для многомониторных господ делать игры, в которых инвентарь, карта и т.п. могут выводиться на отдельный монитор.
388 913559
>>13552
Или нейрогенерацию Годетты, презрительно поглядывающую на ноукодера.
389 913564
>>12949

>Если я держу в руках предмет (например, кружку с чаем) и стремлюсь сохранить его положение в пространстве, я буду делать это, независимо от наклона моего тела, например.


Ты точно человек? Попробуй БЕЖАТЬ с кружкой чая. Расплескаешь 100%. Если твоя задача - сохранить чай в кружке, ты будешь идти очень медленно, аккуратно сохраняя положение тела в пространстве.

>Тем более если это оружие, у которого надо не сбить прицел.


ИРЛ никто не стреляет прицельно в движении. Как-то случайно изучал эту тему. В движении прицельность стрельбы ЗНАЧИТЕЛЬНО ухудшается. А если ты побежал настолько быстро, что вынужден наклонить тело вперёд, то максимум, что ты можешь сделать с оружием - выстрелить "куда-то туда" с целью психологического давления на противника, чтобы тот не высовывался из укрытия. Попасть в цель ты не сможешь, но звуки выстрелов как минимум напугают врага и дадут тебе время занять новую позицию для прицельной стрельбы из НЕПОДВИЖНОГО состояния.

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

ИМХО, если твоя игра целит в реализм, то персонаж, стреляющий прицельно на бегу с согнутой вперёд спиной, будет выглядеть как минимум комично.
390 913566
>>13495

>$AnimationPlayer.play("one")


>$AnimationPlayer.play("two")


Не изобретай велосипед, всё уже есть.
https://docs.godotengine.org/en/stable/tutorials/animation/animation_tree.html#state-machine-travel
391 913568
>>13566
Лишняя сущность.
392 913569
>>13390
Нашёл:

>You should avoid using more than one Tween per object's property. If two or more tweens animate one property at the same time, the last one created will take priority and assign the final value. If you want to interrupt and restart an animation, consider assigning the Tween to a variable


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

>>13564
Ну, допустим, смотря как бежать и прочая. Но тут другое.
Сначала я устраняю болтанку насколько могу. То есть, делаю персонажа идеально точным. А поверх этого добавляю разброс, который уже могу контролировать сам, не полагаясь на анимации. ИЧХ, так я могу сделать этот разброс действительно рандомным, тогда как поведение анимации детерминировано.
В игре, не забывай, главное геймплей, а не реализм.
393 913570
>>13559
Или котировки крипты в реалтайме.
394 913575
>>13461

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


Потому что регдолл состоит из нескольких RigidBody, связанных между собой через Joint: физический движок моделирует движение каждой части тела как независимого тела, но с учётом ограничений на расстояние между ними. Когда игра спавнит регдолл возле стены, часть этих физических тел может оказаться с другой стороны физической коллизии стены, из-за чего физический движок тщетно пытается пропихнуть часть регдолла сквозь неподвижную (StaticBody) стену. Обычно это ведёт к тому, что регдолл застревает рукой/ногой в стене и трясётся, но в худшем случае движок в попытке удовлетворить систему ограничений может нарастить огромный импульс, который отправит регдолл в полёт.

>А рэгдолл -- это полностью процедурная анимация, хоть и крайне примитивная.


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

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


Если ты хочешь, чтобы персонаж не проваливался в стену при смерти, то тебе достаточно сделать однократную проверку безопасной позиции, куда этот персонаж может упасть. Для этого не нужен регдолл от слова совсем, у регдолла другая задача: заставить руки и ноги реагировать на окружающие предметы, будто это конечности тряпичной куклы (ragdoll = тряпичная кукла).

>гибрид статической анимации с процедурной был бы и красивее и проще


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

>если персонажу прилетает бочка под ноги, они получают стан и отлипают от земли


Проблема в том, что ты замучаешься настраивать физику ног так, чтобы они не ломали коленки, не скручивались, не застревали в узких местах, не проваливались в пол и т.д. А результат? Оценит ли игрок результат твоих трудов? Кто реально обращает внимание на ноги персонажа и тем более критикует игру за эти ноги? Во многих играх даже лестницы ненастоящие, там тупо наклонная поверхность вместо ступенек, и это в ААА играх. Но игроки не хейтят игру за то, что у персонажа ноги висят над ступеньками. А ты (и другие) предлагаешь соло инди убить кучу времени и сил на то, на что ААА-студии даже не пытаются выделять средства из многомиллионных бюджетов и людей из многотысячных команд.

Тут крайне важен ответ на вопрос: что игрок получит от данной фичи? Как это влияет на геймплей? Если это не влияет на геймплей, то как это влияет на графику, сюжет, восприятие игры? Оправдает ли это влияние затраты на разработку фичи? И т.д.

Конечная цель - сделать игру, в которую игроки будут с удовольствием играть, а не идеально симулировать конечности персонажа.
394 913575
>>13461

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


Потому что регдолл состоит из нескольких RigidBody, связанных между собой через Joint: физический движок моделирует движение каждой части тела как независимого тела, но с учётом ограничений на расстояние между ними. Когда игра спавнит регдолл возле стены, часть этих физических тел может оказаться с другой стороны физической коллизии стены, из-за чего физический движок тщетно пытается пропихнуть часть регдолла сквозь неподвижную (StaticBody) стену. Обычно это ведёт к тому, что регдолл застревает рукой/ногой в стене и трясётся, но в худшем случае движок в попытке удовлетворить систему ограничений может нарастить огромный импульс, который отправит регдолл в полёт.

>А рэгдолл -- это полностью процедурная анимация, хоть и крайне примитивная.


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

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


Если ты хочешь, чтобы персонаж не проваливался в стену при смерти, то тебе достаточно сделать однократную проверку безопасной позиции, куда этот персонаж может упасть. Для этого не нужен регдолл от слова совсем, у регдолла другая задача: заставить руки и ноги реагировать на окружающие предметы, будто это конечности тряпичной куклы (ragdoll = тряпичная кукла).

>гибрид статической анимации с процедурной был бы и красивее и проще


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

>если персонажу прилетает бочка под ноги, они получают стан и отлипают от земли


Проблема в том, что ты замучаешься настраивать физику ног так, чтобы они не ломали коленки, не скручивались, не застревали в узких местах, не проваливались в пол и т.д. А результат? Оценит ли игрок результат твоих трудов? Кто реально обращает внимание на ноги персонажа и тем более критикует игру за эти ноги? Во многих играх даже лестницы ненастоящие, там тупо наклонная поверхность вместо ступенек, и это в ААА играх. Но игроки не хейтят игру за то, что у персонажа ноги висят над ступеньками. А ты (и другие) предлагаешь соло инди убить кучу времени и сил на то, на что ААА-студии даже не пытаются выделять средства из многомиллионных бюджетов и людей из многотысячных команд.

Тут крайне важен ответ на вопрос: что игрок получит от данной фичи? Как это влияет на геймплей? Если это не влияет на геймплей, то как это влияет на графику, сюжет, восприятие игры? Оправдает ли это влияние затраты на разработку фичи? И т.д.

Конечная цель - сделать игру, в которую игроки будут с удовольствием играть, а не идеально симулировать конечности персонажа.
395 913595

>Godot 4.2 beta 5 is out


Сун, годоти, сун
396 913601
>>13575

>Кто реально обращает внимание на ноги персонажа и тем более критикует игру за эти ноги?


Футфетишисты.
1699387904110.webm9,7 Мб, webm,
720x480, 1:45
397 913606
398 913625
Делайте игры. Прямо сейчас.
1676515237939.png2,1 Мб, 1024x1024
399 913627
>>13625
Уже считай половина сделана, осталось разрезать на спрайты.
400 913636
>>13627
Неблохо, тоходевочки даже узнаваемы

Что за модель/промт?
401 913667
>>13636
Бинговская. Слева-внизу лого висит.
402 913678
Чем внутри годота можно пользоваться чтобы заметки делать?
1699442206859.png67 Кб, 1184x689
403 913680
>>13678
Попробовать пикрелейтеды?

А может лучше хуярить комментами прямо в код?
404 913683
>>13680
Попробовал уже. Первая добавляет лишнюю вкладку рядом с импортом - вкладок в годоте и так завал. Вторая как я понял для игры, не для редактора. Третья по сценам. Последняя тоже вкладковая. Хочу просто текстовый файл с форматированием/подсветкой, как код но не код. Поддержку маркдауна так и не завезли?
405 913687
>>13683
Сами завезите.

> Кто? Я?

image.png425 Кб, 1280x720
407 913714
Dev snapshot: Godot 4.2 beta 5
https://godotengine.org/article/dev-snapshot-godot-4-2-beta-5/

Скоро.......
408 913715
Кстати в перекат можно добавить ссылку на Ютуп канал, там недавно вроде конференция была
https://www.youtube.com/@GodotEngineOfficial/videos
409 913716
>>13705
https://github.com/fenix-hub/godot-engine.file-editor
Еще один. Побыстрей бы они ассет стор нормальный сделали, в этом хер чего найдешь.
learn how to make games.jpg76 Кб, 527x499
410 913942
Игры делоете?

Я потерял мотивацию. Снова.
411 913944
>>13942

>Я потерял мотивацию


ну так ты небось платформер очередной хотел сделать или еще какую хуйню банальную 100500ую. Конечно твое подсознание понимает заранее, что даже если ты прям внаутре это сделаешь и нигде не проебешься, то получится очередной кал говна за 20р в стиме, который 1,5 мимокрока откроют, кекнут, и удалят нах.
Садись писать игру мечты, забудь о комерции и дедтаймах, только на это будет реальная, живая мотивация. Всё остальное суходрочка и проебывания жизни в никуда.
412 913945
>>13678

>чтобы заметки делать?


Зачем именно в Godot? Для каких именно заметок ты хочешь это использовать? Комментарии к сценам/нодам? Есть специальное поле:
https://docs.godotengine.org/en/stable/classes/class_node.html#class-node-property-editor-description
Документация по коду? Есть такое: >>908655 →

>>13683

>Хочу просто текстовый файл


Пиши прямо в редакторе кода, только в .txt-файл.

>с форматированием/подсветкой, как код но не код


>Поддержку маркдауна так и не завезли?


Зачем это всё в редакторе игровых сцен? Скачай специализированное ПО и не перегружай редактор васянскими плагинами для лишних украшательств.

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

Как по мне, интерфейс Godot и без того избыточен. Ещё далеко до Blender, но уже не минимализм.
413 913948
>>13942

>Игры делоете?


Делою. Она маленькая, так что любой прогресс ощущается как прогресс и приближение в релизу. Идей куча, мотивация есть, слот в Стиме заготовлен. Интереса у людей правда пока 0, но я толком пиар и не начал, кроме пары темок с логами разработки.
414 913953
Три Дэ на годоте оче сложное? Нужны костыли? Хочу пилить простенький слэшер, не могу определиться с двиглом.
415 913956
>>13953
Оно простое, если нужна простая картинка. Вот вообще очень простое.
Проблемы начнутся если захочется карсивых теней, запекания цвета, каких то постпроцесс эффектов вроде обводки.
Костыли нужны бывают.
416 913957
>>13953
Мне тридэ оказалось проще чем двадэ. В 2д со скалированием и зашакаливанием ебаться, со слоями, с z-сортировкой, тени опять же.
417 913960
>>13942
Сейм, но делал игру мечты, в итоге загнался и понял что она скорее всего никому не будет интересна как и оказалось и хуй знает как в случае условного успеха и какой-то материальной поддержки идеи снять донатики, ну и вкинул кривую но с конкретными задачами версию на итч и яндекс
image.png65 Кб, 976x323
418 913978
Что за хуйня сегодня в гугл плее появилась? Аккаунт давно подтвержден, на нем выложено 4 игры. Выберете себе дедлайн, ну охуеть вообще.

Вылезло у кого подобное?
419 913984
>>13942
Я делаю игры и сразу в них играю сам. Никуда не публикую. Никому не показываю. Охуительный план, надёжный, как швейцарские часы.
420 913985
>>13978
Я бы мог сказать, что это, но меня забанят за политоту. Так что оформи свой вопрос тредом в ньюсаче (под видом новости "гугл плей ввёл дедлайны"), там тебе отвечу.
421 913986
>>13985
У меня не РФ, так что можешь отвечать тут.
422 913990
>>13986
Уж поверь моему опыту, я не могу отвечать тут.
423 913994
>>13990
Есть мнение что ты просто не знаешь.
grapnel.mp414,2 Мб, mp4,
1280x600, 2:00
424 913996
>>13944

>ну так ты небось платформер очередной хотел сделать


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

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


С годами понял, нет у меня никакой "игры мечты". По играм у меня часто бывают мимолётные фантазии уровня "было бы круто поиграть в такую игру" (часто на основе того, во что я недавно играл), но такое обычно либо тяжело реализовать, либо вообще невозможно, а если даже легко сделать - надоедает спустя день/неделю. Поэтому у меня куча идей/проектов, которые я записал/начал делать, а потом забросил и забыл. К некоторым я иногда пытаюсь вернуться, но потом снова бросаю.
425 913998
>>13986

> У меня не РФ


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

> var by_ref = {"value" : 42}


...

> func deal_something(data): data.value += 1


...

> deal_something(by_ref)


> print(by_ref.value) # напечатает 43

426 913999
>>13996

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



Литералли ми!
Поэтому я забил на игры и делаю проги, используя годот как удобное ИДЕ с удобным лично мне ГУИ-фронтендом.
427 914000
>>13999

> делаю проги


Тем более в четвёрке запилили многооконность. Вот бы ещё сделали оконный рендер, без видеокарты вовсе, чтобы на любой встройке запускалось, разумеется, никаких шейдеров и т.п.
428 914009
Пытаюсь экспортировать проект. Годо просит с меня шаблоны экспорта. При попытке скачать автоматически загрузка постоянно прерывается. Вопрос: где взять файлы? Гугл выдает просто доки.
image.png1 Кб, 106x33
429 914014
>>14009

>шаблоны экспорта


Ничеси, хули тут так много
430 914015
>>14014
Подожди когда под релиз андроида собирать начнешь. У меня игра билдовых зависимостей 1.5г натащила, а выдала в итоге бинарник 40мб.
image.png46 Кб, 573x521
431 914016
>>14009

>где взять файлы? Гугл выдает просто доки.


https://godotengine.org/download/windows/
По годоту всё как-то плохо гуглится, происки врагов геймдева
>>14015
На виндовсе почти пустой проект 65мб получился
image.png602 Кб, 820x740
432 914024
Голова устарела, обновлять не хотят
433 914027
>>14016
Спасибо большое!
434 914030
>>14024
Голова ок, ей фейслифт нужен. Вариантов была уйма. Основной косяк текущего лого - глаза.
435 914031
>>14030
Мне кажется, если бы кто-нибудь нарисовал действительно что-то годное, то легко бы поменяли. Не рисует
436 914032
>>14031
https://www.reddit.com/r/godot/comments/16dhvbf/ive_created_30_splash_screens_for_godot_theyre/

Идешь туда же, ищешь по "лого", и находишь еще десятка два похожих постов.
437 914033
>>13996
Хуясе у неё ляхи

>>14024
Лично мне не нравится, что у четвёрки никак не поменяли иконку. Хоть как-нибудь. Я щас поочерёдно открываю тройку для поддержки старого проекта и четвёрку для разработки нового. Очень неудобно их различать визуально.
438 914034
>>14024
У меня лого годоти вызывает экзистенциальный ужас, так что я поддерживаю.
439 914035
>>14034
Ты просто боишься смотреть людям в глаза.
440 914036
>>13996
Можешь посмотреть Umihara Kawase. Там похожий геймплей.
441 914041
>>13996
Такое приятное ощущение, когда твой персонаж на экране наконец-то оживает...

>>14031

>если бы кто-нибудь нарисовал действительно что-то годное


Да ладно, и так сойдёт.

>>14033

>Хуясе у неё ляхи


Она худенькая. (˵ ͡° ͜ʖ ͡°˵)

>у четвёрки никак не поменяли иконку


>Я щас поочерёдно открываю тройку для поддержки старого проекта и четвёрку для разработки нового. Очень неудобно их различать визуально.


Сделай ярлыки со своими иконками (в Windows 10 отображаются на панели задач после запуска).

>>14036

>Можешь посмотреть Umihara Kawase.


Спасибо, не знал, прикольная серия игр.
442 914042
>>14032
Интересные вариант, есть где развернуться
443 914065
>>14041
Походка как у робота из батлтэк
1699611466546.jpeg185 Кб, 900x900
444 914070
>>14041
Помощь с проектом нужна?
Контакты не дам. Выкладывай таски (задания) прямо в тред. По мере готовности буду выкладывать готовое на файлообменники и ссылку ответом на пост.
Могу в кодинг. В том числе отрефакторить или допилить твой код. Могу написать охуительных историй в рамках твоего сеттинга про воздушные острова с толщекораблями и забиндить в диалоговую систему, или в систему глоссария, которые у тебя есть. Есть же?
В графониум не могу ни в каком виде, увы.
1699612225843.mp41,7 Мб, mp4,
854x480, 0:13
445 914072
>>14032
Контент!
446 914075
>>14072
В шапку следующего треда.
447 914078
>>14070

>Могу в кодинг.


>Могу написать охуительных историй


>В графониум не могу ни в каком виде, увы.


Пока сто сходи нахуй, думаю это ты тоже можешь.
image131 Кб, 642x245
448 914080
>>14072
Мне вот этот вариант нравится. Выглядит мощно, солидно.
449 914083
>>14078

> сто


Причина тряски?

> Добро пожаловать в тред любви, взаимопомощи и сходи нахуй


В шапку следующего треда!
16711923793230.jpg360 Кб, 1080x779
450 914085
>>14070

>Контакты не дам. Выкладывай таски (задания) прямо в тред. По мере готовности буду выкладывать готовое на файлообменники и ссылку ответом на пост.


Уровнем разработки удовлетворён.
1699614627405.jpg63 Кб, 650x682
451 914086
>>14085
Анонимный девелопинг.
452 914106
>>14070
Я для всего этого чатгпт использую, неиронично. А для генерации рефов и идей арта - далли.
453 914162
>>14032
Прикольные
454 914165
>>14106

>чатгпт использую


А ты видел они добавили поддержку ДАЛЛИ в чатГпт? Правда я так и не смог заставить его нарисовать что-нибудь. Кидаю свой концепт, прошу его дорисовать один момент, чтобы прикинуть как это будет выглядеть. Он такой "окей, подождите немного, мне нужно время". Через 20 минут спрашиваю "ну ты чё ёбаный в рот, где картинка?". А он "Извините, я не могу дорисовывать существующие картинки бла-бла". Ну хз. Я огорчен.
455 914191
>>14041

>Сделай ярлыки со своими иконками


Я так и сделал. Но всё равно, какого хуя? Организовали бы конкурс на лучшую иконку. Сообщество огромное, художников дохуя. Кинуть клич, получить тысячу иконок, устроить голосование - профит!
В итоге даже и на поменять нечего выбрать: https://godotengine.org/press/
Вот если б хотя бы были варианты - плоская, объёмная, пикселяртная, линиями, какие там ещё есть стили иконок я хз.
456 914192
>>14165
Разве в 3.5 добавили? Но энивей, я пользуюсь ими отдельно друг от друга. А вот если кто-то научится законченные юзабельные 3д модельки генерить - даже подписку оплачу наконец.
457 914200
>>14041
Не пойму, анимация с физоном для бубесов есть или нет?
458 914205
>>14162
Первая для индихоррора, вторая для... эмм... киберпанка?
459 914212
>>14205
Для физик платформера про дверь и режущиеся квадраты, видимо
460 914221
Посмотрел видосики выше и заметил, что верёвка крюка-кошки натягивается не по физике.
Как считаете аноны, как пофиксить это?
Стоит ли создавать полноценную симуляцию физики в чарактербоди?
Или может есть способ на лету менять игроку тип тела с чарактер на ригид? Чтобы значит, пока ходишь у тебя чарактер, а как летаешь на крюк-кошке, тело переключается на ригид с джойнтами и управляется по физике импульсами с полной поддержкой веса, столкновений, инерции искаропки.
461 914288
Ебучие шейдеры
462 914304
Извините я тупой
Вот установил я годот, думал там как в автокаде можно нарисовать кубов
А там нельзя
463 914308
>>14304
Есть базовые меши и CSG меши, позволяющие типа скульптить: https://www.youtube.com/watch?v=PIDD0iLknLY
464 914310
>>14304

> как в автокаде можно нарисовать кубов


Можно
https://www.youtube.com/watch?v=vM0oGoyCjEA
465 914389
Какой "свет" в 3д самый дешевый? Запеченый? Или emissive+hdr? Или есть что-то еще? Мне нужно подсветить область, реализм не важен, и в 2д я бы туда поставил просто полупрозрачную круглую текстуру.
466 914392
>>14389
Давай так, ты делаешь тесты всех видов света и приносишь нам ответы в тред. А мы тебя благодарим.
467 914393
>>14392
Нет давай ты.
468 914394
>>14393
Не, мне лень я пойду видосики смотреть.
https://www.youtube.com/watch?v=x4xS3N2GF-Q
469 914395
>>14394
Ну ты и наглый конечно.
Без названия.gif53 Кб, 254x172
470 914483
Привет геймдевач, нулевой вкатун с двухзначным айкью на связе.
Прохожу тутор по этому вивдево.
https://www.youtube.com/watch?v=-4jEXTwTsVI&t=978s
Там мужик создает scene в ней новый node и в поиске выбирает kinematic body 2d. Видево от 2021 года у меня самая новая версия.
Они переименовали этот node? Что мне делать?
471 914484
>>14483
Блядь говорю же я сильно тупой, ну в смысле у меня этот нод не находится, в этом был вопрос.
473 914489
>>14488
Ясен спасибо. Похоже зачем то дохуя переиминовали в новом апдейте.
Есть смысл продолжать тутор по старой версии или сильно много еботы и лучше найти тутор по 4ой?
474 914491
>>14489
Если найдешь нужный урок для четверки то конечно его учи. На годоте много уроков выходит, должно быть нужное
475 914492
>>14483

>Что мне делать?


Учиться искать
476 914497
>>14489

> Есть смысл продолжать тутор по старой версии


Есть. Ты основы учишь, а не детали переименования узлов. Просто скачай свежую трёшку и учись на ней. Будет у тебя LTS-версия движка. Как научишься базе, основам, так самостоятельно на четвёрку перекатишься.
Untitled-1.png176 Кб, 2804x1464
477 914501
Нашел новый урок, следовал полностью тутору, вышла такая вот ошибка, почему так?
>>14491
Да, нашел почти такой же урок, для новой версии.
>>14497
А какой в этом плюс в сравнении с тем, что бы сразу на 4ке учиться?
478 914503
>>14501

>А какой в этом плюс в сравнении с тем, что бы сразу на 4ке учиться?


Туторов в разы больше. Плюс, если какая-то ошибка, то она точно не из-за отличающейся версии, а из-за твоей криворукости.
Вот как здесь. Ты невнимательно следовал тутору. И вообще очень невнимателен.
1. Проверь, к какой ноде прикреплён скрипт. Сравни, к какой надо, согласно тутору.
2. (сверх того) У тебя там то velocity, то velocoty, то вообще veloci. Ты определись уже, как переменную зовут.
479 914505
>>14503
Плюс он банально переменную не объявил.
480 914506
>>14505
Велосити в четвёрке не надо объявлять для чарактербоди.
481 914509
>>14506
Хуя новости. Ну лан.
482 914511
>>14509
Пруф: https://docs.godotengine.org/en/stable/classes/class_characterbody2d.html#class-characterbody2d-property-velocity
Олсо, да, конечно, подсвечивается, что он не объявил. Потому что

>extends CollisionShape2D

Untitled-1.png371 Кб, 3913x2081
483 914514
>>14503
Я вообще нихуя в этом ваше кодинге не понимаю, от слова совсем.
Да вилосити я например пофиксил.
К ноде плеер я прикрепил скрипт, у челобасика тоже к Player.
https://www.youtube.com/watch?v=pBoXqW4RykE
У меня node type :Node2d
У этого чела на плеере маленький челебасик бегущий, вероятноу него type:CharacterBody2d
Но это не точно.
Как анон ниже написал, >>14511
В ноде CharacterBody2D не нужно обьявлять переменную. Но хуй из тутора не уточнил, что это актуально для определенных нодов, сказал просто что не нужно.
Ну я вообщем уже ее обьявил, ошибка ушла.

Что это значит
Function "move_and_slide()" not found in base self.
Я сейчас ищу в документации к Годоту, но там пиздец стены текста написанные для какихто альтруистов, я простохочу игру с сиськами запилить, а не кулхацкером становится.
484 914515
>>14514
Блядь нельзя просто в программе было написать, что там неработает. На дворе 2023 год, там хомяки визжат, что у них чатгтп работу заберет. А мне нужно выходить из проги, идти на какой-то доисторический форум и читать стены текста. Чаму так? Где иновации, когда наступит будущее?
485 914518
>>14511
Да я верю. Просто удивился.
486 914519
>>14515
Хомяки того, немного оторваны от реальности.
487 914520
>>14515
Просто кодинг не для тебя, мозги по-другому устроены. Тебе надо чем-то другим заняться, двор мести или там посуду мыть
488 914521
>>14514
Посмотри на 2:30, как он создаёт ноду для персонажа.

>Я вообще нихуя в этом ваше кодинге не понимаю, от слова совсем.


Выбирай, кем ты хочешь быть. Долбоёбом, не умеющим и не желающим учиться? Или геймдевом, мастером на все руки?
Хочешь делать игры - придётся собирать мозги в кучку и вникать. Тут хуяк-хуяк не прокатит. Анон с тобой за ручку всю игру не сделает. Придётся научиться понимать и читать доки.
489 914522
>>14520
Анончик, мне 35 лет, я уже в жизни куда более сложные вещи учил.
Тут просто какой-то каменный век, похоже. Кодеры этой штуки не брали в расчет что бы прога была user friendly от слова совсем.
Почему она просто мне не скажет, в чем там ошибка?
Вот захожу я в документацию
Какая-то ахуенная прохладная история, которая мне совершенно никак не помогает.
И что дальше делать, ага блядь один бьект скользит по другому, только что ощибка значит, нигде не написано?

bool move_and_slide ( )

Moves the body based on velocity. If the body collides with another, it will slide along the other body (by default only on floor) rather than stop immediately. If the other body is a CharacterBody2D or RigidBody2D, it will also be affected by the motion of the other body. You can use this to make moving and rotating platforms, or to make nodes push other nodes.

Modifies velocity if a slide collision occurred. To get the latest collision call get_last_slide_collision, for detailed information about collisions that occurred, use get_slide_collision.

When the body touches a moving platform, the platform's velocity is automatically added to the body motion. If a collision occurs due to the platform's motion, it will always be first in the slide collisions.

The general behavior and available properties change according to the motion_mode.

Returns true if the body collided, otherwise, returns false.
490 914523
>>14522
Тогда ты должен знать что сходу ничего комплексного не делается. Не спеши, выбери другой гайд, третий, почитай документацию и постепенно все получится.
491 914524
>>14522
>>14514

>Блядь нельзя просто в программе было написать, что там неработает.


Так вон написано же:

>Function "move_and_slide()" not found in base self


В ноде (которая для этого скрипта является self) отсутствует функция move_and_slide(). Может быть, ты в скрипте не объявил? А может, это нода не та? А может, опечатка? Да хуй знает, редактор же не может телепатически проникнуть в твой разум и узнать, что же ты имел ввиду. Но ошибка - вот она, человеческим языком написана.
492 914525
>>14522
Пчел, прога максимально юзер френдли. Но у проги нет задачи научить тебя любому нюансу кодинга с которым ты столкнулся, потому что у миллиона новичков непонимание возникает в миллионе разных мест.
В ошибке же все четко
function "move_and_slide"
not found
in base
self.
Ты вызываешь функцию без объекта (someobj.function())
Значит ты вызываешь ее у самого объекта к которому прикреплен скрипт (self, "у себя")
Функция с таким названием не найдена в базовом классе
Базовый класс - тот, от которого твой скрипт extend
Смотрим, а у тебя extend от Collision Shape (формы коллизии)
А move and slidе где? В классе KinmaticBody
493 914526
>>14521
Я полностью повторил за ним структуру нодов, но ошибка та же.
Проблема с документацией в том, что она слишком обширная.
И например у меня ошибка в скрипте, но у меня нет возможности конкретно об этой ошибке прочитать.
Function "move_and_slide()" not found in base self.
Но если я загоняю это в гугл, то нахожу только кучу текста о том, что такое эта функция, но все что я хотел, что бы спрайт управлялся стрелочками, но касаемо этого информации я найти не могу. Может быть это слишком очевидно, но почему тогда такие очевидные проблемы не объяснить инфотекстом в самой программе?
>>14523
Ну это шутка была, я художник, там учеба немного иначе происходит. Технических знаний у меня нет.
Похоже я повелся на инфоциган с ютуба, которые уже год кукарекают, что нейронки все уже за тебя делают, но похоже даже для примитивной top down rpg Нужно ебаться.
>>14524

>В ноде (которая для этого скрипта является self)


Спасибо что написал, теперь попробую в эту сторону гуглить.
Я пытался найти что такое self base, Но там что-то максимально обстрактное на несколько страниц было.
>>14525

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


И где мне это все узнавать, не пойду же я на 5 лет в универ, что бы 16 битную джейрпг запилить, это архаичная техника которую диды пилили на тостерах, до того как я родился?

>in base


>self.


Ну например это уже какой-то жаргон и даже не ясно это понятие из программирования в общем или конкретно к гадоту относится.

>Ты вызываешь функцию без объекта (someobj.function())


>Значит ты вызываешь ее у самого объекта к которому прикреплен скрипт (self, "у себя")


>Функция с таким названием не найдена в базовом классе


>Базовый класс - тот, от которого твой скрипт extend


>Смотрим, а у тебя extend от Collision Shape (формы коллизии)


>А move and slidе где? В классе KinmaticBody


Я раз 15 прочитал, нихуя не понял, что делать?
493 914526
>>14521
Я полностью повторил за ним структуру нодов, но ошибка та же.
Проблема с документацией в том, что она слишком обширная.
И например у меня ошибка в скрипте, но у меня нет возможности конкретно об этой ошибке прочитать.
Function "move_and_slide()" not found in base self.
Но если я загоняю это в гугл, то нахожу только кучу текста о том, что такое эта функция, но все что я хотел, что бы спрайт управлялся стрелочками, но касаемо этого информации я найти не могу. Может быть это слишком очевидно, но почему тогда такие очевидные проблемы не объяснить инфотекстом в самой программе?
>>14523
Ну это шутка была, я художник, там учеба немного иначе происходит. Технических знаний у меня нет.
Похоже я повелся на инфоциган с ютуба, которые уже год кукарекают, что нейронки все уже за тебя делают, но похоже даже для примитивной top down rpg Нужно ебаться.
>>14524

>В ноде (которая для этого скрипта является self)


Спасибо что написал, теперь попробую в эту сторону гуглить.
Я пытался найти что такое self base, Но там что-то максимально обстрактное на несколько страниц было.
>>14525

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


И где мне это все узнавать, не пойду же я на 5 лет в универ, что бы 16 битную джейрпг запилить, это архаичная техника которую диды пилили на тостерах, до того как я родился?

>in base


>self.


Ну например это уже какой-то жаргон и даже не ясно это понятие из программирования в общем или конкретно к гадоту относится.

>Ты вызываешь функцию без объекта (someobj.function())


>Значит ты вызываешь ее у самого объекта к которому прикреплен скрипт (self, "у себя")


>Функция с таким названием не найдена в базовом классе


>Базовый класс - тот, от которого твой скрипт extend


>Смотрим, а у тебя extend от Collision Shape (формы коллизии)


>А move and slidе где? В классе KinmaticBody


Я раз 15 прочитал, нихуя не понял, что делать?
494 914527
>>14526

>не пойду же я на 5 лет в универ, что бы 16 битную джейрпг запилить


>я хочу стать сеньором помидором, не пойду же я изучать погроммирование 10 лет, что делоть?


Найди программиста, ты не сможешь ничего спрогать, не мучай жопу, художник, только время проебешь. Чтобы даже простое программировать нужно много потрудиться, хотя бы годик нейроночку мозговую пообучать. Никакими чатами гпт ты воспользоваться не сможешь, нужно самому понимать что делаешь.
0,00000002.png139 Кб, 424x431
495 914528
>>14522

>Почему она просто мне не скажет, в чем там ошибка?

496 914530
>>14526

>Я раз 15 прочитал, нихуя не понял, что делать?


Ты наследуешь от неправильного класса. Функция move_and_slide находится в CharacterBody2D, а ты в extend наследуешь от CollisionShape2D.

Кроме того, у тебя скрипт-файл прикреплен не туда (надо к CharacterBody2D).

Посмотри свой видеогайд внимательно. Там чел делает правильно. И повторяй точь-в-точь. И слушай его объяснения. В программировании каждая буковка важна. И пожалуй я тебе посоветую не отклоняться от гайда слишком сильно - тебе это рано. Пройди 3-4 гайда, прочувствуй основные моменты - тогда пытайся свое, основываясь на чужом.
497 914531
>>14526

>Я полностью повторил за ним структуру нодов


Нет, не повторил. У чарактербоди есть и велосити, и функция move_and_collide. Он создал чарактербоди. Ты - нет. Создай чарактербоди и к нему прикрепи скрипт.
Повторяй за ним каждое движение мышкой. Нет, я серьёзно. Даже по тому, как ты пишешь, видно, что ты очень невнимателен к деталям. Именно из-за этого упускаешь ключевые вещи. Так как ты пока не знаешь, что именно ключевое, надо быть гипер-сфокусированным на деталях.

>если я загоняю это в гугл


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

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

>я художник


Бро, я музыкант. В Годо залипаю с 2020.

>архаичная техника которую диды пилили на тостерах, до того как я родился


Те диды были покруче всего /гд/ вместе взятого так-то. Могли целую жрпг упихать в 64 килобайта картриджа.
498 914532
Музыкант, художник. Осталось программиста найти и игра мечты готова.
499 914533
>>14527
Не я понимаю, что это выглядит как буд-то залетный ебанат пришел и начал качать права. В общем так и есть.
Я буквально вчера на твиторе видел чувак тред составлял мол он абсолютно с нуля загенерил говноарт в миджорни и код ему четгпт написал и он за 2 часа сделал клон angry birds.
Я реально подумал что маленькую игорю написать не слжоно будет. И немного ахуел с самого старта.
С чего нулевому вкатуну начать, эти ахуенные курсы рпг за 2ь минут, тоже очевидная хуита расчитаная на людей с опытом.
>>14530

>Кроме того, у тебя скрипт-файл прикреплен не туда (надо к CharacterBody2D).


Все равно та же ощибка выходит.

>Посмотри свой видеогайд внимательно.


Да я и так смотрел постоянно отматывая назад, только он нихуя толком не пояенсяет. Типа хуякс-хуякс тут кликнул ага и чувак забегал по экрану.
500 914535
>>14531
Ну вроде реально все за ним повторил, единственное что у него нода для анимации персонажа, а у меня анимации нет и я спрайт выбрал вместо этого.
Похоже реально нужно было рпг мейкера качать, но в той говнине 0 мотивации разбираться, если даже и вкачусь в нее нормально, все равно она жутко кастрированная и придется перекатываться, лучше сразу нормально учить.
Untitled-1.png263 Кб, 1410x2064
501 914536
image.png361 Кб, 1171x628
502 914537
503 914538
>>14533
М-да, вот для таких случаев нужен препод. Чтобы сидел рядом и показывал: вот тут ты накосячил, вот тут, а теперь сосредоточься вот на этом.

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


А почему ты так не сделаешь?
(вообще, я скажу, почему. Потому что есликогда чатгпт накосячит, исправлять придётся тебе, а это шарить надо)

>>14537
как ты так быстро это делаешь
504 914539
>>14537
Ааааа, теперь понял, спасибо. Это оказывается не я тупой, а автокоррекция годота мне в штаны подливы залила.
505 914540
>>14539

>Это оказывается не я тупой, а автокоррекция годота мне в штаны подливы залила.


Чет обосрался с этого маневра, лол.
506 914541
>>14538

>М-да, вот для таких случаев нужен препод.


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

>А почему ты так не сделаешь?


Я когда этот кал на хайпе был, потыкал в него немного, крайне тупая и бесящая штука. Буквально симулятор среднестатистического штипостера в интернете. А там еще вроде и подписка нужна, короче я к этому говну не притрагивался с тех пор и не собираюсь.
Ну а миджорни и говорить не стоит, буквально калогенератор, для людей без души.
507 914542
>>14539

>автокоррекция годота


Нет такой штуки. Вот тут >>14514 у тебя вообще скрипт к Node2D прикреплён, а экстендс всё так же коллижоншейп.
Эта строчка генерится автоматически в момент создания скрипта. Скорее всего, ты его сначала по ошибке прицепил к коллиженшейпу, весь написал, он ожидаемо не заработал, и ты стал его весь целиком копипастить (или просто переприкреплять один и тот же уже созданный файл) сначала в ноде2д, потом в чарактербоди.

>>14541

>крайне тупая и бесящая штука


Ну хуй знает, мне вот недавно надо было сайт сделать, так яндексовый гпт вполне сносно справился со всеми вопросами про пхп.
Вроде как с Годо 3.5 у него тоже всё отлично. С 4, очевидно, нет, не успели обучить ещё.

>Так хороший препод наверное будет стоить, так же как хороший кодер


Зато сэкономит кучу времени и нервов на стадии обучения.
508 914543
>>14542

>про пхп.


Ну ты дед. Интересно, можно ли на гдскрипте.
509 914546
Перекот делойте. Эту >>14072 можно в шапку.
510 914548
>>14543

>Ну ты дед


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

На гдскрипте, очевидно, можно написать серверную часть сайта, но это бессмысленно. Как минимум, потому что гдскрипту нужен годот, годоту нужно графическое окружение, а ставить на сервер графическое окружение никто в здравом уме не будет.
511 914549
>>14548
Не. Есть headless годот - подходит для написания консольных инструментов, а есть Server годот - на нем сервера для мультиплеер игр на годоте пишут. В четверке как я понимаю отдельный билд для сервера убрали, теперь просто экспортишь под сервер: https://docs.godotengine.org/en/stable/tutorials/export/exporting_for_dedicated_servers.html

Так что вполне можно. И в базы данных умеет.
512 914551
Хуйдожник кстати после проеба вполне успешно запилил анимацию на движение в различном направлении и вполне себе понял код.
Синтакс правда не совсем понятен.
Оказывается играет роль насколько новая строчка, например if имеет табов растояния от начала. Помню в школе какую-то хуиту учил, C или что там было не помню, но там такого не было. И что означают "." "_" или доллар тоже не совсем ясно.
513 914553
>>14551
Годот-тян говорит молодца.

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

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

. - доступ к членам класса/объекта/структуры

Через доллар ты указываешь путь к ноде. В редакторе слева у тебя древо нод - вот это и указываешь.
514 914585
>>14551
куда ты лезешь с таким отношением?
Где-то когда-то в школе видел какую то хуету, ебать тут отступы что-то значат, а что значат эти закорючки ...
Двиньте ему по башке кто поближе это просто невыносимо.
515 914614
>>14585
Не все любят питоноподобный синтаксис. Я, кроме самого питона, табуляцию как часть синтаксиса видел еще в BYOND ебучем. Не помню уже что в C#.
516 914624
>>14614

>Не помню уже что в C#.


Знаешь как это решается? Перед тем как насрать в тред пишешь в гугле - сишарп пример кода - и вспоминаешь
517 914627
>>14624
лень
518 914629
>>14627
Не помогайте этому уебку, пацаны
519 914636
>>14629
Тебе кто-то с утра на хуй наступил?
520 914637
>>14514

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


Очередного жиробаса зелёного накормили ИТТ.
Пере 521 914639
522 927561
>>10890 (OP)
Подскажите, если в блендере сделать 1 из 2 способов с видосов:
1.https://www.youtube.com/watch?v=G4VEHi3dI6w&ab_channel=ALLTHEWORKS Сделать деревья через ноды, то создаваемые после модели можно ли будет экспортировать в ГОДО ?
2. https://www.youtube.com/watch?v=zk6aUkl115E&ab_channel=CGIGuru Создания через привязку листьев через ту же сферу, саму сферу спрятать как альфа каналом, в рендере самого блендера выглядит норм, а если перенести в ГОДО кто нибудь сталкивался ?
523 929091
Хочу вкатиться но помимо официальной документации очень мало полезной информации в виде текста, все снимают видео туториалы для школоты. Есть информация о примерной структуре проекта? Как понять что эту механику лучше разбить на компоненты? Паттерны программирования?
524 929522
Что за белые полосы по краям экрана, когда запускаю fullscreen?
И еще есть проблема, как только ставлю mouse_captured, то экран начинает как бы моргать позади окна игры, если не в фул скрине запущено, но если перенесу окно на другой монитор, или скрою сам окно движка, то все ок.
525 929525
Что за белые полосы по краям экрана, когда запускаю fullscreen?
И еще есть проблема, как только ставлю mouse_captured, то экран начинает как бы моргать позади окна игры, если не в фул скрине запущено, но если перенесу окно на другой монитор, или скрою сам окно движка, то все ок.
526 937981
>>29525
А запасом модельку не двигал под стенку?
image.png290 Кб, 1078x571
527 940619
Делаю диалоговую систему по видосам, такая хрень вылезла. Че с этим делать?
res://addons/dialogue_nodes/editor/workspace.gd:64 - Invalid get index 'close_request' (on base: 'GraphNode (startNode.gd)').
528 943524
Посоветуйте плз уроки по годоту где используется гдскрипт.
529 943664
Как в годоте пройтись по сцене чтобы получит все объекты с типом button?
530 944075
>>29091
бля, ну общий гейм дев вероятно ответит на эти вопросы.
531 944077
>>27561
на первом узнаваемый индусский акцент)
532 944579
Вопрос от "еще не смешарика"
Ниче не знаю, ниче не умею, но хочу попробовать соприкоснуться с созданием игорь. Но сидеть и учить документацию по строчке пока не готов, поэтому хочу спросить совет.

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

Идей много, но вот какой учебный проект взять что бы не было слишком перегружено, но и не в одну кнопку.
image.png1,4 Мб, 1366x768
533 944647
пРИВЕТ. А я игору делаю.
image.png1,3 Мб, 1366x768
534 944655
Плиточку распидорасило!
535 945124
Привет, Сосач. Недавно заценил демки Godot'а, такие как TPS Demo (для четвёрки есть версия на Гитхабе), Abandoned Spaceship Demo & Desert Light Demo. Во всех трёх случаях я жёстко охуел с высокой загрузки GPU. Кто-нибудь подскажет, это демки плохо оптимизированы или Godot в принципе плох для 3D? Можно ли исправить производительность с помощью RenderingServer (ни в одной из демок таковой не используется напрямую)?
536 946103
напиши плиз авторов ютуб каналов по которым вы учились
537 946104
>>44579
пинг понг
538 946365
как заменить все пробелы на табы, помню случайно нашел такую комбинацию и благополучно о ней забыл, еблан, а щас пиздец как понадобилась
539 946493
>>10890 (OP)
Сап двач, есть один GridContainer, который не отображает мои ColorRect. На пике-1 код, который работает в Node2D и всё отрисовывает (пик-2 - работа кода на Node2D), а внутри GridContainer срать он хотел на мои квадратики, бака. Что я делаю не так?
540 946504
>>44579
Space Invaders поделай. Пошагово можно поиграться сначала с позициями кораблика-игрока, нарисовать одного врага и пострелять в него, потом поиграть с окружением, потом - с кучей врагов, коллизиями и прочим.
Preview.jpg88 Кб, 1280x720
541 948163
Гейсы, C# норм для годоти. ВОт эта Mono версия. чО думаете?
Хтелбы потихоньку вкатываться, хочу в МОНО с шарпиком
oqa4t6vcvd6t22oqoj54en699b.png57 Кб, 800x800
542 949521
>>48163
Главный вопрос - нахуя?
Весь движок заточен под gdscript, примеры все - на гдскрипте, готовые решения - снова он, поддержки веба и мобайла пока нет, встроен в сам движок без костылей, коммьюнити шарпов - ~10%. Выучить гдскрипт можна за пару вечеров, он простой.
И байки про скорость не надо, скрипты при маршаллинге в годот будут иметь нормальный оверхед по сравнению с гдскриптом, а там где нужен перфоманс и самопильное решение лучше уже на расте - он и быстрее, надежнее и кода меньше в отличии от абсолютно ненужного синтаксиса корпоративной жавы.
8 лет опыта шарпов
543 953863
Антуаны, подскажите, как добавить в коде дочернему узлу новую переменную при его создании?
544 954096
Метод move_and_slide() может давать ошибку instance_set_transform: Condition "!v.is_finite()" is true если я нигде не накосячил со скоростями? Как вообще пофиксить подобное без трай-кетчей если и так везде уже столько всяких проверок понатыкал, что вероятность того, что эта ошибка вылезает где-то кроме move_and_slide() стремится к нулю?
545 954164
Есть какой-то мануал по начальному вкату?
По отдельным темам есть видосы, доки.
Но вот, например, не могу понять как увеличить область видимости правильно.
Я имею ввиду - у меня есть tilemap c тайлами по 256 пикселей, в итоге на экране отображается 3,5 тайла, а я хочу чтобы на экран вмещалось скажем 50. Нашел в опциях разрешение экрана и масштаб. Разрешение экрана с одной стороны решает, с другой возникает вопрос что если если у игрока будет другое разрешение? Должно как-то масштабироваться всё. И вот как работает масштаб, это то что мне нужно или нет? Не получится ли так что я изменив масштаб с 1 до 0.2 просто замылил всё?
546 956337
Как обнулить глобальную переменную? Что надо для этого в скрипте написать? Global.test = 0 не пашет как-то
547 956351
>>56337
Разобрался, спасибо.
548 956384
>>54164
Я вот этот гайд повторил, там есть про тайлы:
https://www.youtube.com/watch?v=LOhfqjmasi0

Когда загружаешь тайлы в правом верхнем углу выбираешь сколько тайлов по горизонтали и сколько по вертикали.
Обновить тред
« /gd/В начало тредаВеб-версияНастройки
/a//b//mu//s//vg/Все доски

Скачать тред только с превьюс превью и прикрепленными файлами

Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах.Подробнее