Menu
CoddyTech

Бегун

Часть раздела Основы скриптинга в 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 также возвращает новое число, а не изменяет переданную ей переменную, поэтому присвой результат обратно.

challenge icon

Задание

Средне

Начни игру «Уклоняйся от блоков»: управляй бегуном, перемещая его по дорожке.

  1. В Update() скопируй transform.position в Vector3 p и прибавь Input.GetAxisRaw("Horizontal") * speed * Time.deltaTime к p.x. Необработанное значение оси сразу перемещает бегуна на полной скорости.
  2. Задай 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

Потренируйтесь самостоятельно: Песочница Unity