Menu
CoddyTech

Piazzole di costruzione

Lezione 5 di 18 del corso Gioco Unity: difesa della torre di Coddy.

Il giocatore costruisce torri facendo clic sulle piazzole di costruzione, i quadrati grigi accanto al percorso. Un clic avviene sullo schermo, in pixel, mentre le piazzole si trovano nel mondo 3D, quindi il clic diventa un raggio. Camera.main.ScreenPointToRay(point) restituisce il raggio che parte dalla telecamera e attraversa quel punto dello schermo fino alla scena, mentre Physics.Raycast lo segue e segnala il primo collider che colpisce: quello che il giocatore vede sotto il mouse. Uno strumento di pittura che colora il blocco su cui fai clic:

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);
    }
}

La seconda parte di && viene eseguita solo quando il raggio colpisce qualcosa, quindi hit viene valorizzato. TryGetComponent chiede quindi se l'oggetto colpito è uno di quelli che ti interessano: il raggio colpisce anche il terreno, il percorso e gli alberi, che non hanno un componente Paintable, quindi quei clic non fanno nulla.

Tutte le scene qui usano solo l'Input System di Unity 6, quindi Mouse.current legge il mouse. La sua posizione è espressa in pixel dello schermo, come richiesto da ScreenPointToRay.

challenge icon

Sfida

Medio

Le piazzole hanno uno script BuildPad e l’oggetto Game ha un BuildManager il cui towerPrefab è il prefab ArrowTower.

  1. In BuildPad.cs, aggiungi un campo pubblico tower di tipo Tower: la torre costruita su questa piazzola, oppure null.
  2. In BuildManager, aggiungi un campo privato serializzato towerPrefab (un Tower). In Update, quando il pulsante sinistro del mouse viene premuto in questo frame, lancia un raggio dalla fotocamera attraverso il mouse.
  3. Quando il raggio colpisce un collider che ha un BuildPad e quella piazzola non ha ancora una torre, istanzia towerPrefab nella posizione della piazzola e memorizza la nuova torre in tower della piazzola. Una piazzola con una torre, o qualsiasi cosa che non sia una piazzola, non fa nulla.

Premi Play e fai clic su alcune piazzole, poi Check.

Provalo tu

using UnityEngine;

// Arriva più avanti: fare clic sulle piattaforme di costruzione per posizionare le torri, il negozio e il pannello delle torri.
public class BuildManager : MonoBehaviour
{
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Gioco Unity: difesa della torre