Menu

Tutorial Unity 2D #5 – Cenário – Parte 1

Olá meus queridos Indies, preparados para mais uma parte do tutorial de Unity 2D? Nessa semana como já tinha falado na passada, vamos ver como movimentar a câmera de uma forma diferente e construir nosso primeiro cenário com vários obstáculos e objetos interativos. Como esta parte ficou bastante grande, irei dividir em duas partes a construção do cenário.

Para começar, vamos trabalhar primeira a câmera, afinal se vamos construir um cenários maior, vamos necessitar que a câmera nos siga, não é mesmo? Existem duas formas de fazermos a câmera nos seguir. A primeira seria apenas jogar o objeto Main Camera dentro do Objeto Player.

01 - Main Camera - Unity

Com isso a câmera já segue o nosso personagem, porém esta não é a forma mais correta para se fazer em jogos que não sejam em primeira pessoa. Por que? Bom, caso você se lembre no nosso script de movimentação, nosso personagem ao andar para trás, ela dá uma volta em 180º, e se a câmera estiver presa a ele, significa que ela também fará esse movimento. Desta forma, o que temos que fazer para resolver isso, é um script que faça com que a câmera siga o player. E desta forma podemos fazer com que a câmera seja até mais suave comparado a herdando as características do Player na aba Hierarchy.

Para melhorar nosso conhecimento em script, vamos fazer de uma forma diferente do que já fizemos antes. Anteriormente sempre deixamos as variáveis como public e colocavamos a informação direto da aba Inspector no Unity, correto? Dessa vez, vamos pegar valores pelo script. Assim em todas as fases do nosso jogo ou sempre que chamarmos um script, não precisaremos reconfigurar essas informações.

O primeiro passo será colocar uma Tag em nosso player para identifica-lo. Para isso após selecionar nosso objeto Player na aba Hierarchy, selecione a Tag Player na aba Inspector. Caso ela não exista, basta criar em “Add Tag…”

 02 - Tag Player - Unity

Agora vamos criar nosso Script para câmera. Vá à aba Project, na pasta scripts, botão direito e “Create >> C# Script”. Nomeei o script como Camera e dê dois cliques para abrir o MonoDevelop.

No nosso script, vamos criar a seguinte variável:

	private Transform player;

A variável player, como vocês já devem imaginar, serve para a gente pegar a posição do nosso objeto Player. Estamos colocando como private desta vez, pois iremos pegar o valor direto pelo script. Mas caso deseje colocar como public e apenas selecionar o player lá no Unity, também funcionará.

No nosso Start, vamos dizer quem é o player da seguinte forma:

	void Start () {
		player = GameObject.FindGameObjectWithTag("Player").transform;
	}

Nessa linha estamos procurando um objeto com a tag Player através do método FindGameObjectWithTag, e sem seguida estamos jogando as propriedades do transform do objeto na variável player.

Para finalizar nosso script da câmera, na função Update, vamos adicionar duas novas linhas.

	void Update () {
		Vector3 novaPosicao = new Vector3 (player.position.x, player.position.y, transform.position.z);
		transform.position = Vector3.Lerp (transform.position, novaPosicao, Time.time);
	}

Na primeira linha criamos uma variável chamada novaPosicao, que é um vetor com posição X, Y e Z. Para X e Y, colocamos a posição em que nosso player se encontra, que será a posição destino da câmera. Na posição Z, mantemos a mesma posição da câmera, do contrário, ela poderá se aproxima ou afastar, perdendo o personagem de vista e não é isso que queremos.

Na segunda linha, dizemos que a nova posição da câmera (transform.position) vai receber Vector3.Lerp (transform.position, novaPosicao, Time.time), onde Lerp será responsável por fazer a movimentação da câmera da posição onde se encontra (transform.position), para a nova posição (novaPosicao), na velocidade  determinada (Time.time). Caso você opte que a câmera siga na velocidade exata, ou seja em que é processada, use o Time.time. Caso você troque por Time.deltaTime, verá a câmera se mover de forma mais suave e lenta, porém existe formas melhores de fazer uma movimentação suave, sem perder o personagem de vista.

Feito tudo isto, basta no Unity vincular o script Camera ao nosso objeto Main Camer e dar play. No final do Tutorial, deixarei o Script pronto, para quem quiser apenas copiar e colar.

Agora é hora de montar nosso cenário. Uma das formas de mudar o fundo do nosso cenário é através da própria câmera. Ao clicar no objeto Main Camera, você verá na aba Inspector, um atributo chamado background, onde podemos mudar a cor do fundo do nosso cenário.

03 - Fundo - Unity

Porém esse background é bastante simples, não? Neste caso baixem a imagem abaixo e bora criar um fundo melhor.

montanha

