Учебники

Единство — сопрограммы

Сопрограммы являются наиболее полезными инструментами при создании игр в Unity. Давайте рассмотрим строку кода, показанную ниже, чтобы понять, что такое сопрограммы.

IEnumerator MyCoroutineMethod() {
   // Your code here…
   
   yield return null;
}

Как правило, если вы вызываете функцию в Unity (или, на самом деле, C #), функция запускается от начала до конца. Это то, что вы считаете «нормальным» поведением в том, что касается вашего кода. Однако иногда мы хотим намеренно замедлять функцию или заставлять ее ждать дольше, чем она длится доли секунды. Сопрограмма способна именно на это: сопрограмма — это функция, которая способна ожидать и синхронизировать свой процесс, а также полностью останавливать его.

Давайте рассмотрим пример, чтобы понять, как работает сопрограмма. Скажем, мы хотим сделать квадрат, который меняет свой цвет между красным и синим с интервалом в 1 секунду.

Для начала мы создаем спрайт. Затем создайте новый скрипт и назовите его ColorChanger . В этом скрипте мы получаем ссылку на Sprite Renderer спрайта. Однако мы будем использовать другой способ получения компонента. Вместо того чтобы перетаскивать компонент в слот, как мы делали до сих пор, мы попросим код определить сам компонент.

Это делается с помощью метода GetComponent , который возвращает первый соответствующий компонент, который он обнаруживает. Поскольку мы используем только один Sprite Renderer для каждого объекта, мы можем использовать этот метод для автоматического обнаружения и получения ссылки на наше средство визуализации каждый раз.

Помните, что средство визуализации отвечает за то, чтобы спрайт действительно отображался на экране. Рендерер имеет свойство color, которое влияет на глобальный цвет спрайта; это значение, которое должно быть изменено. Обнародование значений цветов позволит нам выбирать их через редактор в стандартной программе выбора цвета по умолчанию в вашей операционной системе.

private SpriteRenderer sr;

public Color color1;
public Color color2;

void Start () {
   sr = GetComponent<SpriteRenderer>();
   StartCoroutine(ChangeColor());
}

IEnumerator ChangeColor() {
   
   while (true) {
      
      if (sr.color == color1)
         sr.color = color2;
      
      else
         sr.color = color1;
      
      yield return new WaitForSeconds(3);
   }
}

Теперь мы перехватим нашу функцию сопрограммы в цикле while.

Чтобы создать сопрограмму в C #, мы просто создаем метод, который возвращает IEnumerator . Также необходимо заявление о доходности . Отчет о доходности является особенным; это то, что на самом деле говорит Unity приостановить выполнение сценария и перейти к следующему кадру.

Есть несколько способов, которые могут быть использованы для получения прибыли; Одним из которых является создание экземпляра класса WaitForSeconds . Это заставляет сопрограмму ждать определенное количество секунд реального мира, прежде чем продолжить.

Давайте скомпилируем наш код и вернемся к Unity. Мы просто выберем наши чередующиеся цвета и нажмем на игру. Наш объект должен теперь переключаться между двумя цветами с интервалом в 3 секунды. Вы можете сделать интервал общедоступной переменной и настроить частоту изменения цвета.

Сопрограммы широко используются для временных методов, как тот, который мы только что сделали. Разнообразные методы WaitForX имеют свои собственные применения. Сопрограммы также используются для запуска «на стороне» процессов, которые запускаются самостоятельно, в то время как игра запускается одновременно. Это полезно, например, для загрузки закадровых частей большого уровня, когда проигрыватель начинает с одной точки.