Этот урок описывает перемещение блоков в 2D игре. Цель — обеспечить плавное передвижение блоков вверх и влево при переходе игрока на новый блок.
Возврат блоков на исходную позицию
Изначально блоки возвращаются в исходное положение. Для решения этой проблемы добавим булеву переменную onPlace. Эта переменная будет true, когда блок находится в нужном положении (Block.transform.position == Block.post). После этого блок перестанет возвращаться на исходную позицию.
Объединение блоков
Для одновременного перемещения всех блоков создадим объект GameObject с именем All cubes. Все создаваемые блоки будут его дочерними объектами. Это позволит управлять перемещением всех блоков, изменяя позицию родительского объекта. Важно убедиться в корректности ссылок на объекты.
Добавление переменных и скриптов
В скрипт CubeJump добавим две статические публичные переменные: Jump и NextBlock. Jump будет true при прыжке игрока, синхронизируя перемещение блоков. NextBlock определяет момент создания нового блока.
Создадим скрипт MoveCubes для обработки перемещения блоков. Добавим переменные:
- moved: Булева переменная, true если блоки перемещены.
- target: Вектор 3, целевая позиция блоков.
В функции FixedUpdate скрипта MoveCubes проверяется значение NextBlock из CubeJump. Если NextBlock — true, и позиция блоков не равна target, блоки перемещаются к target с помощью MoveTowards и заданной скоростью. Когда блоки достигают target, moved устанавливается в true. Новый target вычисляется, смещая блоки влево и вверх.
В скрипте CubeJump, при событии OnMouseUp, Jump устанавливается в true. В MoveCubes после перемещения блоков, Jump устанавливается в false.
Создание и удаление блоков
В скрипте SpawnBlocks создадим функцию Spawn для создания новых блоков. Создание происходит, когда Jump и NextBlock — true.
Для удаления блоков за пределами экрана добавим объект GameObject — DeleteBlock с большим триггером BoxCollider за игровым полем. Создадим скрипт DeleteBlock с функцией OnTriggerEnter. Если тег вошедшего объекта равен «Cube», объект удаляется с помощью Destroy. Всем блокам нужно добавить тег «Cube» и Rigidbody с useGravity — false и kinematic — true.
Блоки будут плавно перемещаться вверх и влево при прыжке игрока, а старые блоки будут удаляться при выходе за пределы игрового поля. Это обеспечивает плавную и эффективную работу системы перемещения блоков.