Menu
CoddyTech

Três Faixas

Parte da seção Criando jogos de verdade do Journey de Unity da Coddy. Lição 27 de 56.

Este capítulo cria um Endless Runner. Um corredor percorre uma estrada com três pistas e muda de pista para desviar dos obstáculos que vêm em sua direção. Nas próximas lições, a estrada ficará mais rápida, a distância será exibida na tela, uma colisão encerrará a corrida com um botão para correr novamente, e a melhor corrida será salva. O corredor nunca se move para a frente: 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 em pistas não é controlado como um carro: ele está sempre em um de alguns lugares. 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 deste 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 um pressionamento corresponda a um andar, enquanto GetKey adicionaria um andar a cada quadro em que a tecla fosse mantida pressionada. Mathf.Clamp mantém o número dentro dos limites do prédio, então pressionar para cima no último andar não faz nada, e o próximo pressionamento para baixo vai direto para o andar 3. Mathf.MoveTowards desliza a plataforma em direção ao andar à velocidade de moveSpeed unidades por segundo e para exatamente nele, em vez de saltar até lá em um quadro. A posição é uma cópia, que é alterada e atribuída de volta, porque não é possível definir transform.position.y isoladamente.

challenge icon

Desafio

Médio

Inicie o Endless Runner com o corredor. O Inspector atribui a Runner um laneWidth de 2.5 e um laneSpeed de 15, e lane é -1 para a faixa da esquerda, 0 para a do meio e 1 para a da direita. Em Update() de Runner:

  • Cada pressionamento da seta para a esquerda ou para a direita altera lane em uma unidade nessa direção. Manter a tecla pressionada ainda o altera em uma unidade.
  • lane nunca fica abaixo de -1 nem acima de 1.
  • O corredor desliza ao longo de x até lane * laneWidth a laneSpeed unidades por segundo e mantém seus valores de y e z.

Por enquanto, deixe os outros três scripts como estão. Pressione Play, clique no jogo e troque de faixa; depois, Check.

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
    }
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Criando jogos de verdade