Menu
CoddyTech

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.

challenge icon

Wyzwanie

Średni

Klocki w górnym rzędzie wymagają dwóch uderzeń.

  1. W Brick dodaj public int hits = 1;, public Color[] colors; (w scenie ustaw kolory niebieski, pomarańczowy i czerwony) oraz SetHits(int count): ustaw liczbę uderzeń i kolor colors[hits - 1].
  2. Hit() odejmuje jedno uderzenie od liczby uderzeń: przy 0 klocek pęka i naliczane są punkty, w przeciwnym razie wyświetla nowy kolor.
  3. W GameManager dodaj public int[] rowHits = { 2, 1, 1, 1, 1 }; i wywołuj brick.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