Wytrzymałe klocki
Lekcja 7 z 19 w kursie Gra w Unity: Brick Breaker w Coddy.
Niektóre cegły wymagają więcej niż jednego trafienia. Każda cegła przechowuje liczbę pozostałych jej trafień: trafienie zmniejsza ją o jeden, a cegła pęka i przyznaje punkty dopiero po trafieniu, które zmniejszy tę liczbę do 0. Do tego czasu cegła zmienia kolor, dzięki czemu gracz widzi, jak wytrzymała jeszcze jest.
Tablica kolorów wypełniona w Inspektorze przyporządkowuje liczbę do koloru. Element 0 to kolor dla jednego pozostałego trafienia, element 1 — dla dwóch, więc kolor odpowiadający liczbie n to element n - 1. Tarcza z ładunkami działa tak samo:
public Color[] chargeColors; // element 0: pozostał 1 ładunek
void ShowCharges(int charges)
{
GetComponent<Renderer>().material.color = chargeColors[charges - 1];
}Odczytanie material tworzy dla tego renderera jego własną kopię materiału za pierwszym razem, dzięki czemu jedna tarcza lub jedna cegła zmienia kolor bez przemalowywania każdej kopii prefabrykatu. GameManager decyduje o wytrzymałości każdej nowej cegły: tablica int[] z jedną liczbą dla każdego rzędu, zaczynając od górnego, pozwala sprawić, że górny rząd wymaga więcej trafień niż pozostałe.
Wyzwanie
ŚredniKlocki w górnym rzędzie wymagają dwóch uderzeń.
- W
Brickdodajpublic int hits = 1;,public Color[] colors;(w scenie ustaw kolory niebieski, pomarańczowy i czerwony) orazSetHits(int count): ustaw liczbę uderzeń i kolorcolors[hits - 1]. Hit()odejmuje jedno uderzenie od liczby uderzeń: przy 0 klocek pęka i naliczane są punkty, w przeciwnym razie wyświetla nowy kolor.- W
GameManagerdodajpublic int[] rowHits = { 2, 1, 1, 1, 1 };i wywołujbrick.SetHits(rowHits[row])dla każdego nowego klocka.
Naciśnij „Graj”: górny rząd jest pomarańczowy i po uderzeniu zmienia kolor na niebieski. Następnie naciśnij „Sprawdź”.
Spróbuj swoich sił
using UnityEngine;
public class Brick : MonoBehaviour
{
public int points = 10;
void OnCollisionEnter(Collision collision)
{
if (collision.gameObject.CompareTag("Ball")) Hit();
}
public void Hit()
{
GameManager.Instance.BrickBroken(this);
Destroy(gameObject);
}
}
Wszystkie lekcje w sekcji Gra w Unity: Brick Breaker
Poćwicz samodzielnie: Edytor online Unity