Uma das coisas mais trabalhosas para fazer é criar níveis, mas na Unity podemos usar diversos recursos que podem facilitar nossa vida.
Um deles é a possibilidade de usarmos mapas pixelados para criar um nível em nosso jogo.
Mapas pixelados são mapas onde criamos uma textura e cada pixel representa um elemento diferente do jogo.
Nesse exemplo acima, o que está em branco é o espaço vazio, o que está em preto é uma plataforma e o que está em vermelho são os prêmios.
Agora que temos o mapa o que precisamos fazer é transformar isso em um nível na Unity.
Criando os prefabs
O primeiro de tudo precisamos criar um prefab para cada cor que vamos colocar no tilemap.
Branco = Espaço vazio
Preto = Plataforma
Vermelho = Prêmio
Criando o Script
Agora vamos criar um Script que vai identificar a cor do tilemap e criar o prefab correspondente.
public Texture2D map; public Color[] Cores; public GameObject[] Prefab; void Start() { GenerateLevel(); } void GenerateLevel() { for(int x = 0; x < map.width; x++){ for(int y = 0; y < map.height; y++){ GenerateTile(x,y); } } } void GenerateTile(int x, int y){ Color PixelColor = map.GetPixel(x,y); for(int i = 0; i < Cores.Length; i++) { if(Cores[i] == PixelColor){ Instantiate(Prefab[i], new Vector2(x,y), transform.rotation); } } }
Nesse Script vamos colocar o nosso tilemap como um Texture2D, identificar cada um dos pixels dele e no GenerateTile vamos criar cada um dos prefabs que colocamos na lista das cores.
É importante nós colocarmos na lista de cores o correspondente a lista de prefabs.
0 – Preto = Plataforma
1 – Vermelho = Prêmio
O espaço vazio não precisa ser colocado.
Script avançado
Também vamos colocar um script avançado para aqueles que tem mais experiência com programação:
public Texture2D map; public variavel[] Tile; [Serializable] public class variavel { public GameObject Prefab; public Color[] Cores; } void Start() { GenerateLevel(); } void GenerateLevel() { for(int x = 0; x < map.width; x++){ for(int y = 0; y < map.height; y++){ GenerateTile(x,y); } } } void GenerateTile(int x, int y){ Color PixelColor = map.GetPixel(x,y); for(int i = 0; i < Cores.Length; i++) { if(Cores[i] == Tile.PixelColor){ Instantiate(Tile.Prefab[i], new Vector2(x,y), transform.rotation); } } }
Quer aprender desenvolvimento de jogos?
Siga o nosso blog: www.crieseusjogos.com.br
Temos vídeos toda semana em nosso canal do Youtube: Crie seus jogos – Youtube
E também baixe gratuitamente: os passos para desenvolver jogos de sucesso
Seja o primeiro a comentar.