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

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

Добрый день!
Эту неделю мы хотим посветить рассказу и разработке по проектированию рандомных миров, на основе различных способов. И первым делом, хотелось бы затронуть самый популярный способ рандомной генерации, а именно шум перлина! Шаг 1: Основы - Создание Grid и TileMap в Unity Первым шагом станет создание базовой сетки с использованием TileMap в Unity. Давайте посмотрим как легко и быстро можно создать фундамент нашего будущего мира. Шаг 2: Рандомный ландшафт с шумом Перлина Возможно, самым увлекательным моментом станет использование шума Перлина для генерации рандомного ландшафта. Давайте создадим базовый код для генерации подобного мира! Для начала создадим генератор, основа всего состовляющего: using UnityEngine;
using UnityEngine.Tilemaps;
public class WorldGenerator : MonoBehaviour
{
public int width = 10;
public int height = 10;
public Tilemap tilemap;
public TileBase groundTile;
void Start()
{
GenerateWorld();
}
void GenerateWorld(
Оглавление

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

Шаг 1: Основы - Создание Grid и TileMap в Unity

Первым шагом станет создание базовой сетки с использованием TileMap в Unity. Давайте посмотрим как легко и быстро можно создать фундамент нашего будущего мира.

Шаг 2: Рандомный ландшафт с шумом Перлина

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

Для начала создадим генератор, основа всего состовляющего:

using UnityEngine;
using UnityEngine.Tilemaps;

public class WorldGenerator : MonoBehaviour
{
public int width = 10;
public int height = 10;
public Tilemap tilemap;
public TileBase groundTile;

void Start()
{
GenerateWorld();
}

void GenerateWorld()
{
tilemap.ClearAllTiles(); // Очищаем TileMap перед генерацией

for (int x = 0; x < width; x++)
{
for (int y = 0; y < height; y++)
{
tilemap.SetTile(new Vector3Int(x, y, 0), groundTile);
}
}
}
}

Следующим шагом у нас будет разработка самого шума, вот код который наглядно демонстрирует это:

public class PerlinNoiseGenerator : MonoBehaviour
{
public float scale = 5f;
public float heightMultiplier = 2f;

void Start()
{
GenerateTerrain();
}

void GenerateTerrain()
{
Tilemap tilemap = GetComponent<Tilemap>();
tilemap.ClearAllTiles();

for (int x = 0; x < tilemap.size.x; x++)
{
float noiseValue = Mathf.PerlinNoise(x / scale, 0) * heightMultiplier;
int height = Mathf.RoundToInt(noiseValue);

for (int y = 0; y < height; y++)
{
tilemap.SetTile(new Vector3Int(x, y, 0), groundTile);
}
}
}
}

Шаг 3: Непредсказуемые сюжеты и персонажи

Разработка подобных вида игр требует наличие постоянной увлечённости. Дадим вам подсказку! Чтоб создать рандомизацию именно зданий, окружения или NPС то вы можете использовать отдельные слои! Подробней о них мы расскажем завтра в нашей второй части! На сегодня это всё!

Благодарим что дочитали и встретимся уже завтра!

-2