Страницы

среда, 4 декабря 2019 г.

Работа с корутинами в Unity. Часть 4. Финал

Важные вещи – резюме
Перейдем к концепциям, которые я считаю наиболее важными для работы с корутинами.

  1. Состояния - сопрограммы очень полезны, когда вам нужно изменить состояние объекта. Это может быть ИИ (ходьба, атака и т.д.). Они могут использоваться для других вещей, которые имеют состояние или статус (состояние, в котором находится текущая сцена или в какой фазе находится игра в настоящее время и т. д.)
  2. Задержка выполнения - сопрограммы также хороши для реализации задержки. Хорошим примером является пример со светильниками из главы 2. Или, например, у вас есть таймер для головоломки, и ее состояние сбрасывается, если она не решена до истечения таймера.
  3. One Shots - сопрограмма может быть легко настроена, если вам нужна ситуация с одним действием. Возможно, это дверь, которая открывается после завершения головоломки, или персонаж, который перемещается в новое место после завершения квеста. В принципе, все, что нужно обновить в течение конечного периода времени и потом не запускать.


Это, конечно, не единственные ситуации, в которых сопрограммы полезны. Думайте о перечисленных пунктах как о руководящих принципах, а не как о правилах.

Invoke

Есть еще одна вещь, которую я хотел бы осветить, и это касается использования сопрограмм для задержки.
Unity фактически имеет встроенный метод для задержки выполнения метода, известного как invoke. Этот метод полезен, если вам нужно что-то, что произойдет по прошествии определенного периода времени.
public class InvokeExample : MonoBehaviour
{
 Private void Start()
 {
  Invoke(“Test”, 5f);
 }
 private void Test()
 {
  Debug.Log(“Testing testing testing”);
 }
}
В этом примере сначала длится ожидание 5 секунд, а затем запускается наш тестовый метод, который просто выводит строку "Testing testing testing " на консоль. Чтобы вызвать что-то, вы просто вводите строковое имя метода, который вы хотите вызвать, а затем количество времени, которое является задержкой.
Существует также метод invokerepeating, который будет ждать x секунд, а затем повторять процедуру каждые y секунд после первоначального ожидания и работать вечно.
public class InovkeRepeatingExample : MonoBehaviour
{
 private void Start()
 {
  InvokeRepeating(“Test”, 2.5f, 5f);
 }
 private void Test()
 {
  Debug.Log(“Testing testing testing”);
 }
}
Приведенный выше пример похож на предыдущий, за исключением того, что будет задержка 2,5 секунды, вывод на консоль, ожидание 5 секунд, вывод на консоль, ожидание 5 секунд и постоянное повторение этого.
Эти методы существуют, поэтому вам не нужно создавать сопрограмму, если вы просто хотите, чтобы что-то простое повторялось или откладывалось всякий раз, когда что-то происходит.

По книге Lucas Faustino “Unity5 Coroutines”.
Содержание
1 часть. Что такое корутины. 
2 часть. Coroutine vs Update. 
3 часть. Примеры использования сопрограмм.
4 часть. Финал.