В этом уроке мы реализуем генерацию блоков, по которым игрок будет прыгать.
Создание префаба блока
Создадим куб, масштабируем его по оси 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. В дальнейшем можно добавить функционал прыжков.