Бегун
Часть раздела Основы скриптинга в Unity путешествия по Unity на Coddy. Урок 75 из 85.
В этой главе мы создадим небольшую игру «Уворачивайся от блоков». Ты управляешь бегуном, движущимся по дорожке, пока с неба падают блоки; одного касания достаточно, чтобы забег закончился. Вся игра состоит из одного скрипта Runner, который в каждом уроке получает новую возможность: управление, падающие блоки, их удаление, столкновение и счёт.
Первая возможность — управление, при котором персонаж остаётся на дорожке. Для этого используется Mathf.Clamp(value, min, max) из игры «Поймай звезду»: функция возвращает min, если значение меньше диапазона, max, если оно больше, и само значение во всех остальных случаях. Важно, куда поставить ограничение. Этот индикатор заряда заполняется, пока удерживается пробел, и разряжается, когда его не удерживают; значение всегда остаётся в пределах от 0 до 10:
[SerializeField] private float charge = 0f;
void Update()
{
if (Input.GetKey(KeyCode.Space))
{
charge += 4f * Time.deltaTime;
}
else
{
charge -= 2f * Time.deltaTime;
}
charge = Mathf.Clamp(charge, 0f, 10f);
transform.localScale = new Vector3(0.5f, charge, 0.5f);
}Ограничение применяется после изменения значения. Если применить его сначала, в конце кадра значение может оказаться на один шаг выше предела, и полоса будет нарисована с учётом этого значения. Mathf.Clamp также возвращает новое число, а не изменяет переданную ей переменную, поэтому присвой результат обратно.
Задание
СреднеНачни игру «Уклоняйся от блоков»: управляй бегуном, перемещая его по дорожке.
- В
Update()скопируйtransform.positionвVector3 pи прибавьInput.GetAxisRaw("Horizontal") * speed * Time.deltaTimeкp.x. Необработанное значение оси сразу перемещает бегуна на полной скорости. - Задай
p.x = Mathf.Clamp(p.x, -laneEdge, laneEdge);, затемtransform.position = p;.
Нажми «Играть», щёлкни по игровому окну и добеги до обоих концов: бегун остановится у краёв. Затем нажми «Проверить».
Попробуйте сами
using UnityEngine;
public class Runner : MonoBehaviour
{
[SerializeField] private float speed = 6f;
[SerializeField] private float laneEdge = 4f;
void Update()
{
// перемещайся по x с помощью клавиш со стрелками, затем удерживай x в пределах полосы
}
}
Все уроки раздела Основы скриптинга в Unity
1Основы C# в Unity
Привет, UnityПеременныеДля дробных чисел нужна fТекст в консолиПеременные, которые запоминаютЕсли и иначеСравнение чиселПовторение: сборщик монет7Циклы и методы
Повторение с forЦиклы внутри цикловНапишите методМетоды, которые возвращают значениеМассивыПовторение: лестница10Поиск объектов
Поиск по имениТегиПоиск по типуСсылки лучше поискаNull в UnityПовторение: ближайшая монета13Проект: уворачиваемся от блоков
БегунБлоки с неба2Заставь двигаться
Размести кубДвигай каждый кадрПоворачивай каждую секундуУправляй клавишамиПовторение: веди куб5Векторы
Сложение векторовНаправленияЛокальное и мировое пространствоСкорость по диагоналиРасстояние между объектамиVector3 — это структураПовторение: пилот дрона8Игровые объекты и компоненты
Ссылки в InspectorПолучение компонентаОтсутствующие компонентыДобавление компонентаRequireComponentПоказ и скрытиеПовторение: выключатель светаПотренируйтесь самостоятельно: Песочница Unity