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