ProceduralGeneration - TerrainController
O TerrainController é um script que gerencia a geração dinâmica de terreno, árvores e inimigos em um Tilemap. Ele utiliza configurações definidas em ScriptableObjects (LandscapeConfig) para criar biomas variados e interessantes. Este script permite configurar parâmetros diretamente no Unity Editor, oferecendo flexibilidade na criação do terreno e posicionamento de árvores e inimigos e minérios.
Classe TerrainController
A classe TerrainController é responsável por gerar tiles de terreno, árvores e inimigos em um Tilemap de forma dinâmica, permitindo criar ambientes variados com biomas, áreas elevadas e zonas designadas para inimigos.
Código Disponível Aqui.
Inspector View:
Propriedades:
- grassTilemap: Referência ao Tilemap para os tiles de grama.
- rockTilemap: Referência ao Tilemap para os tiles de rocha.
- dirtTilemap: Referência ao Tilemap para os tiles de terra.
- oreTilemap: Referência ao Tilemap para os tiles de minério.
- landscapeConfig: Referência ao LandscapeConfig usado para a geração do terreno.
- treesParent: Transform pai para os objetos de árvore.
- enemiesParent: Transform pai para os objetos de inimigos.
Métodos:
- Start(): Inicializa os colliders e regenera o terreno.
- EnsureColliders(): Garante que cada Tilemap tenha um TilemapCollider2D e um Rigidbody2D.
- EnsureCollider(Tilemap tilemap): Adiciona um TilemapCollider2D e Rigidbody2D ao Tilemap especificado, se ainda não existirem.
- RegenerateTerrain(): Limpa os objetos existentes e gera o terreno e as árvores.
- ClearExistingObjects(): Limpa todos os tiles e objetos filhos dos Tilemaps e pais.
- ClearChildren(Transform parent): Destroi todos os objetos filhos do Transform pai especificado.
- GenerateTerrainAndTrees(): Itera através dos biomas no LandscapeConfig e gera o terreno, terra, minérios e árvores.
- GenerateColumn(int x, int finalHeight, LandscapeConfig.Biome biome): Gera uma coluna de tiles para o bioma especificado.
- GenerateDirt(int x, int finalHeight, LandscapeConfig.Biome biome): Gera tiles de terra com base na configuração de terra.
- GetTilemapToUse(TileBase tile, LandscapeConfig.Biome biome): Determina qual Tilemap usar com base no tipo de tile.
- GetTileToPlace(int x, int y, int finalHeight, LandscapeConfig.Biome biome): Determina qual tile colocar com base na posição e nas configurações do bioma.
- IsPlayerSpace(int x, int y, LandscapeConfig.Biome biome): Determina se um espaço deve ser deixado para o jogador passar.
- GenerateTrees(int x, int terrainHeight, LandscapeConfig.Biome biome): Gera árvores na posição especificada com base nas configurações de árvore.
- GenerateEnemies(int x, int terrainHeight, LandscapeConfig.EnemyConfig enemyConfig): Gera inimigos na posição especificada com base na configuração de inimigos.
- GenerateOres(int x, int finalHeight, LandscapeConfig.Biome biome): Gera tiles de minério com base nas configurações de minério.
- IsDirtArea(int x, LandscapeConfig.Biome biome): Determina se uma área deve ser uma área de terra com base na configuração de terra.
LandscapeConfig
O LandscapeConfig é um ScriptableObject utilizado para definir as configurações de paisagens em um jogo 2D. Ele permite a configuração de biomas, incluindo a geração de terrenos, árvores, cavernas e áreas inimigas. Cada bioma possui suas próprias configurações específicas para criar um ambiente variado e interessante.
Código Disponivel Aqui
Classe LandscapeConfig
A classe LandscapeConfig é responsável por armazenar as configurações dos biomas, incluindo a configuração de árvores, cavernas e áreas inimigas. Ela é usada pelo TerrainController para gerar o terreno e seus componentes dinamicamente.
Propriedades:
- biomes: Um array de biomas, cada um contendo configurações para grama, rocha, terra, minérios, árvores e inimigos.
Estruturas Aninhadas:
- Biome: Define as propriedades de um bioma, incluindo tilemaps, tiles, amplitudes e configurações para cavernas, terra e minérios.
- name: O nome do bioma.
- biomeWidth: A largura do bioma.
- biomeHeight: A altura do bioma.
- grassTilemapName: O nome do Tilemap para os tiles de grama.
- grassTile: O TileBase para os tiles de grama.
- grassAmplitude: A amplitude para a variação de altura da grama.
- mountainFrequency: A frequência das montanhas.
- rockTilemapName: O nome do Tilemap para os tiles de rocha.
- rockTile: O TileBase para os tiles de rocha.
- caveConfig: Configuração para as cavernas.
- dirtTilemapName: O nome do Tilemap para os tiles de terra.
- dirtTile: O TileBase para os tiles de terra.
- dirtConfig: Configuração para as áreas de terra.
- oreTilemapName: O nome do Tilemap para os tiles de minério.
- oreConfigs: Um array de configurações para diferentes tipos de minérios.
- treeConfigs: Um array de configurações para o spawn de árvores.
- TreeSpawnConfig: Define as propriedades para o spawn de árvores.
- treeConfig: Referência ao TreeConfig.
- spawnFrequency: A frequência de spawn das árvores.
- CaveConfig: Define as propriedades para a geração de cavernas.
- caveFrequency: A frequência do ruído das cavernas.
- caveThreshold: O limiar para determinar os tiles de caverna.
- enablePlayerSpaces: Ativar espaços para o jogador passar.
- playerSpaceRange: O intervalo de largura dos espaços para o jogador.
- DirtConfig: Define as propriedades para a geração de terra.
- spawnChance: A chance de spawn de tiles de terra.
- dirtFrequency: A frequência do ruído da terra.
- dirtDepth: A profundidade dos tiles de terra.
- dirtRadius: O raio das áreas de terra.
- enemyConfig: Configuração para os inimigos nas áreas de terra.
- enemySpawnFrequency: A frequência de spawn dos inimigos.
- enemySpawnRange: O intervalo para o spawn dos inimigos.
- OreConfig: Define as propriedades para a geração de minérios.
- oreTile: O TileBase para os tiles de minério.
- spawnChance: A chance de spawn dos tiles de minério.
- oreFrequency: A frequência do ruído dos minérios.
- oreDepth: A profundidade em que os minérios podem spawnar.
- EnemyConfig: Define as propriedades para a geração de inimigos.
- enemyPrefab: O prefab para o inimigo.
- spawnChance: A chance de spawn dos inimigos.
- maxQuantity: A quantidade máxima de inimigos que podem spawnar.
- enemySpawnOffset: O deslocamento para as posições de spawn dos inimigos.
Grass,Dirty,Rocks
Exemplos : 250x250 Tiles
Exemplo : 25x25 Tiles
Outros Layouts com Cavernas. (Em desenvolvimento)
Agora Cada RuleTile segue o seu Tile Map de forma procedural.
Version 2 :
Agora muito mais suave e com a possibilidade de Adicionar Spawn de minerios.
1000x100 Biome (Green Mountains)