Игровое поле
Урок 1 из 14 курса Игра на Unity: 3D-змейка на Coddy.
В этом курсе ты создашь Snake в 3D: змею из кубов на поле 15 на 15, видимом сверху. Она движется на одну клетку за раз, поворачивает по стрелкам или WASD, ест еду, растёт и погибает, коснувшись стены или собственного хвоста. Ею управляют два скрипта: Snake на голове и GameManager, который останется пустым, пока в следующей главе не появится еда.
Ширина каждой клетки — одна единица, а её центр находится на целочисленных координатах: x и z варьируются от -7 до 7, а y каждой клетки равен 0. Змея никогда не скользит между клетками. Она перемещается на целую клетку за такт — фиксированный промежуток времени, например 0.15 секунды, — а между тактами стоит на месте.
В Unity такт задаётся таймером: каждый кадр добавляй Time.deltaTime, а когда таймер достигнет интервала, выполняй действие и вычитай интервал. Этот маяк мигает раз в секунду:
public Light beacon;
public float interval = 1f;
private float timer;
void Update()
{
timer += Time.deltaTime;
if (timer >= interval)
{
timer -= interval;
beacon.enabled = !beacon.enabled;
}
}Если вычитать интервал, а не сбрасывать таймер на 0, сохраняется часть кадра, которая превысила интервал, поэтому такт не будет постепенно запаздывать.
Задание
ЛегкоГолова — зелёный куб на клетке (-3, 0, 0). У Snake есть tick — 0.15 секунды — и direction, Vector3.right.
- Добавь
private float timer;. - В
Update()увеличивай таймер наTime.deltaTime. Когда он достигнетtick, вычти из негоtickи вызовиStep(). - В
Step()перемести голову на одну клетку вдольdirection.
Нажми Играть и посмотри, как голова движется вправо. Пока она покидает игровое поле: стены появятся в уроке 4. Затем нажми Проверить.
Попробуйте сами
using UnityEngine;
public class Snake : MonoBehaviour
{
public float tick = 0.15f; // секунд между двумя шагами
private Vector3 direction = Vector3.right;
void Update()
{
// Каждые tick секунд выполняйте один Step()
}
void Step()
{
// Переместите голову на одну клетку в направлении direction
}
}
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.