В этой статье соберем сценку, в которой над мусорным ведром будет летать несколько мух.
Основное — анимация должна быть зациклена и не должна быть создана вручную по понятным причинам.
Использовать будем шум. Если кто то пропустил в свое время статью по шуму — вам сюда.
Создаём новый ресурс.
Чтобы получить зацикленность в настройках шума поставим галочку возле Seamless. Таким образом пиксели в начале и в конце изображения станут идентичными и мы получим ровный стык при переходе с последнего значения в первое.
Сохраним ресурс как noise.tres.
Если вам нужно визуально видеть как выглядит шум, то можно подключить его скажем в textureRect. Для этого просто дропните ресурс шума в его текстуру.
Можно убедиться что текстура действительно бесшовная.
Теперь пару слов о том как нам получить непосредственно сами данные зацикленного шума.
Если внимательно посмотреть в инспектор, то можно заметить что галочка Seamless находится не в самом блоке шума , а выше в разделе NoiseTexture.
Если мы будем брать данные из noise.get_noise2d, то никакой зацикленности мы не получим, так как обращение будет к шуму.
Для того чтобы нам получить возможность получать данные с зацикленной текстуры , нам необходимо создать новый ресурс Image, и указать в качестве изображения для него нашу NoiseTexture.
Тем самым мы как бы запекаем данные шума в картинке, с которой в последствии можем собирать данные при помощи get_pixel.
Код.
Загружаем текстуру в новый Image. (yield в коде для того, чтобы текстура успела сгенерироваться перед манипуляциями)
В цикле создаем наших мух, и сразу накидываем им разные размеры для объема.
В процессе каждой мухе указывам в качестве сдвига данные значений пикселей из Image.
Для того чтобы нам не вылетать за пределы текстуры , я ограничил данные для координаты = 299 (размеры текстуры шума). Как только мы прочитали 299 пиксель, сбрасываемся в 0.
Не забываем что get_pixel возвращает нам данные в виде RGBA, поэтому в коде я беру нулевой индекс (R).
Ну и теперь меняя значения шума в ресурсе шума, мы можем менять динамику мух практически в один клик.
Надеюсь вам был полезен этот материал.
Подписывайтесь на канал, вступайте в группу в ВК, и не забывайте что у нас есть дискорд сервер.
Удачи в изучении годо !
#godot #gdscript #уроки #игровой движок #программирование