Il muro
Lezione 5 di 16 del corso Gioco Unity: Rompi-mattoni di Coddy.
I mattoni sono disposti in una griglia: righe dall’alto verso il basso, colonne da sinistra a destra, ciascuno una copia di un prefab di mattone creato con due cicli annidati. La posizione di un mattone deriva dai numeri della sua riga e colonna moltiplicati per la distanza tra i centri dei mattoni, pari alla dimensione di un mattone più un piccolo spazio.
Per centrare una griglia su x = 0, calcola dove va la prima colonna. Tra n colonne ci sono n meno 1 spazi, quindi, con una distanza s, i centri esterni sono separati da (n - 1) * s, e il primo si trova a metà di quella distanza verso sinistra. Cinque paletti, distanti 2 unità:
int posts = 5;
float spacing = 2f;
float left = -(posts - 1) * spacing / 2f;
for (int i = 0; i < posts; i++)
{
Instantiate(postPrefab, new Vector3(left + i * spacing, 0f, 3f), Quaternion.identity);
}Si trovano a -4, -2, 0, 2 e 4: il primo paletto è a -4, non a -5, perché quattro spazi separano cinque paletti. Il quarto argomento di Instantiate, un Transform genitore, colloca ogni copia sotto un unico oggetto, mantenendo ordinata la Hierarchy. Quando il tipo del campo prefab è uno script, come Brick, Instantiate restituisce lo script della nuova copia, pronto all’uso.
Sfida
MedioCostruisci il muro in GameManager:
- Aggiungi
public Brick brickPrefabepublic Transform wall(la scena collega il prefab Brick e l’oggetto Wall), epublic int rows = 5,public int columns = 9,public float spacingX = 1.75f,public float spacingY = 0.75fepublic float topY = 6f. - Scrivi
void BuildWall(): un mattone per ogni riga e colonna, conwallcome oggetto padre. La riga 0 si trova a y =topYe ogni riga è più in basso dispacingY. Le colonne sono distanziate dispacingXe centrate su x = 0. I mattoni si trovano a z = 0. - Chiama
BuildWall()daStart().
Premi Play e fai rimbalzare la palla contro il muro (i mattoni non si rompono ancora), poi premi Check.
Provalo tu
using UnityEngine;
public class GameManager : MonoBehaviour
{
public static GameManager Instance;
void Awake()
{
Instance = this;
}
// Più avanti: il muro di mattoni, il punteggio, le vite e i livelli.
}
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.