Menu
CoddyTech

Construir bases

Lição 5 de 18 do curso Jogo de Unity: Defesa de Torres da Coddy.

O jogador constrói torres clicando nas plataformas de construção, os quadrados cinza ao lado do caminho. Um clique acontece na tela, em pixels, e as plataformas estão no mundo 3D, então o clique se torna um raio. Camera.main.ScreenPointToRay(point) retorna o raio que começa na câmera e atravessa aquele ponto da tela até a cena, e Physics.Raycast o segue e informa o primeiro colisor que ele atinge: aquele que o jogador vê sob o mouse. Uma ferramenta de pintura que colore o bloco em que você clica:

void Update()
{
    if (!Mouse.current.leftButton.wasPressedThisFrame)
    {
        return;
    }

    Ray ray = Camera.main.ScreenPointToRay(Mouse.current.position.ReadValue());
    if (Physics.Raycast(ray, out RaycastHit hit) && hit.collider.TryGetComponent(out Paintable block))
    {
        block.Paint(brushColor);
    }
}

A segunda metade de && só é executada quando o raio atinge alguma coisa, então hit é preenchido. TryGetComponent então verifica se o objeto atingido é um daqueles que interessam a você: o raio também atinge o chão, o caminho e as árvores, que não têm Paintable, então esses cliques não fazem nada.

Todas as cenas aqui usam apenas o Input System do Unity 6, então Mouse.current lê o mouse. A posição dele está em pixels da tela, que é o que ScreenPointToRay espera.

challenge icon

Desafio

Médio

Os pads têm um script BuildPad, e o objeto Game tem um BuildManager cujo towerPrefab é o prefab ArrowTower.

  1. Em BuildPad.cs, adicione um campo público tower do tipo Tower: a torre construída neste pad, ou null.
  2. Em BuildManager, adicione um campo privado serializado towerPrefab (um Tower). Em Update, quando o botão esquerdo do mouse for pressionado neste quadro, lance um raio da câmera através do mouse.
  3. Quando o raio atingir um collider que tenha um BuildPad, e esse pad ainda não tiver uma torre, instancie towerPrefab na posição do pad e armazene a nova torre em tower do pad. Um pad com uma torre, ou qualquer coisa que não seja um pad, não faz nada.

Pressione Play e clique em alguns pads, depois em Check.

Experimente você mesmo

using UnityEngine;

// Vem depois: clicar nas bases de construção para posicionar torres, a loja e o painel das torres.
public class BuildManager : MonoBehaviour
{
}
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 Jogo de Unity: Defesa de Torres