[RESOLVIDO] Desenhando um Tile Map Simples
2 participantes
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
[RESOLVIDO] Desenhando um Tile Map Simples
Pessoal, não achei no Fórum um tutorial bem simples sobre a melhor maneira de se desenhar tiles para um mapa topdown ou isometrico com Unity.
Queria algo bem simples para entender o conceito e evoluir o código conforme as necessidades de projeto.
Imagino que a forma seja carregar um sprite (tileset) no modo "Multiple" separando os tiles e depois em um loop tradicional coloca-los na cena.
Como instanciar esses tiles na cena de maneira organizada e ainda pensar em layers e colisões específicas ?!?
Se alguém puder ajudar agradeceria muito.
Roger
Queria algo bem simples para entender o conceito e evoluir o código conforme as necessidades de projeto.
Imagino que a forma seja carregar um sprite (tileset) no modo "Multiple" separando os tiles e depois em um loop tradicional coloca-los na cena.
Como instanciar esses tiles na cena de maneira organizada e ainda pensar em layers e colisões específicas ?!?
Se alguém puder ajudar agradeceria muito.
Roger
ronasser- Iniciante
- PONTOS : 3481
REPUTAÇÃO : 2
Respeito as regras :
Re: [RESOLVIDO] Desenhando um Tile Map Simples
Isso é um sistema bem complexo que depende muito mesmo do jogo que você quer fazer...
vou precisar que você especifique um pouco melhor..
O básico mesmo seria com um for, instanciar os sprites em posições inteiras, e os sprites tem que ter posições inteiras também para encaixarem um no outro, más dependendo do sistema que você quer fazer, o metodo terá que ser diferente...
se o spawn do cenário é aleatorio, se é um gerador de TileMap ou um simples metodo para desenhar um cenario fixo, etc, etc
vou precisar que você especifique um pouco melhor..
O básico mesmo seria com um for, instanciar os sprites em posições inteiras, e os sprites tem que ter posições inteiras também para encaixarem um no outro, más dependendo do sistema que você quer fazer, o metodo terá que ser diferente...
se o spawn do cenário é aleatorio, se é um gerador de TileMap ou um simples metodo para desenhar um cenario fixo, etc, etc
Re: [RESOLVIDO] Desenhando um Tile Map Simples
Caro Marcos,
antes de mais nada agradeço a atenção.
A intenção inicial é obter uma script bem simples desses exemplos de tilemap que existem publicados pela internet. E, a partir desse script inicial, ir incrementando funcionalidades. Porém como estou iniciando na Unity gostaria de fazê-lo já com as melhores práticas da engine. Gostaria do exemplo muito básico para ter facilidade no aprendizado.
Já conheço a ui básica da Unity 5 e segui alguns exemplos, instanciando objetos, carregando sprites, fazendo algumas animações e etc.
Segue a questão de forma bem objetiva:
Recursos:
- Um spritesheet com diversos tiles(32x32)
- Um arquivo Txt contendo uma matriz com os números dos tiles a serem colocados em cada posição da tela.
Arquivo Txt (4x4)
01 01 01 01
01 02 02 01
01 03 02 01
01 01 01 01
No exemplo os codigos relativos aos tiles são: 01=muro,02=grama e 03=pedra
Como elaborar uma script na unity para desenhar o mapa acima na cena de forma que resulte em um cenário ?
antes de mais nada agradeço a atenção.
A intenção inicial é obter uma script bem simples desses exemplos de tilemap que existem publicados pela internet. E, a partir desse script inicial, ir incrementando funcionalidades. Porém como estou iniciando na Unity gostaria de fazê-lo já com as melhores práticas da engine. Gostaria do exemplo muito básico para ter facilidade no aprendizado.
Já conheço a ui básica da Unity 5 e segui alguns exemplos, instanciando objetos, carregando sprites, fazendo algumas animações e etc.
Segue a questão de forma bem objetiva:
Recursos:
- Um spritesheet com diversos tiles(32x32)
- Um arquivo Txt contendo uma matriz com os números dos tiles a serem colocados em cada posição da tela.
Arquivo Txt (4x4)
01 01 01 01
01 02 02 01
01 03 02 01
01 01 01 01
No exemplo os codigos relativos aos tiles são: 01=muro,02=grama e 03=pedra
Como elaborar uma script na unity para desenhar o mapa acima na cena de forma que resulte em um cenário ?
ronasser- Iniciante
- PONTOS : 3481
REPUTAÇÃO : 2
Respeito as regras :
Re: [RESOLVIDO] Desenhando um Tile Map Simples
básicamente você terá que utilizar uma matriz bidimensional:
isto irá guardar a posição de cada número
para fazer o instantiate dos objetos, basta fazer 2 for, um para o eixo X ( linhas ) e outro par ao eixo Y ( colunas ) da matriz
a questão ainda é, o cenário que você quer é de spawn aleatório? fixo? ou com algum esquema que você defina?
- Código:
public int[ , ] Numeros;
isto irá guardar a posição de cada número
para fazer o instantiate dos objetos, basta fazer 2 for, um para o eixo X ( linhas ) e outro par ao eixo Y ( colunas ) da matriz
a questão ainda é, o cenário que você quer é de spawn aleatório? fixo? ou com algum esquema que você defina?
Re: [RESOLVIDO] Desenhando um Tile Map Simples
Este é um script simples que elaborei apenas para demonstração... estou passando valores de uma Array simples para uma array Bidimensional e logo depois passo os valores dessa variavel bidimensional para uma outra array simples
básicamente assim que você vai atribuir valores pré determinados para prosseguir-mos com seu pedido:
Entende o que se passa neste script? ( desculpe por esta pergunta, más não tenho noção do seu nível de conhecimento, por isto estou pedindo ) :D
básicamente assim que você vai atribuir valores pré determinados para prosseguir-mos com seu pedido:
- Código:
using UnityEngine;
using System.Collections;
public class TileMap : MonoBehaviour {
public int[,] Posicao = new int[4,4];
public int[] Construcao = new int[16];
public int [] Resultado = new int[16];
void Update () {
for (int x = 0; x < 4; x++) {
for (int y = 0; y < 4; y++) {
Posicao [x,y] = Construcao[x*4+y];
}
}
//
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
Resultado[i*4+j] = Posicao [i,j];;
}
}
}
}
Entende o que se passa neste script? ( desculpe por esta pergunta, más não tenho noção do seu nível de conhecimento, por isto estou pedindo ) :D
Re: [RESOLVIDO] Desenhando um Tile Map Simples
Sistema básico feito... ficou +/- assim:
Você define com números entre 1, 2 ou 3 os objetos que serão instanciados, em ordem ( coluna > linha ) de baixo para cima, ou seja
a sequencia { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16} na matriz " Construcao " iria gerar uma matriz assim:
| 13 14 15 16 |
| 09 10 11 12 |
| 05 06 07 08 |
| 01 02 03 04 |
O script é este básicamente :D
se na sua matriz de " Objetos " você linkou apenas 1 objeto, a sua matriz de construcao só podera conter números " 1 "... se na sua matriz de Objetos, você linkar 3 objetos, a sua matriz de contrucao poderá ter numeros de 1 a 3, e assim vai...
Dúvidas poste ae :D
Você define com números entre 1, 2 ou 3 os objetos que serão instanciados, em ordem ( coluna > linha ) de baixo para cima, ou seja
a sequencia { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16} na matriz " Construcao " iria gerar uma matriz assim:
| 13 14 15 16 |
| 09 10 11 12 |
| 05 06 07 08 |
| 01 02 03 04 |
O script é este básicamente :D
- Código:
using UnityEngine;
using System.Collections;
public class TileMap : MonoBehaviour {
public int[,] Posicao = new int[4,4]; // Matriz que guarda qual objeto esta em cada posicao
public int[] Construcao = new int[16]; // Matriz onde voce define que tipo de bloco estara em cada lugar
public GameObject[] Objetos = new GameObject[3]; // matriz onde voce linka os objetos a serem instanciados
void Start () {
// ATRIBUINDO OS ITENS (DE ACORDO COM A VARIAVEL " Construcao ") A CADA POSICAO DA MATRIZ
for (int x = 0; x < 4; x++) {
for (int y = 0; y < 4; y++) {
Posicao [x,y] = Construcao[x*4+y];
}
}
//
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
Vector3 posicao = new Vector3(i,j,0);
Instantiate(Objetos[Posicao[i,j]-1],posicao,transform.rotation);
}
}
}
}
se na sua matriz de " Objetos " você linkou apenas 1 objeto, a sua matriz de construcao só podera conter números " 1 "... se na sua matriz de Objetos, você linkar 3 objetos, a sua matriz de contrucao poderá ter numeros de 1 a 3, e assim vai...
Dúvidas poste ae :D
Re: [RESOLVIDO] Desenhando um Tile Map Simples
Pow Marcos, perfeito man, ficou show de bola seu script. Nada como ter o domínio das ferramentas. Era isso mesmo q estava esperando. Vou testar aqui e posto o resultado assim que possível.
Não se preocupe com o entendimento pois compreendi bem a rotina e os loops. Tenho um conhecimento razoável de programação, sou da época dos jogos a lá z80 , processador de 8bits clock de 3,5 khz e só 16k de Ram pra fazer os jogos, geralmente em basic ou, quem fosse mais corajoso, em assembler (a linguagem dos deuses na época). Hoje ganho a vida com programação fazendo sistemas de gestão (Erps), mas sou apaixonado (sempre fui) pelo desenvolvimento de Jogos.
A matriz com os objetos posicionados irei buscar em um arquivo texto para ter a liberdade de usar qualquer editor externo. Por enquanto, como teste, vou colocar os valores na matriz no próprio script.
Uma pergunta,na função em que vc instancia os objetos passando parâmetros com as posições de cada tile vc passa números inteiros, como a unity sabe se um tile comecará exatamente ao lado do anterior , se eles tem 32x32 pixels ou outro tamanho qualquer ?
Vlw !!!!
Não se preocupe com o entendimento pois compreendi bem a rotina e os loops. Tenho um conhecimento razoável de programação, sou da época dos jogos a lá z80 , processador de 8bits clock de 3,5 khz e só 16k de Ram pra fazer os jogos, geralmente em basic ou, quem fosse mais corajoso, em assembler (a linguagem dos deuses na época). Hoje ganho a vida com programação fazendo sistemas de gestão (Erps), mas sou apaixonado (sempre fui) pelo desenvolvimento de Jogos.
A matriz com os objetos posicionados irei buscar em um arquivo texto para ter a liberdade de usar qualquer editor externo. Por enquanto, como teste, vou colocar os valores na matriz no próprio script.
Uma pergunta,na função em que vc instancia os objetos passando parâmetros com as posições de cada tile vc passa números inteiros, como a unity sabe se um tile comecará exatamente ao lado do anterior , se eles tem 32x32 pixels ou outro tamanho qualquer ?
Vlw !!!!
ronasser- Iniciante
- PONTOS : 3481
REPUTAÇÃO : 2
Respeito as regras :
Re: [RESOLVIDO] Desenhando um Tile Map Simples
Estou elaborando o sistema ainda, não está completo, más eu fiz objetos com escala 1x1 no editor, por isso estou passando parametros inteiros
na Unity não contumo trabalhar com pixels pois sempre gera problemas com a resolução dos jogadores
na Unity não contumo trabalhar com pixels pois sempre gera problemas com a resolução dos jogadores
Re: [RESOLVIDO] Desenhando um Tile Map Simples
Por hora este é o script:
ainda estou trabalhando nele
- Código:
using UnityEngine;
using System.Collections;
public class TileMap : MonoBehaviour {
public GameObject[] Objetos = new GameObject[3];
public int Largura, Altura;
public int[] Construcao;
private int[,] Posicao;
void Start () {
Posicao = new int[Largura, Altura];
for (int x = 0; x < Largura; x++) {
for (int y = 0; y < Altura; y++) {
Posicao [x,y] = Construcao[x*Altura+y];
}
}
for (int i = 0; i < Largura; i++) {
for (int j = 0; j < Altura; j++) {
Vector3 posicao = new Vector3(i,j,0);
Instantiate(Objetos[Posicao[i,j]],posicao,transform.rotation);
}
}
}
}
ainda estou trabalhando nele
Re: [RESOLVIDO] Desenhando um Tile Map Simples
Foi o que deu pra fazer:
Amanha faço um tuto explicando como utilizar bem certo...
- Código:
using UnityEngine;
using System.Collections;
public class TileMap : MonoBehaviour {
public GameObject[] Objetos = new GameObject[3];
public int Largura, Altura;
public int[] Construcao;
private int[,] Posicao;
void Start () {
Posicao = new int[Largura, Altura];
if ((Largura * Altura) > Construcao.Length) {
Debug.Log (" O tamanho da sua lista 'Construcao' deve ser de " + Largura*Altura + " unidades para evitar erros ");
}
for (int x = 0; x < Largura; x++) {
for (int y = 0; y < Altura; y++) {
Posicao [x,y] = Construcao[x*Altura+y];
}
}
for (int i = 0; i < Largura; i++) {
for (int j = 0; j < Altura; j++) {
Vector3 posicao = new Vector3(i,j,0);
if(Posicao[i,j] < Objetos.Length){
Instantiate(Objetos[Posicao[i,j]],posicao,transform.rotation);
}
else {
Debug.Log ("O item que voce esta tentando criar nao existe na sua variavel 'Objetos' portanto nenhum item foi criado na posicao: (" + i + ", " + j + ")");
}
}
}
}
}
Amanha faço um tuto explicando como utilizar bem certo...
Re: [RESOLVIDO] Desenhando um Tile Map Simples
Legal Marcos, o resultado ta muito bom, vou testar aqui também o Script atualizado e faço minhas considerações.
A dúvida quanto ao tamanho dos tiles em pixels em relação ao posicionamento na tela através de números inteiros foi em função do meu desconhecimento da Unity. Quando vc importa um sprite tem um campo chamado "Pixels Per Unit" que eu desconhecia , o preenchimento correto desse campo (32 no meu caso) resolve o "mistério"
Vlw.
A dúvida quanto ao tamanho dos tiles em pixels em relação ao posicionamento na tela através de números inteiros foi em função do meu desconhecimento da Unity. Quando vc importa um sprite tem um campo chamado "Pixels Per Unit" que eu desconhecia , o preenchimento correto desse campo (32 no meu caso) resolve o "mistério"
Vlw.
ronasser- Iniciante
- PONTOS : 3481
REPUTAÇÃO : 2
Respeito as regras :
Re: [RESOLVIDO] Desenhando um Tile Map Simples
Na verdade eu criei quads e adicionei as texturas a eles... um Quad tem como tamanho padrão 1x1, o que facilita muito e também tem uma geometria MUITO leve, proximo a de um sprite, entao é vantagem usa-los
Tópicos semelhantes
» [RESOLVIDO] Dúvida simples com script ao chamar uma função
» [RESOLVIDO] Duvida simples
» [RESOLVIDO] Ajuda com script simples
» [RESOLVIDO] Ajuda com animação simples de item.
» [RESOLVIDO] Cálculo simples dando errado
» [RESOLVIDO] Duvida simples
» [RESOLVIDO] Ajuda com script simples
» [RESOLVIDO] Ajuda com animação simples de item.
» [RESOLVIDO] Cálculo simples dando errado
SchultzGames :: UNITY 3D :: Resolvidos
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos