Menu
CoddyTech

Стена

Урок 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 возвращает скрипт новой копии, готовый к использованию.

challenge icon

Задание

Средне

Построй стену в GameManager:

  1. Добавь 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.
  2. Напиши void BuildWall(): по одному кирпичу для каждой строки и колонки, сделав его дочерним объектом wall. Строка 0 находится на y = topY, а каждая следующая строка — на spacingY ниже. Расстояние между колонками — spacingX, стена расположена по центру относительно x = 0. Кирпичи находятся на z = 0.
  3. Вызови BuildWall() из Start().

Нажми Play и отбей мяч от стены (кирпичи пока не разрушаются), затем нажми Check.

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

using UnityEngine;

public class GameManager : MonoBehaviour
{
    public static GameManager Instance;

    void Awake()
    {
        Instance = this;
    }

    // Позже: стена из кирпичей, счёт, жизни и уровни.
}
quiz iconПроверьте себя

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

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