Стена
Урок 5 из 16 курса Игра в Unity: арканоид на Coddy.
Кирпичи располагаются в сетке: строки идут сверху вниз, столбцы — слева направо; каждый кирпич — копия префаба, созданная в двух вложенных циклах. Положение кирпича определяется номерами его строки и столбца, умноженными на расстояние между центрами кирпичей, которое равно размеру кирпича плюс небольшой зазор.
Чтобы центрировать сетку по x = 0, определите, где будет находиться первый столбец. Между n столбцами есть n минус 1 зазоров, поэтому при расстоянии s центры крайних столбцов отстоят друг от друга на (n - 1) * s, а первый находится на половину этого расстояния левее центра. Пять столбиков забора на расстоянии 2 единицы друг от друга:
int posts = 5;
float spacing = 2f;
float left = -(posts - 1) * spacing / 2f;
for (int i = 0; i < posts; i++)
{
Instantiate(postPrefab, new Vector3(left + i * spacing, 0f, 3f), Quaternion.identity);
}Они стоят в точках -4, -2, 0, 2 и 4: первый столбик находится в точке -4, а не -5, потому что пять столбиков разделяют четыре зазора. Четвёртый аргумент Instantiate — родительский Transform — помещает каждую копию внутрь одного объекта, чтобы окно Hierarchy оставалось упорядоченным. Если тип поля префаба — скрипт, например Brick, Instantiate возвращает скрипт новой копии, готовый к использованию.
Задание
СреднеПострой стену в GameManager:
- Добавь
public Brick brickPrefabиpublic Transform wall(сцена связывает префаб Brick и объект Wall), а такжеpublic int rows = 5,public int columns = 9,public float spacingX = 1.75f,public float spacingY = 0.75fиpublic float topY = 6f. - Напиши
void BuildWall(): по одному кирпичу для каждой строки и колонки, сделав его дочерним объектомwall. Строка 0 находится на y =topY, а каждая следующая строка — наspacingYниже. Расстояние между колонками —spacingX, стена расположена по центру относительно x = 0. Кирпичи находятся на z = 0. - Вызови
BuildWall()изStart().
Нажми Play и отбей мяч от стены (кирпичи пока не разрушаются), затем нажми Check.
Попробуйте сами
using UnityEngine;
public class GameManager : MonoBehaviour
{
public static GameManager Instance;
void Awake()
{
Instance = this;
}
// Позже: стена из кирпичей, счёт, жизни и уровни.
}
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.