Menu
CoddyTech

Бегун

Часть раздела Основы скриптинга в Unity путешествия по Unity на Coddy. Урок 60 из 67.

В этой главе мы создадим небольшую игру Dodge the Blocks. Ты управляешь бегуном, который движется по дорожке, пока с неба падают блоки. Одно касание завершает забег. Вся игра состоит из одного скрипта — Runner, который получает новые возможности в каждом уроке: управление, падающие блоки, их удаление, столкновение и счёт.

Первая возможность — управление, при котором персонаж остаётся на дорожке. Для этого мы используем Mathf.Clamp(value, min, max) из игры Catch the Star: функция возвращает min, если значение меньше диапазона, max, если оно больше, а в остальных случаях — само значение. Важно, где именно применяется ограничение. Этот индикатор заряда заполняется, пока удерживается Space, разряжается, когда клавиша не нажата, и остаётся в пределах от 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 также возвращает новое число, а не изменяет переданную ей переменную, поэтому результат нужно присвоить обратно.

challenge icon

Задание

Средне

Начни Dodge the Blocks с бегуна. В Inspector задаются значения speed (6) и laneEdge (4) для скрипта Runner.

  • Стрелки влево и вправо перемещают бегуна по оси x со скоростью speed единиц в секунду.
  • Его координата x никогда не становится меньше -laneEdge или больше laneEdge, поэтому он остаётся на дорожке.

Нажми Play, щёлкни по игровому окну и добеги до обоих концов дорожки, затем нажми Check.

Попробуйте сами

using UnityEngine;

public class Runner : MonoBehaviour
{
    [SerializeField] private float speed = 6f;
    [SerializeField] private float laneEdge = 4f;

    void Update()
    {
        // двигайся по оси x с помощью стрелок, затем удерживай x в пределах дорожки
    }
}
quiz iconПроверьте себя

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

Все уроки раздела Основы скриптинга в Unity