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.
Wyzwanie
Średni- W
Brickdodajpublic int hits = 1ipublic Color[] colors. Scena wypełniacolorskolorami niebieskim, pomarańczowym i czerwonym, gdy pozostaje 1, 2 lub 3 trafienia. - Napisz
public void SetHits(int count): ustawiahitsi wyświetla kolor cegły odpowiadający tej wartości. - Zmień
Hit(): odejmij jeden odhits. Przy wartości 0 cegła pęka i przyznaje punkty jak wcześniej; w przeciwnym razie wyświetla tylko swój nowy kolor. - W
GameManagerdodajpublic int[] rowHits = { 2, 1, 1, 1, 1 };i ustaw liczbę trafień każdej nowej cegły narowHits[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);
}
}
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.