Três Faixas
Parte da seção Criando Jogos de Verdade do Journey de Unity da Coddy. Lição 27 de 60.
Este capítulo cria um jogo de corrida infinita. Um corredor avança por uma estrada com três faixas e troca de faixa para desviar dos obstáculos que vêm em sua direção. Nas próximas lições, a estrada fica mais rápida, a distância aparece na tela, uma colisão encerra a corrida e exibe um botão para correr novamente, e a melhor corrida é salva. O corredor nunca avança: ele fica em z = 0 e os obstáculos vêm em sua direção, então a estrada nunca acaba. O jogo tem quatro scripts, Runner, Spawner, Obstacle e GameManager, e os três últimos estão vazios por enquanto.
Um corredor que se move entre faixas não é controlado como um carro: ele está sempre em um de alguns lugares determinados. Mantenha o lugar como um número inteiro, altere o número ao pressionar uma tecla e calcule a posição a partir dele. A plataforma de um limpador de janelas atende aos cinco andares de um prédio, separados por 3 unidades:
[SerializeField] private float floorHeight = 3f;
[SerializeField] private float moveSpeed = 6f;
private int floor = 0;
void Update()
{
if (Input.GetKeyDown(KeyCode.UpArrow)) floor++;
if (Input.GetKeyDown(KeyCode.DownArrow)) floor--;
floor = Mathf.Clamp(floor, 0, 4);
Vector3 p = transform.position;
p.y = Mathf.MoveTowards(p.y, floor * floorHeight, moveSpeed * Time.deltaTime);
transform.position = p;
}GetKeyDown faz com que cada pressionamento suba um andar, enquanto GetKey subiria um andar a cada quadro em que a tecla ficasse pressionada. Mathf.Clamp mantém o número dentro dos andares do prédio, então pressionar para cima no último andar não faz nada, e o próximo pressionamento para baixo vai direto ao andar 3. Mathf.MoveTowards desliza a plataforma em direção ao andar na velocidade de moveSpeed unidades por segundo e para exatamente nele, em vez de saltar até lá em um único quadro. A posição é copiada, alterada e atribuída de volta, porque não é possível definir transform.position.y por conta própria.
Desafio
MédioFaça as setas moverem o corredor entre três faixas.
- Em
Update()deRunner, uselane--quandoInput.GetKeyDown(KeyCode.LeftArrow)elane++quando a seta para a direita for pressionada. - Mantenha-o na pista:
lane = Mathf.Clamp(lane, -1, 1);. - Copie
transform.positionparap, movap.xem direção alane * laneWidthcomMathf.MoveTowards, usandolaneSpeed * Time.deltaTime, e atribuapde volta.
Pressione “Jogar”, clique no jogo e troque de faixa: o corredor desliza de um lado para o outro. Depois, pressione “Verificar”.
Experimente você mesmo
using UnityEngine;
public class Runner : MonoBehaviour
{
public float laneWidth = 2.5f;
public float laneSpeed = 15f;
private int lane = 0; // -1 é a faixa da esquerda, 0 a do meio, 1 a da direita
void Update()
{
// Mude de faixa com as setas e depois deslize em direção ao x da faixa
}
}
Todas as lições de Criando Jogos de Verdade
1Texto na tela
Canvas e textoExiba a pontuaçãoFormate númerosUm cronômetro regressivoRevisão: velocímetro2Botões e telas
Botões e onClickLambdasConectando no InspectorPainéis ligados e desligadosBarras de vidaRevisão: Loja de melhorias5Salvando com PlayerPrefs
Salvar um númeroCarregar com um valor padrãoRecordeSalvar configuraçõesRevisão: Moedas no banco3O Gerenciador do Jogo
Um Script Controla o JogoO SingletonEstados do JogoAlternando o EstadoRevisão: Gerenciador de Rodadas6Projeto: Corrida sem Fim
Três FaixasObstáculos à FrentePratique por conta própria: Playground de Unity