Bases de Construção
Lição 7 de 25 do curso Jogo de Unity: Defesa de Torres da Coddy.
O jogador constrói torres clicando nas plataformas de construção cinzas. Um clique é um ponto na tela, então ele se torna um raio: Camera.main.ScreenPointToRay retorna o raio da câmera que passa por esse ponto, e Physics.Raycast informa o primeiro colisor atingido, aquele que está sob o mouse.
Ray ray = Camera.main.ScreenPointToRay(Mouse.current.position.ReadValue());
if (Physics.Raycast(ray, out RaycastHit hit))
{
Debug.Log("Clicked " + hit.collider.name);
}O raio também atinge o chão, o caminho e as árvores. hit.collider.TryGetComponent(out BuildPad pad) verifica se o objeto atingido é uma plataforma, então os outros cliques não fazem nada. Todas as cenas aqui usam o Input System, então Mouse.current lê o mouse (using UnityEngine.InputSystem;).
Desafio
MédioClique em um espaço de construção para construir uma torre Arrow nele.
- Em
BuildPad, adicionepublic Tower tower;. - Em
BuildManager, adicione[SerializeField] private Tower towerPrefab;. EmUpdate, quandoMouse.current.leftButton.wasPressedThisFramefor verdadeiro, lance um raio a partir do mouse. - Se o raio atingir um
BuildPadcujotowerseja null, definapad.tower = Instantiate(towerPrefab, pad.transform.position, Quaternion.identity);.
Pressione “Jogar” e clique nos espaços de construção: haverá uma torre em cada um. Depois, clique em “Verificar”.
Experimente você mesmo
using UnityEngine;
// Vem depois: clicar nas plataformas de construção para posicionar torres, a loja e o painel de torres.
public class BuildManager : MonoBehaviour
{
}
Todas as lições de Jogo de Unity: Defesa de Torres
Pratique por conta própria: Playground de Unity