Menu
CoddyTech

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

Урок 7 из 19 курса Игра в 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; (сцена задаёт синий, оранжевый и красный цвета) и SetHits(int count): установи количество ударов и цвет colors[hits - 1].
  2. Hit() уменьшает количество ударов на единицу: при 0 кирпич разрушается и начисляются очки, иначе отображается новый цвет.
  3. В GameManager добавь public int[] rowHits = { 2, 1, 1, 1, 1 }; и вызывай brick.SetHits(rowHits[row]) для каждого нового кирпича.

Нажми «Играть»: верхний ряд будет оранжевым и станет синим после удара. Затем нажми «Проверить».

Попробуйте сами

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);
    }
}

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

Потренируйтесь самостоятельно: Песочница Unity