Menu
CoddyTech

Игровое поле

Урок 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, сохраняется часть кадра, которая превысила интервал, поэтому такт не будет постепенно запаздывать.

challenge icon

Задание

Легко

Голова — зелёный куб на клетке (-3, 0, 0). У Snake есть tick — 0.15 секунды — и direction, Vector3.right.

  1. Добавь private float timer;.
  2. В Update() увеличивай таймер на Time.deltaTime. Когда он достигнет tick, вычти из него tick и вызови Step().
  3. В 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
    }
}
quiz iconПроверьте себя

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

Все уроки раздела Игра на Unity: 3D-змейка