Perdi una palla
Lezione 8 di 19 del corso Gioco in Unity: Rompi i mattoni di Coddy.
Una pallina che supera la racchetta è persa. Sotto la racchetta, la scena ora ha una DeathZone: un oggetto con un collider a scatola impostato su Is Trigger e il tag DeathZone. Un trigger non ferma nulla; invia OnTriggerEnter(Collider other) quando qualcosa con un Rigidbody vi entra. La pallina segnala la perdita a GameManager, che gestisce le vite e decide cosa succede dopo.
Una biglia che cade in acqua ricomincia dal punto di spawn:
void OnTriggerEnter(Collider other)
{
if (other.CompareTag("Water")) Respawn();
}
void Respawn()
{
rb.linearVelocity = Vector3.zero;
transform.position = spawnPoint.position;
}La pallina ha bisogno di meno della biglia. Il suo Update() la posiziona già sulla racchetta a ogni frame mentre launched è false, quindi per reimpostarla basta azzerare quel flag e fermare la pallina: al frame successivo tornerà sulla racchetta e premendo la barra spaziatrice verrà lanciata di nuovo.
Sfida
MedioMancare la pallina costa una vita e la rimette sulla racchetta.
- In
Ball, scrivipublic void ResetToPaddle():launched = false;e la velocitàVector3.zero. - In
OnTriggerEnterdi Ball, entrare nell’oggetto con tagDeathZonerichiamaGameManager.Instance.BallLost(this). - In
GameManager, aggiungipublic int lives = 3;epublic void BallLost(Ball lost): una vita in meno, poilost.ResetToPaddle();
Premi «Gioca» e manca la pallina: torna ad aspettare sulla racchetta. Poi premi «Verifica».
Provalo tu
using UnityEngine;
public class GameManager : MonoBehaviour
{
public static GameManager Instance;
public Brick brickPrefab;
public Transform wall;
public int rows = 5;
public int columns = 9;
public float spacingX = 1.75f;
public float spacingY = 0.75f;
public float topY = 6f;
public int[] rowHits = { 2, 1, 1, 1, 1 };
int score;
void Awake()
{
Instance = this;
}
void Start()
{
BuildWall();
}
void BuildWall()
{
float left = -(columns - 1) * spacingX / 2f;
for (int row = 0; row < rows; row++)
{
for (int col = 0; col < columns; col++)
{
Vector3 pos = new Vector3(left + col * spacingX, topY - row * spacingY, 0f);
Brick brick = Instantiate(brickPrefab, pos, Quaternion.identity, wall);
brick.SetHits(rowHits[row]);
}
}
}
public void BrickBroken(Brick brick)
{
score += brick.points;
}
}
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Gioco in Unity: Rompi i mattoni
Esercitati da solo: Playground Unity