Unity 5: Генерация блоков для 2D игры (Урок 8)

В этом уроке мы реализуем генерацию блоков, по которым игрок будет прыгать.

Создание префаба блока

Создадим куб, масштабируем его по оси X (увеличим), а по оси Y (уменьшим, почти до нуля). Создадим из него префаб, перетащив куб в папку Prefabs и переименовав его в «Block». Удалим куб со сцены.

Генерация блоков

Создадим на сцене пустой объект «SpawnBlocks». Создадим папку «Game» и в ней скрипт «SpawnBlocks». Добавим компонент «SpawnBlocks» на пустой объект и активируем его. Скрипт потребует ссылку на объект Game Manager (если используется).

Скрипт SpawnBlocks

В скрипте «SpawnBlocks» создадим функцию Start(). Для генерации блоков используем переменную public GameObject block; (ссылка на префаб блока) и Vector3 blockPos для хранения позиции нового блока.

Определим минимальные и максимальные значения координат X и Y для генерации блоков:

  • X: от 0.7 до 1.7
  • Y: от -3.2 до 1

Координата Z нас не интересует (2D игра). Перетащим префаб «Block» в поле block в инспекторе.

Вместо немедленного создания блока на сцене, создадим его за экраном (например, в позиции Vector3(5, -6, 0)) и будем плавно перемещать к целевой позиции.

Добавим переменные:

  • public GameObject block; — Префаб блока.
  • public float speed; — Скорость движения блока.

В функции Update() добавим проверку: если текущая позиция блока не равна целевой, будем двигать его с помощью Vector3.Lerp:

// ... код ...

Vector3 targetPos = blockPos; // Целевая позиция

if (blockInst.transform.position != targetPos)
{
    blockInst.transform.position = Vector3.Lerp(blockInst.transform.position, targetPos, Time.deltaTime * speed);
}

Для случайного изменения масштаба блока по оси X добавим в Update():

float randomScaleX = Random.Range(1.2f, 2f);
blockInst.transform.localScale = new Vector3(randomScaleX, 0.5f, 2f);

Настройка и заключение

После тестирования, возможно, потребуется корректировка диапазонов координат X и Y, а также скорости. Удалите первоначально размещённый на сцене префаб блока. Настроим начальную позицию создания блоков (например, Vector3(5f, -6f, 0f)) для плавного появления.

Для более плавного и редкого появления блоков можно использовать, например, Vector3(0f, 0.7f, 0f) для позиции блока и скорректировать диапазон по Y (Vector3(-0.6f, -3.2f, 0f) — пример).

В итоге, мы создали систему генерации блоков с плавной анимацией и случайным размером по оси X. В дальнейшем можно добавить функционал прыжков.

Что будем искать? Например,программа