Vamos repetir praticamente o mesmo que fizemos com o chão no tutorial de adicionar o personagem (http://jogosindie.com/tutorial-de-unity-2d-2-adicionando-o-personagem/). Importe a imagem para a pasta texture e na aba Inspector, mude seu tipo de textura para Texture. Em seguida na pasta materials, crie um novo material com o nome montanha. Seguindo os mesmos passos de quando criamos o chão. No material criado selecione a textura da montanha e mude o Shader para Unlit/Texture.

04 - Montanha - Unity

Material pronto, vamos coloca-lo em cena. No menu vá em GameObject >> Create Empty. Na aba Hierarchy, troque o nome do objeto criado para montanha e adicione os componentes Mesh >> Mesh Filter e Mesh >> Mesh Renderer. No Mesh Filter, selecione o Mesh: Quad, e no Mesh Renderer escolha o material montanha.

 07 - Montanha 5 - Unity

Para finalizar o nosso background, basta posicionar o seu objeto montanha no local desejado, na aba Inspector, trocar a posição de z para 1, para que ele fica atrás dos demais conteúdos do cenário. Aumentar para o tamanho desejado (Scale) e mudar o tiling no eixo de x, de acordo com a quantidade de vezes que você quer que a imagem se repita.  (Caso não se lembre do tiling, dê uma revisa na segunda parte do tutorial).

08 - Montanha 6 - Unity

Vamos repetir todo esse mesmo processo para criar lava no nosso cenário. Baixe a imagem:

lava

Importem para a pasta texture, criem um material chamado lava com o Shader unlite/Transparent Cutout. Crie também um objeto chamado lava, que receberá no Mesh Renderer o material lava. Ah, lembre-se de posicionar a lava na posição -1 no eixo z, para ficar na frente do resto do cenário e posiciona-lo abaixo do chão. Seu projeto ficará parecido com isto:

09 - Lava - Unity

Bom, acho que agora podemos criar um script para lava, que quando o tocar na lava, volte para sua posição original. Então primeiro vou pedir que vocês adicionem um Box Collider 2D em seu objeto lava (Add Component >>Physics 2D >> Box Collider 2D) e marque a opção Is Trigger.

 10 - Trigger - Unity

Agora vamos fazer o mesmo passo que já devem estar acostumado. Na aba Project, vamos criar um C# Script chamado Lava e vamos adicionar a mesma variável do script câmera, deixando nosso código:

using UnityEngine;
using System.Collections;

public class Lava : MonoBehaviour {
	private Transform player;

	// Use this for initialization
	void Start () {
		player = GameObject.FindGameObjectWithTag ("Player").transform;
	}
	
	// Update is called once per frame
	void Update () {
	
	}
}

Agora é a hora de conhecer um evento novo que vocês ainda não viram, mas que vão usar muito. No seu script Lava, crie um método void chamado OnTriggerEnter2D, recebendo uma variável do tipo Collision2D.

void OnTriggerEnter2D (Collider2D colisor) {
}

Esse método é herdado do MonoBehaviour, assim como o Start e o Update. Ele ocorre no momento em que o objeto que estiver com o script, colide com algo, que será o Collision2D. Além do OnTriggerEnter2D, também possuímos outros tipos, então bora a explicação:

OnCollisionEnter2D (Collision2D colisor) = Ocorre no exato momento em toca no objeto.

OnCollisionExit2D (Collision2D colisor) = Ocorre no exato momento em que deixa de tocar no objeto.

OnCollisionStay2D (Collision2D colisor) = Ocorre enquanto estiver tocando no objeto

OnTriggerEnter2D (Collider2D colisor) = Ocorre no exato momento em que toca o objeto e a opção Is Trigger estiver habilitada.

OnTriggerExit2D (Collider2D colisor) = Ocorre no exato momento em que deixa de tocar no objeto e a opção Is Trigger estiver habilitada.

OnTriggerStay2D (Collider2D colisor) = Ocorre enquanto estiver tocando no objeto e a opção Is Trigger estiver habilitada.

A opção Is Trigger pode ser marcada nos diferentes tipos de Collider 2D em Physics 2D (Box Collider 2D, Circle Collider 2D…) e permite que outros objetos consigam passar por esse objeto.

Vamos um exemplo pratico: Eu tenho uma bandeira e quero que meu personagem consiga passar essa bandeira sem ficar preso nela, então eu adicionarei um Collider 2D, para que quando eu toque nesse objeto, ocorra uma ação desejada (Recuperar vida por exemplo), mas que eu não precise pular por cima dessa bandeira sempre que quiser passar por ela. Ficou mais claro quando usar a opção Is Trigger?

Bom, então vamos voltar ao nosso script. Dentro do método OnCollisionEnter2D, vamos verificar se o objeto possui a tag player. Caso possua, ele deverá voltar para a sua posição inicial (X = 0, Y = 0, Z = 0, no meu caso).

	void OnTriggerEnter2D (Collider2D colisor) {
		if (colisor.gameObject.tag == "Player") {
			player.position = new Vector3(0, 0, 0);
		}
	}

Feito isto, basta adicionar o script lava no nosso objeto lava e testar.

Ocorreu tudo certo? Então vamos continuar a montar o nosso cenário e vamos criar mais 3 plataformas (chao).  Copie e cole o objeto chao 3 vezes em posições diferentes, de forma que fique:

1 – Posição inicial

2 – Segunda plataforma próxima

3 – Ultima bem afastado das demais.

13 - respawn - Unity

Nosso primeiro obstáculo aqui será uma bola de fogo entre o primeiro e o segundo chão. Para isto vamos criar um objeto BolaFogo, que sairá da lava (Por isso a opção Is Trigger está habilitada, do contrário a bola de fogo iria chocar com a lava e não sairia do canto).

Objeto criado, importe esse Sprite para seu projeto:

sprite_fire

Mude o Sprite Mode para multiple e no Sprite Editor dê um Slice no modo automático. Ele não deverá cortar tão certo, mas nós só precisamos da bola de fogo subindo. Com o Sprite cortado,  use os 4 últimos sprites para gerar uma animação da bola de fogo virada para cima.  (Esses passos estão na aula de animação), não será preciso nenhum animator.

Entendeu porque eu peço para que repitam os passos até aprenderem? Se eu for explicar como fazer tudo que já foi visto, vai ficar enorme o tutorial. Porém qualquer dúvida, basta deixar nos comentários, que ficarei feliz em ajudar.

Agora coloque o Sprite com a animação dentro do objeto BolaFogo, na aba Hierarchy (Cuidado, com a posição de ambos, recomendo até deixando os dois nos eixos x =0, y = 0, z = 0).

Vamos adicionar um Circle Collider 2D ao redor da bola de fogo e um Rigidbody 2D.

12 - Bola Fogo - Unity

Agora vamos precisar criar dois scripts. O primeiro será o BolaFogo. Então já sabem os passos. Na pasta scripts, criem um C# Script, chamado BolaFogo. Este Script terá a função de destruir o objeto após certo tempo, para não ficar alocando memoria desnecessária e para fazer a bola de fogo subir.  Então bora lá

No script BolaFogo, no método Start, iremos adicionar a seguinte linha:

	void Start () {
		Destroy (gameObject,2f);
	  rigidbody2D.AddForce (transform.up * 400f);
	}

Aqui estamos dizendo que depois que este objeto foi criado (Start), ele será destruído em 2 segundos (Destroy) e que assim que for criado (Start), ele irá da um salto (rigidbody2D.AddForce). O 2f, é equivalente aos segundos de atraso para objeto ser destruído e o 400f, é o equivalente a força do pulo. Caso você queira controlar isto fora do script, basta criar as variáveis public para fazer essas funções.

Quase tudo pronto, só temos agora que fazer nossa bola de fogo, mudar de direção, quando estiver caindo. Então vamos adicionar a variável private posicaoY.

	private float posicaoY = 0f;

No Start, vamos guarda a primeira posição de Y, quando criado:

	void Start () {
		Destroy (gameObject,2f);
		rigidbody2D.AddForce (transform.up * 400f);
		posicaoY = transform.position.y;
	}

E no update, vamos verificar se a bola de fogo está subindo ou descendo.

	void Update () {
		if (posicaoY > transform.position.y) { //Descendo
			transform.eulerAngles = new Vector2(180, 0);
		}
		posicaoY = transform.position.y;
	}

Caso em algum momento a posicaoY (Posição anterior da bola de fogo), for maior que a transform.position.y (Posição atual da bola de fogo), significa que ela começou a cair e por isso iremos inverter o objeto de cabeça para baixo, para fazer a animação da bola de fogo caindo.

Salve o script, coloque ele no objeto BolaFogo e teste. Funcionou tudo certinho? Então vamos criar um prefab disto. O que é um prefab? Um prefab é um objeto já pronto com todos os dados configurados. Neste caso, sempre que precisarmos chamar a BolaFogo, não vamos ter que criar tudo de novo, basta chamar o prefab, entendeu?

Então crie uma pasta na aba Project, chamado prefabs e nesta pasta clique com o botão direito e crie um Prefab (Create >> Prefab).

13 - prefab - Unity

Após isto arraste o objeto BolaFogo da aba Hierarchy pra o prefab na aba Project. Pronto, prefab criado.

Para finalizar nosso projeto por hoje, vamos fazer um objeto que será a fonte que fica criando essas bolas de fogo. O nosso respawn. Crie um objeto e o chame de RespawnBolaFogo. Para melhor visualiza-lo, crie uma marcação para o objeto, assim como fizemos com o chaoVerificador e o posicione aonde deverá ter as bolas de fogo (Entre o primeiro e o segundo chão).

Agora vamos criar o script de nosso Respawn. Na pasta scripts, clique com o botão direito e crie um C# Script chamado RespawnObjeto. Este script será genérico para fazer o respawn de qualquer objeto do cenário, que você deseje.

No script vamos adicionar três variáveis:

public GameObject objeto;
public float tempoRespawn = 0f;
private float tempoCorrido = 0f;

Aonde o objeto, será algum prefab, no nosso caso o BolaFogo.  E o tempoRespawn, será o tempo que irá demorar para ele criar e o tempoCorrido é quanto tempo já passou desde o ultimo respawn.

No método Update, vamos adicionar os seguintes códigos:

	void Update () {
		tempoCorrido += Time.deltaTime;
		if (tempoCorrido >= tempoRespawn) {
			Instantiate(objeto, transform.position, objeto.transform.rotation);
			tempoCorrido = 0f;
		}
	}

Onde vamos aumentando o tempoCorrido (tempoCorrido += Time.deltaTime) e depois verificamos se o tempoCorrido já alcançou o tempo determinado para criar um novo item (tempoCorrido >= tempoRespawn). Caso sim, criamos um novo objeto, na posição do respawn e na rotação original do objeto. Por fim zeramos a contagem do tempoCorrido,  para que ele reinicie a verificação do tempo.

Salve o script e volte ao unity. Lá você irá vincular o seu Script RespawnObjeto ao objeto RespawnBolaFogo, e na variável publica objeto, você irá adicionar o prefab BolaFogo.

14 - respawn script - Unity

Bom, por hoje é basicamente isso, até porque acho que você já tiveram bastante conteúdo. Para a próxima parte do tutorial vou continuar a montar o cenário, com objetos que dão pulo mais alto, plataformas que se movem sozinha, e plataformas que caem quando o usuário pisa em cima. Se tiverem mais sugestões do que querem que o cenário possua, basta falar.

Também gostaria de saber se vocês tiveram dificuldade nesse tutorial, para eu saber o que posso melhorar no próximo, se ficou muito corrido, muito grande ou qualquer outra coisa, podem deixar suas sugestões, afinal de contas esse tutorial é para vocês.

Abaixo deixarei os scripts criados e o jogo para que possam ver como ele esta até o exato momento.

BolaFogo.cs

using UnityEngine;
using System.Collections;

public class BolaFogo : MonoBehaviour {

	private float posicaoY = 0f;

	// Use this for initialization
	void Start () {
		Destroy (gameObject,2f);
		rigidbody2D.AddForce (transform.up * 400f);
		posicaoY = transform.position.y;
	}
	
	// Update is called once per frame
	void Update () {
		if (posicaoY > transform.position.y) { //Descendo
			transform.eulerAngles = new Vector2(180, 0);
		}
		posicaoY = transform.position.y;
	}
}

Camera.cs

using UnityEngine;
using System.Collections;

public class Camera : MonoBehaviour {

	private Transform player;

	// Use this for initialization
	void Start () {
		player = GameObject.FindGameObjectWithTag("Player").transform;
	}
	
	// Update is called once per frame
	void Update () {
		Vector3 novaPosicao = new Vector3 (player.position.x, player.position.y, transform.position.z);
		transform.position = Vector3.Lerp (transform.position, novaPosicao, Time.time);
	}
}

Lava.cs

using UnityEngine;
using System.Collections;

public class Lava : MonoBehaviour {
	private Transform player;

	// Use this for initialization
	void Start () {
		player = GameObject.FindGameObjectWithTag ("Player").transform;
	}
	
	// Update is called once per frame
	void Update () {
	
	}

	void OnTriggerEnter2D(Collider2D colisor) {
		if (colisor.gameObject.tag == "Player") {
			player.position = new Vector3(0, 0, 0);
		}
	}
}

RespawnObjeto.cs

using UnityEngine;
using System.Collections;

public class RespawnObjeto : MonoBehaviour {

	public GameObject objeto;
	public float tempoRespawn = 0f;
	private float tempoCorrido = 0f;

	// Use this for initialization
	void Start () {
	
	}
	
	// Update is called once per frame
	void Update () {
		tempoCorrido += Time.deltaTime;
		if (tempoCorrido >= tempoRespawn) {
			Instantiate(objeto, transform.position, objeto.transform.rotation);
			tempoCorrido = 0f;
		}
	}
}

Parte 6 – Cenário parte 2

Parte 4 – Animação

Para ver o índice completo do jogo e como o jogo está, visite o link abaixo

Índice – Unity 2D

Criador do Jogos Indie, amante de jogos, terror, música, anime e programação. Estudante de mestrado com foco em jogos na educação. Louco por Resident Evil e... sei lá, acho que é isso O.o

97 comments

  1. e o que acontece quando o personagem acertar a bola de fogo?

  2. Jogos Indie disse:

    Por enquanto nada, Thiago. Irá apenas colidir normal. Mas quando a gente fizer as vidas, hp e game over, ai sim ela terá uma ação quando colidirem.

  3. Marcos Cruz disse:

    ótimo trabalho cara, ancioso pela próxima aula

  4. Jogos Indie entendi,e quando sai o próximo tutorial?

  5. Jogos Indie disse:

    Thiago Serrano Affonço Vou tentar lançar na sexta que vem dia 03/10 ^^

  6. Jogos Indie vlew estou ansioso!!

  7. Jogos Indie disse:

    Vou tentar arrumar um tempo amanhã para fazer o post e trazer na sexta feira ^^

  8. Marcelo disse:

    Ola Jogos Indie! Arquivei todos os tutoriais do 1 ao 6, agora mãos à obra para criar um joguete aqui! Queria fazer de inicio um jogo de uma fase só para pegar experiencia, o cenario do chão eu gostaria que fosse variado, variando varios elementos, como plataformas grandes e pequenas para pular, buracos entre elas, algumas plataformas maiores para se ir subindo nela até chegar em lugares altos, … jogos indie tem como fazer isso? queria que o cenario fosse sumindo á medida que o personagem vai subindo a lugars altos, dá para fazer isso ou aí já é muito trabalhoso?

    Os cenarios eu teria que desenhar, por exemplo, um chão bem longo para repetir elementos? a camera do Unity consegue pegar esse chao inteiro mesmo que fique grande?

  9. Marcelo disse:

    E aí Carlos!!! Pois bem, veja esse video do Metal Slug X no youtube como exemplo de um cenario (http://www.youtube.com/watch?v=sfParGc8BJw). Vc vê que à medida que o personagem vai andando o cenário vai mudando e o que passou vai ficando para trás e vindo mais cenario novo. aí é que tá, como fazer uma cenario assim com paisagens e elementos novos que vão aparecendo?

    • Acho que entendi Marcelo. Eu pensei que tu estava falando um jogo que nunca mudasse de fase. Mas no caso você esta falando de um jogo de fase única, só para teste mesmo e não que o jogo é um jogo de fase única.

      Isso ai que tu esta querendo é o papel de um Level Designer. É o cara que constrói os cenários. Nesses tutorias aqui do Jogos Indie eu meio que ensino a construir um cenário de forma simples. Mas para ser algo tão bem construído assim, normalmente quem trabalha com isso constrói os cenários no photoshop ou outro programa de edição de imagem. Ou seja, ele desenha na mão ou tem vários sprites e juntam no photoshop e faz os remendos. Depois dividir o cenário em camadas (layers) e joga no Unity aplicando os colliders, animações e movimentações.

      No curso de Game Designer que eu recomendei aqui (http://jogosindie.com/curso-design-de-games-2d/) lhe ajuda a dar essa noção de como realmente se deve construir um cenário de um jogo, algo bem elaborado. O problema é que o curso meio carinho, embora valha a pena.

      Mas para testes, acho que você pode fazer seguindo o material aqui do Jogos Indie (Mas é lógico que não de forma não tão profissional quanto a de um Level Designer). Para entender melhor ao invés de usar o fundo de montanha como uso aqui no nosso tutorial, poderia usar esse aqui oh:

      http://www.majhost.com/gallery/Zigge/Backgrounds/Desert/desert_2.png

      Ou seja, é igual ao que estamos fazendo nesse tutorial. À medida que o personagem vai andando esse cenário é visto lá trás.

      Outro exemplo que posso lhe dá é o Jogo do Mario. Imagine que esse cenário foi montado todo solto por um programa de edição de imagem:

      http://www.wallpaperup.com/uploads/wallpapers/2012/10/25/20688/1b30f906a936eef98215ba16a937e21d.jpg

      E depois usando uma engine só jogou os conteúdos na posição desejada. Nós quando jogamos Mario não vemos o mapa todo de uma vez certo? Apenas aonde o personagem está. O resto do cenário vamos descobrindo a medida que o personagem anda e a câmera o vai seguindo.

      Quanto à câmera, se você quisesse que ela não voltasse, ficaria tudo a cargo do script dela e teria duas paredes invisíveis em sua extremidade para não deixar o personagem sair quando a câmera estiver parada. E quando estiver livre verifica se o personagem cruzou o meio da tela, a tela irá andar.

      Se for isso que tu está querendo pode parece complicado, mas não é tanto complicado assim não. Posso montar um exemplo do jogo e mandar para você o pacote com os scripts, sprites, animações. Porém eu vou ter prova nesta quinta feira, então não prometo pegar em nada antes de quinta, ok? Pode aproveitar esse tempo para dá uma estudada, pois assim eu só preciso comentar os scripts explicando o seu funcionamento (Explicar a construção do jogo todo dá um trabalho danado e estou devendo alguns favores ainda para a antiga empresa que eu trabalhava que quero ver se me livro até sexta >.<) Se não for isso, então explica melhor para eu entender ^^

  10. Marcelo disse:

    ((“Ou seja, ele desenha na mão ou tem vários sprites e juntam no photoshop e faz os remendos.”)):

    Carlos, é exatamente isso que imaginei de como esses cenários são feitos. Então é papel de quem entende mesmo. E sim, eu dei uma olhada lá no site Spartan sobre o curso, pretendo adquiri-lo para experimentar.

    ((“Depois dividir o cenário em camadas (layers) e joga no Unity aplicando os colliders, animações e movimentações.”

    Outro exemplo que posso lhe dá é o Jogo do Mario. Imagine que esse cenário foi montado todo solto por um programa de edição de imagem:”
    E depois usando uma engine só jogou os conteúdos na posição desejada. Nós quando jogamos Mario não vemos o mapa todo de uma vez certo? Apenas aonde o personagem está. O resto do cenário vamos descobrindo a medida que o personagem anda e a câmera o vai seguindo.”

    E quando estiver livre verifica se o personagem cruzou o meio da tela, a tela irá andar.)):

    E é exatamente o que eu quero fazer como na imagem do super mario, um cenário grande e completo que vai aparecendo para frente, trás, cima e baixo conforme a camera vai seguindo o personagem. Quero que a câmera percorra todo o cenário.

    Mas o designer faz o cenário em partes, junta essas partes com um programa como o Photoshop, em seguida junta tudo, blz, aí na hora que ele importa para o Unity 3d ou Construct 2 fica pequeno, ou seja, o zoom diminui, é isso mesmo? Se for o caso, o Unity por exemplo consegue ampliar esse cenário na hora que o jogo estiver pronto, sem perder a qualidade da imagem? me explique melhor isso.
    Se não se importar, me manda sim um exemplo do jogo com os scripts, sprites e animações. Envie para meu email, posso informar email pessoal aqui?

    Aquele cenário do deserto está ótimo para pelo menos eu testar na criação de um jogo, só preciso agora ir aprendendo os scripts.

    E sim pode ficar tranquilo, me envie quando puder, desde que não te atrapalhe na suas tarefas e estudos. 😀

  11. 1 – Bom se você quer a camera Livre, então basta seguir esse tutorial aqui do Jogos Indie, que é exatamente o que tu quer O.o.

    2 – Quanto a ampliar a imagem, você pode amplia-la de várias formas:
    2.1 – Aumentar a imagem ao cria-la (É a forma ideal de fazer)
    2.2 – Dando o Zoom na camera do Unity (Pode ficar meio desfocado)
    2.3 – Aumentando a escala (Scale no Transform da aba Inspector, mas também pode ficar desfocado)
    2.4 – Se a imagem puder repetir, você pode adicionar ela como material e repetir seu tiling. (Nesse mesmo post fala como fazer isso)

    3 – E se esse script tutorial serve, posso mandar hoje mesmo. Basta enviar teu email pelo seção de contatos (http://jogosindie.com/contato/), pois se enviar aqui, corre o risco de algum bot de spam pegar ele e ficar enviando spams para teu email.

    4 – Dá só uma olhada no exemplo na página Indice (http://jogosindie.com/indice-unity/) e ver se é algo assim.

  12. Marcelo disse:

    Não cheguei a ler esse tutorial na integra, salvei ele no meu pc para ler com calma depois, pode deixar que eu vou reservar um tempo para isso.

    Vi a imagem da pagina Indice e o que não quero que aconteça é a imagem da montanha de fundo embaçada, desfocada. Só o personagem, o chão e a lava estão nítidos. Quero que a nitidez seja no cenario como um todo, aí nesse caso eu devo seguir o que vc disse no item 2.1? Como eu aumento a imagem? Seria aumentar ela como eu quiser desde que fique nítida, usando um programa de edição de imagens como o photoshop? Apos eu aumentar a imagem a camera do Unity vai importar a imagem no tamanho que eu a criei?

    • No caso seria o 2.1 sim, mas isso só é possível quando se esta criando a imagem e não editando. Ou seja quando a pessoa cria/desenha o cenário, já faz no tamanho correto, entendeu?

      Se for aproveitar os sprites, o correto é você procurar sprites que já possuam alguma semelhança de escalas.

  13. Romério disse:

    Como vai Carlos? Meu nome é Romério e to querendo desenvolver um projeto de um jogo seguindo meio que os tutorias daqui sabe? O que eu quero fazer é tipo: mapa do Super Mario com os inimigos, caixas surpresa e tals só que no lugar do Mario eu queria por o Shang Tsung do mortal kombat 3, e eu ja tenho todos os sprites dele como: lutando, correndo, pulando,mandando bolas de fogo, transformando e muitos outros movimentos.
    Os sprites são todos de movimentos ele nao fica parado como o seu personagen e como se fosse no jogo do mk mesmo, mas aonde eu quero chegar é queria saber se você pudesse fazer um tutorial mais concentrado em sprite e animação e se puder dar algumas dicas, ideias mandars umas imagens, textura e o mais importante os scripts porque não sou muito bom com programação. Se puder ajudar eu agradeceria muito você so muito faz do “JogosIndie”

    • Opa Romério, beleza?

      Primeiro gostaria de te agradecer.

      Quanto a fazer o conteúdo, meu tempo está mais apertado do que eu prévia estar nesse período. Estou com bastante conteúdo atrasado, mas vou tentar fazer o máximo para te ajudar, porém um tutorial me custa bastante tempo, por isso que só faço um a cada 15 dias =S

      Todavia, bora fazer o seguinte. O que você quer é foco só nos sprites, correto? Logo posso ignrar cenário e os inimigos? Se for isso, Manda para o meu e-mail ([email protected]) os sprites e me diga exatamente as animações que você quer, que eu tentarei fazer isso ao longo dessa semana. Se for o jogo completo, como vida, passar de fase, pontuação, chefes, mapa global (de escolher a fase), ai teremos que ir com calma por partes, dividindo por semanas, pelo menos até as minhas férias em Dezembro chegar.

      Pode ser assim?

      • Romério disse:

        Primeiramente obrigado pela atenção olha é exatamente isso o que eu a parte de cenário e os inimigos e irrelevante agora o que eu quero mesmo é fazer tipo assim se tiver geito:
        Quando ele andar fazer a animação de andar quando pular e fazer seus ataques especias sabe e se der fazer tipo comandos tipo assim tras, tras, k por exemplo fazer ele trasnformar em outra pessoas do mk ou entao se tiver geito de poder jogar com um controle de ps entende?

        • Vou trabalhar nas animações que você enviou por email. Quanto a Joystick pode ser feito como mostra no tutorial de programação, na parte de Inputs, porém o controle creio que seria de Xbox, por ser compatível com Windows.

          Quanto as transformações é algo mais avançado, pois mudará todas as animações, então bora por partes. Primeiro é entender e controlar um personagem, senão é capaz de você desanimar com um monte de recurso avançado.

  14. jonathanalis disse:

    Olá, estava fazendo, direitinho, mas travei aqui na lava. (antes da bola de fogo). Esse is trigger tá me deixando na dúvida.
    Fiz exatamente como dito ae, mas quando marco o is trigger na lava, o personagem passa direto pela lava.
    Quando marco is trigger no personagem, ele não encosta nem no chão.

    Quando estão ambos os triggers desmarcados, a colisão funciona, o personagem não atravessa a lava.
    Mas não funciona o evento pra voltar pra posição inicial.

    Porém tudo funcionou quando eu usei o método onCollisionEnter2D no lugar do onTriggerEnter2D…
    Pensei em deixar assim com o collision no lugar do trigger, mas na parte da bola de fogo eu não poderia prosseguir…
    Alguma coisa que eu fiz errado, ou não entendi?
    Obrigado.

  15. Samuel disse:

    Boa noite, Tô com um pequeno probleminha aqui e não tô sabendo como resolver. Fiz como dito no tutorial. Coloquei a o prefab da bola de fogo no respawnObjeto, porem, quando a bola de fogo é criada na segunda vez, ela aparece no mesmo local onde meu personagem está, ao inves de aparecer onde deveria, no espaço entre os dois blocos ‘-‘ . Gostaria muito de uma “luz” pra resolver esse problema e poder continuar com o tutorial. Não que isso esteja impedindo de continuar, mas é que não gosto de deixar as coisas incompletas e mal feitas, então.. agradeço a qualquer ajuda. Obg pela atenção =]

    ps: Gostei muito do tutorial, bem explicativo e claro. Continuem assim!! ^^

  16. João Marques disse:

    Bom dia.

    Alguém sabe me dizer se este tutorial é compatível com a versão 5 do Unity?

    Porque, está acontecendo algumas coisas estranhas, principalmente nesta parte, que ao tentar realizar o respawn gera diversos erros, pois ele destrói o objeto antes de usa-lo, sendo assim gerá object not reference…

    Não tem erro no código, pois foi tudo via ctrl c ctrl v..

    Alguém com o mesmo problema?

  17. carloswgama disse:

    Opa João. Esse tutorial foi criado na época do 4.6, na versão 5 eles mudaram algumas coisas no código também (Adicionaram novos recursos e removeram outros), então algumas funcionalidades realmente mudaram.

  18. João Marques disse:

    Hmm, muito obrigado!

    Vou baixar o 4.6 então…

  19. João Marques disse:

    Também gostaria de atualizar o código para o Unity 5…

    Porém o erro é estranho.. vou ter que debugar, porque ele está destruindo o objeto antes de chegar no respawn.. Quando se cria os objetos, ele ficam guardados em algum array ou algo semelhante?

    Porque caso fosse assim, eu percorreria este array e limitaria a quantidade de objetos na tela.

  20. carloswgama disse:

    É um modificação que você pode optar fazer, mas acredito haja alguma forma mais simples.

    Neste que eu fiz, eu não armazeno em um arraylist, apenas o crio e dentro do script da própria bola de fogo, já informa que ela irá se auto destruir em x segundos.

    Eu ainda não tive tempo de olhar o Unity 5, mas acredito no segundo semestre desse ano, eu volte a mexer com o Unity e aproveito para replanejar o novo tutorial que está parado por tempo indeterminado.

  21. Carlos, estou com um problema no tiling dos materiais… o que está acontecendo quando eu aplico o tiling é meio que comprimir a imagem do material dentro do GameObject em que ele está. Daí quanto maior o tiling, mais comprimida fica. Sabe oq é isso?

    http://pt-br.tinypic.com/r/29dblgn/8

  22. Foi mal a demora Allexandre, sua mensagem tinha caído no spam por conta do link.

    O tiling é justamente para isso que você falou. Quanto maior o valor que você por em x, mais vezes ele irá repetir horizontalmente. E quanto mais vezes você por em Y, mais ele irá repetir verticalmente.

    Isso server para não deixar uma imagem esticada ou ter que fazer vários objetos repetidos.

  23. James Revolti disse:

    Olá, Carlos!
    Em primeiro lugar, muito obrigado por disponibilizar esse tutorial, tá muito bacana mesmo. Prático e útil. 🙂

    Queria apontar uns pequenos errinhos que podem dificultar a vida dos leitores.

    1º)
    O seguinte trecho de código está com o parâmetro especificado com o tipo errado.

    void OnTriggerEnter2D (Collision2D colisor) {
    }

    O correto seria:

    void OnTriggerEnter2D (Collider2D colisor) {
    }

    2º)
    No trecho onde temos “No script vamos adicionar três variáveis:”, o correto seria ter o seguinte trecho de código:

    public GameObject objeto;
    public float tempoRespawn = 0f;
    private float tempoCorrido = 0f;

    É isso. O resto são coisinhas da mudança do 4.6 pro 5.0, acho que nem vale mexer.

    Valeu e abraço!
    E parabéns pela atenção que você tem dado ao pessoal nos comentários.

  24. Ajustado! Valeu James 😉

  25. Odinei disse:

    Carlos, boa noite!

    Cara, esse tutorial está demais! Eu estou usando o Unity 5 e tem algumas diferenças e creio que seja por causa da versão. Mas não é nada que com uma “googlada” não resolvo. Porém, teve um problema que foi um pouco custoso de achar a solução (por mais que seja bem simples) e eu gostaria de compartilhar aqui. Após a parte que aumentamos o cenário, antes de adicionar as bolas de fogo, se eu voltasse com o meu personagem para o inicio do cenário ele desaparecia! Depois de muito ver código e ver o Inspector, eu vi que por algum motivo, quando eu voltava o Unity mudava a posição Z do personagem para algum valor negativo. Assim ele ia para a parte de trás do fundo. Assim, eu resolvi fixando um valor para Z da seguinte forma no script do Player:

    Criei uma função:

    void FixarPosicaoEixoZ()
    {
    Vector3 v3Position = spritePlayer.transform.position;
    v3Position.z = 0;
    spritePlayer.transform.position = v3Position;
    }

    E coloquei ela para executar dentro do Update:

    void Update ()
    {
    Movimentacao();
    FixarPosicaoEixoZ();
    }

    Queria deixar aqui para poder ajudar alguém que possa passar pelo mesmo problema!

  26. carloswgama disse:

    Que estranho O.o

    mas valeu pela colaboração, Odinei!

  27. Pedro Albano disse:

    Olá Carlos! Comecei a seguir seu tutorial recentemente e estou gostando muito!

    Estou com duvida nesta parte que o Allexandre falou, porque não consigo fazer a imagem repetir e ficar bonita como no seu tutorial, em vez de repetir ela fica esticada, como na imagem que o Allexandre mandou no link… como posso corrigir isso? eu uso o Unity 5

    Obrigado!

  28. Pedro Albano disse:

    Ah! Passei um tempão tentando descobrir como fazer isso antes de deixar meu comentario aqui, mas agora por acidente descobri a solução kkkkkkkkkkkkkkkkkkkk

    Caso alguem tenha esse mesmo problema:

    1- clique no arquivo “montanha” na aba Project, na pasta texture.
    2- Na aba Inspector, mude o campo Wrap Mode de Clamp para Repeat.

    Pronto! É só voltar no objeto montanha na aba Hierarchy e mudar o Tiling que em vez de esticar ele vai repetir kkkkk

    =)

  29. carloswgama disse:

    É isso mesmo Pedro. Perdão a demora em responder, essa semana está meio complicado para mim responder logo o pessoal :/

  30. Renan Vilela disse:

    Olá, estou seguindo esse tutorial. Mas a minha dúvida é em relação a um outro tutorial, será que pode me ajudar?? Veja o print http://oi60.tinypic.com/2whfl1e.jpg

    O tutorial é desse video, em 21:00 fica a parte em que dá erro. https://youtu.be/A_3w0S-9X1Q?list=PLPZbINlObmilhW0RDGuQ3Sc7bGGjTLIpI

  31. Opa Renan.

    Eu conheço os tutoriais da Flavia e recomendo. São muito bons.

    Em relação a sua dúvida, a imagem do print não está aparecendo :S

  32. Renan Vilela disse:

    Obrigado, Carlos. Já consegui resolver, era um erro bobo demais! haha

  33. Gustavo Henrique disse:

    Olá, antes de tudo, muito bom esses seus tutoriais, mas, eu estou com um probleminha na parte da lava, eu já fiz o script e adicionei ao objeto lava mas o player continuando passando pela lava sem voltar para a posição unicial, teria como alguem me ajudar? Acredito que seja por causa da versão :/

  34. carloswgama disse:

    Opa Gustavo.

    Entendi. Senão me engano nas novas versões do Unity, é obrigatório agora até mesmo para os triggers os objetos terem um Rigidbody. Então se o Lava estiver sem Rigidbody2D, adicione e marque a opção Is Kinematic (Se ela existir, dependendo da versão do seu Unity) ou Freezing Postion (X, Y, Z, não lembro exatamente como está na versão atual). Essas opções ai que eu falei, serve para que a Lava não caia com a gravidade.

    Se ainda sim, não funciona verifica se seu personagem realmente está com a tag “Player” 😉

  35. Eduardo disse:

    No meu projetinho, não fiz uma bola de fogo, portanto não fiz o script dela subir, mas fiz o script de respawn, o problema é que os espinhos, assim que eu toco neles, eles começam a se mutiplicar, logo abaixo do Player, ai eu posso subir infinitamente no mapa/mundo, o que for. Dá pra fazer um minigame mas achei bem estranho, qualquer coisa o script de respawn que eu fiz está ai:

    using UnityEngine;
    using System.Collections;

    public class Respawn : MonoBehaviour {

    public GameObject objeto;
    public float tempoRespawn = 0f;
    private float tempoCorrido = 0f;
    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update () {
    tempoCorrido += Time.deltaTime;
    if (tempoCorrido >= tempoRespawn) {
    Instantiate(objeto, transform.position, objeto.transform.rotation);
    tempoCorrido = 0f;
    }
    }
    }

  36. emerson disse:

    Esse codigo da camera nao ta funcionando.
    A camera nao quer seguir o jogador, ele some no mapa. 🙁

    • Então Emerson. Olhando o script eu não vi nenhuma diferença da versão 4.6 para a 5.1, então ela deve funcionar normal independente da versão O.o

      O teu player lá no Unity (Aba Hierarchy e Inspector) está com a Tag “Player”?

  37. Lucas Zottis disse:

    Bom dia Carlos

    To com duvida na animação da bola de fogo
    É pra fazer duas animações? (uma com a bola de fogo parada e uma em movimento)
    Ou só ela em movimento ou só parada?

  38. Lucas Zottis disse:

    Minha bola de fogo não sobe

  39. Raru disse:

    Olá, muito boa suas aulas, estou fazendo no unity 5. Estou com uma duvida em relação ao spawn do personagem após cair na lava, aqui ele volta normalmente, porém atravessa o chão :/. Espero que consiga me ajudar, valeu 😀

    • ue, só muda a position ele cai? O.o

      Então faz o seguinte, bota o Y dele um pouco mais alto, porque se o collider estiver dentro já da platforma, ela ignora e o personagem pode cair.

  40. Bruno disse:

    Cara, to com uma dificuldade imensa aqui. Não sei o porquê e aonde você utilizou os demais chãos copiados… A bola de fogo também não anda, já fiz, revisei e quanto mais reviso mais merda dá

  41. Cristian disse:

    É desagradavel chegar ate certa parte do tutorial e se deparar com falta de informação, se o tutorial é pra iniciante como vc pode simplesmente dizer pra fazer a animação da bola de fogo por conta propria, não é o memso procedimento q o personagem, tentei aqui mas ficou uma coisa horrivel, se vc quer ensinar entao ensina, pra ensinar pela metade não faça então, frustrante a maioria de tutoriais na internet são assim, te passa informações incompletas, eu tava gostando do tutorial mas cheguei em uma parte q não consigo fazer, ai desanima.

    • Cara, acho que você está confundindo as coisas? O.o

      Eu não digo para você nada que eu não tenha explicado antes. Algumas coisas como criem o script ou um objeto vazio, é um procedimento que eu já mostrei várias vezes. Na parte da animação você pode voltar e ir lán post rever como é. Temos um post inteiro explicando passo a passo. Se você está nesse, então já deve ter passado pelo outros, e ainda sim aqui eu explico de forma resumida: “Mude o Sprite Mode para multiple e no Sprite Editor dê um Slice no modo automático. Ele não deverá cortar tão certo, mas nós só precisamos da bola de fogo subindo. Com o Sprite cortado, use os 4 últimos sprites para gerar uma animação da bola de fogo virada para cima. (Esses passos estão na aula de animação), não será preciso nenhum animator.”

      Se eu for ficar explicando tudo que já expliquei todas as vezes, o tutorial vai ficar enorme não acha? E se for algo que eu já expliquei, eu acho que vocês tem condição de saber, afinal se você vai criar um jogo, não espere que vá ter alguma segurando tua mão para tudo que você for fazer O.o

      O comportamento que terá na bola de fogo eu explico sim, não digo para fazer do nada, que não expliquei antes. E se tem dúvida eu estou aqui para tirar, sempre tiro a duvida da galera em menos de 24h.

      E só para constar eu não recebo nada por esses tutorais, mas perco várias horas que poderia estar jogando, estudando, procurando uma condição de vida melhor ou até mesmo saindo com minha namorada, amigos e famílias para tentar fazer um conteúdo legal para vocês. Muitos por ai abrem cursos e cobram horrores, então eu busco fazer meus tutoriais de forma aberta e com “direito” a suporte, o que muitos cursos ai nem dão.

      A pessoa que está respondendo a você agora é uma pessoa que faz isso apenas por querer ajudar os outros, tanto é que o pessoal me pede ajuda para conteúdo que não tem nada a ver com o tutorial, ou seja, é menos ainda a minha “obrigação” com vocês O.o

      Então relaxe ai e explique qual é o seu problema que eu vou ter o maior prazer de te ajudar, caso ainda queira continuar com o tutorial.

      Mas sem ser relacionada ao tutorial, meu conselho para você é que se você não buscar um bom relacionamento ao pedir algo, dificilmente as pessoas vão tentar te ajudar, então leve isso como um conselho para sua vida pessoal.

  42. Cristian disse:

    ufaa, consegui aqui…

  43. Gutemberg disse:

    Muito bom o tutorial ,e eu tenho uma pergunta quando eu fizer meu personagem por ex um ninja , e eu quiser que ele de ao inves de um só golpe , ele faça uma sequência como faria para controlar a animaçao, ? dos segundos para repetir o primeiro golpe quando se demora para apertar o botão ou partir para o segundo golpe tudo isso em um único botão…?

    • Para dar uma resposta mais precisa eu teria que fazer uns testes com tempo e tudo mais com o sprite usado, porém por cima, o que eu faria é usar um único parametro chamado ataque do tipo que Trigger.

      E alinhar as ordens dos golpes, onde passaria de um golpe para outro quando o parametro ataque do tipo Trigger fosse chamado. Cada transição teria o Has Exit Time marcado tanto para a próxima animação quanto voltando para o estado padrão.

      Ou seja, se a condição (ativar o trigger ataque = animator.setTrigger(“ataque”)) fosse executada, após o Has Exit Time (Completar a animação), ele iria para a próxima animação, senão após o Has Exit Time (Completar a animação) ele voltaria para a posição inicial.

      Seria isso?

  44. Gutemberg disse:

    boto fé que seja isso pois estava falando de um combo ao inves de um unico golpe mas voltando ai tutorial as bolas de fogo elas sobem e quando descem batem no chao de grama e as vezes da a impressão que elas não se destroem elas batem e sobem de novo…isso esta correto?

  45. Gutemberg disse:

    Eu marquei agora as primeiras bolas de fogo descem mas ai depois as outras quando aparece new prefab (clone) que batem no solo e sobem de novo..

    • Já é um caminho.

      Então o que está faltando é você alterar direto no prefab que fica lá na aba Project.

      Caso você altere o objeto na aba Hierarchy tem que clicar em um apply ou algo assim que fica no topo da aba Inspectors para a alteração ser enviada para os prefabs.

  46. Gostaria de saber como faz igual no mario que tem 2 bolas de fogo. Ambas com tempo diferente.
    Ex: A primeira bola de fogo sobe e alguns segundos depois a segunda bola de fogo sobe e as duas caem dessincronizadas, sem estarem juntas. Com um tempo diferente.

    • Você pode ter dois respaw com tempo diferente ou um único com uma contagem de quantas bolas foram jogadas. Caso seja a bola seja um divisor de 3, você altera a força do pulo da bola.

      Posso fazer o código sim, mas eu quero que você aprenda a criar os próprios códigos ao invés de só copiar. Assim não vai precisa ficar perguntando sempre como faz cada coisa, semelhante provérbio chines da pesca.

  47. Rafael disse:

    Oi como e que se faz uma animação sem usar o animator O.o?

    • Faz tanto tempo que eu fiz esse tutorial que eu nem lembro mais o que eu quis dizer, mas acredito que foi que a ideia de que não precisa adicionar o componente Animator, pois ele será adicionado automaticamente, quando for fazer a animação. O.o

      Mas ainda sim explicando de como é possível fazer um animação sem o Animator. Tem algo no novo tutorial que mostra isso. Pense numa serra eletrica. A animação dela é simplesmente ela rotacionando não é mesmo? Então no script apenas precisamos usar o método para rotacionar o objeto ^^

  48. Rafael disse:

    A brigadão agora entendi ^^

  49. Fabricio R disse:

    Ótimo post, tenho um problema eu tento fazer com que o inimigo atkar assim que o herói entrar na sua box collide 2d que fica na sua frente e é sua visão mas um bug tá fazendo com que a box collider do corpo fique ativando e desativando a opção is trigger e eu queria que essa ficasse sempre desativada eu usei o oncollisionenter2d pra fazer o sistema mas não consegui resolver esse problema vc pode me ajudar com uma dica pra manter o is trigger sempre desativado via js?

  50. Fabricio R disse:

    É realmente complicou eu tô tentando ver que parte do script pode tá fazendo dar esse bug mas ainda não consegui achar eu até tentei criar o script separado para ver se a box collide do corpo ficava isolada mas nada deu certo, tudo tava indo bem até eu configurar o ataque, tô pensando em fazer o ataque de outro jeito pra ver se da certo, vc teria alguma dica ou tutorial pra mim tirar uma idéia?

    • Então fabricio, eu não vi nada relacionada a isso na internet. Deve ser algo especifico no seu código mesmo. Uma forma de solucionar seria dentro do método update do objeto que tem o collider busca-lo e definir como isTrigger = true:

      void Update() {
      GetComponent<BoxCollider2D>().isTrigger = true;
      }

      Mas isso é o que a gente costuma chamar de gambiarra. A solução mesmo seria encontrar o que está causando o problema.

  51. Fabricio R disse:

    Tá certo cara obrigado pela dica eu vou tentar aki tomara que funcione, eu vou ver denovo se consigo encontrar a causa do problema também, de qualquer forma eu ja lhe agradeço pela ajuda 🙂

  52. Alan Rodrigues disse:

    Olá Carlos, gostei muito do tutorial, porem preciso da sua ajuda, estou usando a mesma versao que vc e acompanhando o tutorial a risca desde o começo, porem na parte da camera faço o script e depois o debug tudo certinho, e ate copio o seu codigo e insiro no jogo, mas a camera nao segue o player, e quando o personagem volta para tras a imagem de fundo tambem some, me ajuda se nao estiver muito ocupado, obrigado pela atencao.

    • Opa Alan.

      Então cara, estou sim no sufoco, mas tanto pelo menos responder os comentários aqui. ^^

      Bom, o fato da camera não seguir o personagem, pode estar relacionado com a tag. A seu personagem está com a tag “Player”?

      Quanto a imagem de fundo sumir, parece estar relacionada com o movimento da câmera. Verifica se a câmera não está dentro do personagem principal na aba Hierarchy. Pois o personagem rotacionando, a câmera também rotaciona. Caso seja essa a situação, basta remover a câmera de dentro do personagem ^^

  53. Alan Rodrigues disse:

    Boa noite, Carlos ainda não consegui resolver… aparece uma msg no canto inferior da tela assim: the class defined in script file named “camera” does no match the file name, fora isso fiz tudo que vc citou acima, se puder me ajudar, pelo pouco que entendo parece que o script da camera não deve estar rodando dentro do main camera, o porque nao sei, pois quando faço um debug no codigo não aparece nenhum erro….bom valeu pela ajuda por enquanto.
    Abraços.

    • huuuuum, isso muda muita coisa.

      Verifica se o nome do script está com o nome nome do arquivo. Quando digo o mesmo nome, é mesmo nome mesmo. Incluindo letras maiúsculas e minusculas.

      Exemplo se lá na sua aba Project no editor do Unity, estiver Camera e dentro do seu script (Lá no MonoDevelop/Visual Studio) estiver camera, vai dar erro.

  54. Renan Duarte disse:

    Carlos estou com dois problemas no meu código estou seguindo o tutorial mas o tiling quando eu tento aumenta-lo ao invés dele repetir a imagem ela fica puxada eu não entendi muito bem por que isso acontece, e outra coisa com o script da câmera quando eu dou play o meu personagem desaparece, você poderia me ajudar nessa?

    • Bora por partes!

      Quanto a imagem que fica esticada. Na aba project procure por essa imagem. Ao clicar nela, vai aparecer as informações da imagem na aba Inspector, correto?

      Pois bem, na opção Wrap Mode, provavelmente estará a opção Clamp selecionada. Troque para Repeat e seu erro estará solucionado. ^^

      Quanto a câmera, acredito que você esteja alterando também a posição de Z da câmera, deixando tanto personagem, quanto câmera na mesma posição em Z. O correto é que a câmera está com Z menor que o personagem.

  55. Oi,estou com um problema.Fiz tudo como estava no tutorial,mas a bola de fogo não dá respawn.A primeira bola de fogo funciona perfeito,mas a segunda nunca aparece.Aparece ela sendo fabricada na aba hierarchy,(clone_bola fogo)mas não aparece a animação dela subindo(aliás acho que nem o objeto aparece)

  56. Ah deixa quieto cara,consegui huehue.Eu só esqueci de posicionar o objeto respawn no lugar certo,erro meu.Valeu pelo tutorial cara .

  57. Date disse:

    Fiz tudo certo, porem tem um problema q nao consigo resolver, as bolas de fogo possuem um respawn muito rápido, como diminuir a velocidade ?

  58. Date disse:

    Estava tentando mudar esse tempoRespawn, mas continuava soltando as bolas muito rapido, olhei no inspector como disse, e consegui mudar o respawn, e consegui fazer ficar normal, o tempo tava no 0, ficava spamando as bolas kkk.

    Muito obrigado Carlos, é um excelente tutorial para iniciantes.
    Se puder me recomendar algum livro(PDF ou livro msm) sobre o assunto agradeceria, pretendo fazer um jogo pro meu TCC em engenharia da computação.

  59. Jose Soares Ramos Junior disse:

    Opa eai tudo certo, vlw pelo Tutorial… Só um probleminha, fiz ate a parte da lava onde se o player cair nela volta a posição inicial, bem quando ele retorna a posição player começa a se movimentar e girar para frente… vc tem alguma ideia doq possa ser?

    Obrigado…

    • Opa José

      Clica no seu player e aba Insperto vai lá no Objeto Rigidbody 2D. O ultimo item que deve ter lá, se chama Constraints. Ao expandir, vai ver a opção Freezing Rotation Z. Marque essa opção 😉

  60. Jose Soares Ramos Junior disse:

    Meu amigo muito obrigado por sua ajuda, está salvando minha vida… estou desenvolvendo meu TCC que é um jogo educacional para crianças com TDAH com base em seus tutorias, é muito difícil encontrar material didáticos refente a criação de jogos em português ainda mais sem estes serem monetizados…

    Obrigadão…

  61. [email protected] disse:

    Amigo, pode me dar uma ajuda com meu projeto rsrs bem minha ideia era usar pequenos desafios no final de cada fase do jogo, tipo jogo da memoria, sequencia… esses tipos de jogos… vc sabe de algum material que ensine a fzr… e se e possivel inserir isto no final da fase desse game?

  62. rafoso disse:

    Vim aqui pra perguntar isso vlws cara!!!

  63. rafoso disse:

    Pessoal, pra quem está tendo problemas de ‘os objetos sumirem quando dá o play’, tentem não deixar nenhum elemento com o Z negativo, o primiro plano da sua tela pode ser Z=0 ai o segundo plano Z=1,Z=2 …

    Quando eu setei meu personagem com Z=0, depois que apareceu a lava no plano da frente eu botei ela com Z=-1, ai bugou tudo…mas depois que fiz esse ajuste ficou certo novamente!

    flws

  64. wellington disse:

    como posso fazer pra camera fica do pé do personagem pra cima, se tiver como responde agradeço vlw amigo,voltei aqui só pra tirar essa duvida já to em outro parte do tutorial

    • Você está falando meio inclinada para cima?

      Se for clica no Main Camera e no script da Camera terá lá uma opção Orthographic (2D), é só mudar para Perspective. Depois apróxima do personagem (position) e inclina para cima no rotation.

  65. wellin disse:

    nossa obrigado mano negocio simples e eu n tinha reparado nisso ashusa, e já aproveitando sabe pq meu personagem fica tremendo quando ando,pelo que reparei tem algo a ver com a camera, pq quando desativo o script da camera volta ao normal,vlw man e nois

    • O personagem treme ou a camera treme?

      Se for o personagem não sei, só olhando melhor; Se for a camera pode tentar afastar ou apróxima um pouco. Ou certificar que o personagem não está rotacionando ao andar

Deixe uma resposta

Parceiros

Steam Brasil LoboLimão Centro RPG Lab Indie
Mundo Gamer PodTerror

Anunciantes

Aglomerando - Agregador de conteúdo
Uêba - Os Melhores Links GeraLinks - Agregador de links Piadas Idiotas - São idiotas mas o faz rir Tedioso: Os melhores links LinkLog MeusLinks.com - Informação e conteúdo todos os dias para você! Agregador de Links - Madruga Links 4Blogs - Agregador de conteúdo Está no seu momento de descanso né? Entao clique aqui!