Menu
CoddyTech

Прочные кирпичи

Урок 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[] с одним числом на строку, начиная с верхней, позволяет верхней строке выдерживать больше попаданий, чем остальным.

challenge icon

Задание

Средне
  1. В Brick добавь public int hits = 1 и public Color[] colors. В сцене массив colors заполняется синим, оранжевым и красным цветами для 1, 2 и 3 оставшихся попаданий.
  2. Напиши public void SetHits(int count): метод задаёт значение hits и показывает соответствующий цвет кирпича.
  3. Измени Hit(): уменьши hits на единицу. При значении 0 кирпич ломается, а очки начисляются как и раньше; в противном случае просто покажи его новый цвет.
  4. В 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);
    }
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Игра в Unity: арканоид