Menu
CoddyTech

Wytrzymałe cegły

Lekcja 7 z 16 w kursie Gra w Unity: Zbijanie klocków 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
  1. W Brick dodaj public int hits = 1 i public Color[] colors. Scena wypełnia colors kolorami niebieskim, pomarańczowym i czerwonym, gdy pozostaje 1, 2 lub 3 trafienia.
  2. Napisz public void SetHits(int count): ustawia hits i wyświetla kolor cegły odpowiadający tej wartości.
  3. Zmień Hit(): odejmij jeden od hits. Przy wartości 0 cegła pęka i przyznaje punkty jak wcześniej; w przeciwnym razie wyświetla tylko swój nowy kolor.
  4. W GameManager dodaj public int[] rowHits = { 2, 1, 1, 1, 1 }; i ustaw liczbę trafień każdej nowej cegły na rowHits[row] za pomocą SetHits.

Naciśnij Play, osłab pomarańczową cegłę w górnym rzędzie, a następnie naciśnij Check.

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);
    }
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Gra w Unity: Zbijanie klocków