Прочные кирпичи
Урок 7 из 16 курса Игра в Unity: арканоид на Coddy.
Некоторые кирпичи выдерживают больше одного попадания. Для каждого кирпича ведётся счёт оставшихся попаданий: каждое попадание уменьшает его на единицу, и кирпич ломается и приносит очки только при попадании, которое уменьшает счёт до 0. До этого кирпич меняет цвет, чтобы игрок видел, насколько он ещё прочный.
Массив цветов, заполненный в Inspector, сопоставляет количество попаданий с цветом. Элемент 0 — цвет, когда осталось одно попадание, элемент 1 — когда осталось два, поэтому цвет для количества n — это элемент n - 1. Щит с зарядами работает так же:
public Color[] chargeColors; // элемент 0: остался 1 заряд
void ShowCharges(int charges)
{
GetComponent<Renderer>().material.color = chargeColors[charges - 1];
}При первом чтении material этот рендерер получает собственную копию материала, поэтому один щит или один кирпич меняет цвет, не перекрашивая все копии префаба. GameManager определяет прочность каждого нового кирпича: int[] с одним числом на строку, начиная с верхней, позволяет верхней строке выдерживать больше попаданий, чем остальным.
Задание
Средне- В
Brickдобавьpublic int hits = 1иpublic Color[] colors. В сцене массивcolorsзаполняется синим, оранжевым и красным цветами для 1, 2 и 3 оставшихся попаданий. - Напиши
public void SetHits(int count): метод задаёт значениеhitsи показывает соответствующий цвет кирпича. - Измени
Hit(): уменьшиhitsна единицу. При значении 0 кирпич ломается, а очки начисляются как и раньше; в противном случае просто покажи его новый цвет. - В
GameManagerдобавьpublic int[] rowHits = { 2, 1, 1, 1, 1 };и задавай каждому новому кирпичу количество попаданийrowHits[row]с помощьюSetHits.
Нажми Play, повреди оранжевый кирпич в верхнем ряду, затем нажми Check.
Попробуйте сами
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);
}
}
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.