Menu
CoddyTech

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.

challenge icon

Desafio

Médio

Faça as setas moverem o corredor entre três faixas.

  1. Em Update() de Runner, use lane-- quando Input.GetKeyDown(KeyCode.LeftArrow) e lane++ quando a seta para a direita for pressionada.
  2. Mantenha-o na pista: lane = Mathf.Clamp(lane, -1, 1);.
  3. Copie transform.position para p, mova p.x em direção a lane * laneWidth com Mathf.MoveTowards, usando laneSpeed * Time.deltaTime, e atribua p de 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

Pratique por conta própria: Playground de Unity