Найти в Дзене
MLLM

Рандомная генерация 2D уровня на основе шума Перлина Unity! Часть 2

Процедурная генерация, уже давно стала неотъемлемой частью игровой индустрии. Многие студии стремятся к разработке своих миров на базе генерации, чтобы предоставить игроку больший выбор и большее разнообразие действий. В данном видеоролике, мы собираемся быстро и понятно объяснить вам как разработать свою процедурную генерацию на базе шума Перлина, для своей игры. Не забудьте про подписку на канал, а мы начинаем! Сценарий генерации Первым делом в иерархии создадим нашу сетку для последующей работы с ней. Далее создадим скрипт самого генератора, скачать его вы сможете у нас в Телеграмме или группе в ВКонтакте. После чего открываем скрипт и видим шумерские символы. Первым делом создадим вспомогательный массив предметов для настройки каждого слоя отдельно, незабываем делать его видимым. Далее стоит прописать все необходимые компоненты и переменные. После чего можно сделать небольшую матрёшку из вызывающих функций генератора. Отлично теперь дело за малым! Прописываем сценарий вызова и отр

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

Сценарий генерации

Первым делом в иерархии создадим нашу сетку для последующей работы с ней.

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

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

-2

Далее стоит прописать все необходимые компоненты и переменные.

-3

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

-4

Отлично теперь дело за малым! Прописываем сценарий вызова и отрисовки шума Перлина.

public static class PerlinNoise
{
public static float[,] GeneratePerlinNoise(int width, int height, float max, float min)
{
float[,] noiseMap = new float[width, height];

float scale = 5f; // Масштаб шума, можно настроить под ваши нужды

for (int x = 0; x < width; x++)
{
for (int y = 0; y < height; y++)
{
float xCoord = (float)x / width * scale;
float yCoord = (float)y / height * scale;

float value = Mathf.PerlinNoise(xCoord, yCoord);
noiseMap[x, y] = Mathf.Lerp(min, max, value);
}
}

return noiseMap;
}
}

Далее возвращаемся к нашей основной функции генератора и прописываем ей сценарий присваивания тайлов на высоты шума Перлина.

void GenerateMap()
{
int width = borderMap.x;
int height = borderMap.y;

// Создаем карту шума Перлина
float[,] noiseMap = PerlinNoise.GeneratePerlinNoise(width, height, maxMapHeight, minMapHeight);

// Заполняем Tilemap на основе шума Перлина
for (int x = 0; x < width; x++)
{
for (int y = 0; y < height; y++)
{
foreach (var setting in settings)
{
if (noiseMap[x, y] <= setting.height)
{
tilemap.SetTile(new Vector3Int(x, y, 0), setting.tile);
break;
}
}
}
}
}

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

-5

Определяем размеры карты, и максимальную высоту мира, советуем ставить не более 1.

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

-6

-7