Godot путь новичка. Первый Enemy и первый Шейдер
Добрый вечер мои дорогие подписчики, в прошлом посте сказал что постараюсь написать, про то как сделать первый шейдер, ну собственно и попробую. Шейдер будет очень простенький, но какая-никакая, а анимашка смерти, ну и чем проще тем понятнее думаю будет. А попозже уже модифицируем, до красивого. Можно сразу пролистать вниз, там есть результат, вдруг не понравится, так чтобы время зазря не терять на столько текста и картиночек)
Создам новый проект, основную сцену неважно, как назвать. Создам ещё одну сцену, назову её Enemy, сцена наследуется от Node2d скриншоты каждого шага делать не буду, их уже показывал ранее. На сцену Enemy добавляем ноду Sprite.
После того как спрайт выбрали, добавляем ноду TexturedButton, по размеру делаем её со спрайт, текстур к ней никаких не добавляем.
Для Enemy создаем новый скрипт, для кнопки соединяем сигнал pressed со скриптом Enemy.
Если на прошлом этапе никаких проблем не возникло, то значит все идет как надо, теперь немножко модифицируем скрипт Enemy.
Не буду выкладывать скрипт текстом, по сыну заметил, что если можно скопипастить, то обязательно скопипастит, а лучше 10 раз написать одно и тоже, пока не придет осознание, что надоело это уже писать, до чертиков. Вот как только появилась такая мысль, то все можно уже и копипастить.
Теперь можно потыкать врагов на экране, будут ложиться с трех тычек, очень даже неплохой баланс))
Ну раз враги умирают, неплохо бы это визуально показать игроку, что они действительно умерли и так и было задумано, а не просто пропали хрен пойми с чего.
Сделаем сначала очень простенькую штуку. А именно при смерти моба, будем уменьшать его прозрачность до нуля, как только прозрачность опустится до нуля, тогда будем вызывать destroy()
Ну все монстры исчезают, перейдем к мудреному, забамбасим простенький шейдер.
скину ссылки которые вам могут очень пригодится.
https://docs.godotengine.org/en/latest/tutorials/shaders/you...
https://docs.godotengine.org/en/latest/tutorials/shaders/sha...
https://godotshaders.com/
https://thebookofshaders.com/
Для понимания предыдущего, суперского туториала, нужно сказать пару слов, там используется GLSL, в godot свой язык шейдеров, но глобально это тот же самый GLSL. По следующей ссылке, детально расписано, как конвертить GLSL в godot'овский ну и так же обратно.
https://docs.godotengine.org/en/latest/tutorials/shaders/con...
функцию рандома взял отсюда https://godotshaders.com/snippet/random-value/
вообще черная магия какая-то и очень мне непонятная ещё местами, ну типа почему так сложно и где встроенная функция random(),
Генерит псевдослучайное значение между 0.0 и 1.0
Ладно погнали, назовем наш новый шейдер - desintegrate.
Тут не успеешь создать, уже сразу начинает ругаться, тут вобще на все подряд будет ругаться, можно забывать теперь про неявное указание типов данных и прочие радости, за каждую точку с запятой будет ругаться) Сучек, какой строгий) Ну сейчас он ругается, что не указали тип шейдера, использовать будем сейчас canvas_item, он для спрайтов. spatial для 3d моделек, до particles ещё не добрался пока.
Ну напишем шейдер, который сейчас полностью повторяет, тоже самое что делали через
self_modulate.
Все есть полностью рабочий шейдер, самое время его прикрутить к спрайту.
Как наиграетесь не забудьте progress перетащить на 0, хотя это и неважно, в последствии шейдер по умолчанию вряд-ли будет привязан к конкретному спрайту, а под разные смерти будут разные эффекты и шейдер проще будет задавать уже напрямую из даты монстра или оружия или магии, или что там в голову уже взбредет.
Теперь идем в скрипт Enemy.
Все можно проверять, работает точно так же как и до этого, но механика принципиально разная) Что уже круто, вставлять видяшку не буду и так пост огромный получается.
Ладно, чтобы немножко было отличий, модифицируем ещё разочек шейдер, не зря же его Desintegrate называли.
float random (vec2 uv) {
return fract(sin(dot(uv.xy,
vec2(12.9898,78.233))) * 43758.5453123);
}
берем эту функцию из сниппетов на https://godotshaders.com/snippet/random-value/Ну и результат.
Все большое спасибо за внимание, хз спонтанно как-то решился, пришел с работы да и навалякал за четыре часика, как есть. Надеюсь хоть что-то полезное отсюда подчерпнете, потому что я уже охреневать начал от обилия всего и не знал с чего начать. Подумал лучше уж хоть как-нибудь но побыстрее, а там видно будет в процессе. Следующий пост скорее всего будет про партиклы, а то если монстра бить, то от него что-нибудь и отлетать же должно, ну как получится. Сейчас по планам закодироваться снова, а то год трезвости прошел. Немножко тоскливо было, так я за месяц 4 раза нажрался. Но в запой не ушел, не особо и тянуло к слову, но все одно закодируюсь, чтобы соблазнов лишних не было)) а то опять ногу сломаю или бошку пробьют или ещё чего))