Управляй
Урок 2 из 14 курса Игра на Unity: 3D-змейка на Coddy.
Змея поворачивает с помощью клавиш со стрелками или WASD. Камера смотрит на игровое поле с переднего края, поэтому движение вверх по экрану направлено вдоль +z, Vector3.forward, а вниз — это Vector3.back. Vector3.up направлен в небо: голова, перемещённая в этом направлении, поднялась бы над игровым полем.
Поворот происходит один раз при нажатии, поэтому считывай клавиши с помощью wasPressedThisFrame из Input System. Нажатие лишь меняет direction. Step() по-прежнему перемещает голову на следующем такте, поэтому змея сохраняет свой ритм. Ровер, который направляется вправо по экрану при нажатии D:
Keyboard keyboard = Keyboard.current;
if (keyboard != null && keyboard.dKey.wasPressedThisFrame)
{
heading = Vector3.right;
}В Input System у клавиатуры нет осей: стрелка и соответствующая ей буква — это две клавиши, соединённые с помощью ||. На устройстве без клавиатуры Keyboard.current имеет значение null, поэтому считай его один раз в начале и проверь.
Задание
Легко- Добавь
using UnityEngine.InputSystem;вSnake. - В начале
Update()считайKeyboard.current. Нажатие клавиши со стрелкой вверх или W задаёт дляdirectionзначениеVector3.forward; стрелка вниз или S —Vector3.back; стрелка влево или A —Vector3.left; стрелка вправо или D —Vector3.right. - Оставь
Step()без изменений: голова повернёт на следующем тике.
Нажми Play, щёлкни по игровому окну и управляй змейкой, затем нажми Check.
Попробуйте сами
using UnityEngine;
public class Snake : MonoBehaviour
{
public float tick = 0.15f; // секунды между двумя шагами
private float timer;
private Vector3 direction = Vector3.right;
void Update()
{
timer += Time.deltaTime;
if (timer >= tick)
{
timer -= tick;
Step();
}
}
void Step()
{
transform.position += direction;
}
}
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.