Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Руководство API скрипты

Объявление

public Coroutine StartCoroutine(IEnumerator routine);

Описание

Запускает сопрограмму.

Выполнение сопрограммы можно приостановить в любой момент с помощью оператора yield. Когда используется инструкция yield, сопрограмма приостанавливает выполнение и автоматически возобновляет выполнение в следующем кадре. Дополнительную информацию см. в документации по Coroutines.

Сопрограммы отлично подходят для моделирования поведения в нескольких кадрах. Метод StartCoroutine возвращается при первом возврате yield, однако вы можете вернуть результат, который ожидает завершения выполнения сопрограммы. Нет гарантии, что сопрограммы заканчиваются в том же порядке, в котором они начались, даже если они заканчиваются в одном и том же кадре.

Вывод любого типа, включая null, приводит к тому, что выполнение возвращается в более позднем кадре, если только сопрограмма не остановлена ​​или не завершена.

Примечание. Вы можете остановить сопрограмму с помощью MonoBehaviour.StopCoroutine и MonoBehaviour.StopAllCoroutines. Сопрограммы также останавливаются, когда MonoBehaviour уничтожается или если GameObject, к которому привязано MonoBehaviour, отключен. Сопрограммы не останавливаются при отключении MonoBehaviour.

См. также: Сопрограмма, Инструкция по выходу

Пример StartCoroutine:

using UnityEngine; using System.Collections; // В этом примере мы показываем, как вызвать сопрограмму и // продолжить выполнение функции параллельно. public class ExampleClass : MonoBehaviour { // В этом примере мы показываем, как вызвать сопрограмму и // продолжить выполнение функции параллельно. private IEnumerator coroutine; void Start() { // - Через 0 секунд печатает "Начиная 0.0" // - Через 0 секунд печатает "Before WaitAndPrint Finishes 0.0" // - Через 2 секунды печатает "WaitAndPrint 2.0" print("Starting " + Time.time); // Запускаем функцию WaitAndPrint как сопрограмму. coroutine = WaitAndPrint(2.0f); StartCoroutine(coroutine); print("Before WaitAndPrint Finishes " + Time.time); } // каждые 2 секунды выполняем print() private IEnumerator WaitAndPrint(float waitTime) { while (true) { yield return new WaitForSeconds(waitTime); print("WaitAndPrint " + Time.time); } } }

Другой пример:

// В этом примере мы показываем, как вызывать сопрограмму и ждать, пока она // завершено using UnityEngine; using System.Collections; public class ExampleClass : MonoBehaviour { IEnumerator Start() { // - Через 0 секунд печатает "Начиная 0.0" // - Через 2 секунды печатает "WaitAndPrint 2.0" // - Через 2 секунды печатает "Готово 2.0" print("Starting " + Time.time); // Запускаем функцию WaitAndPrint как сопрограмму. И дождитесь его завершения. // то же, что и yield return WaitAndPrint(2.0f); yield return StartCoroutine(WaitAndPrint(2.0f)); print("Done " + Time.time); } // приостановить выполнение на секунды ожидания IEnumerator WaitAndPrint(float waitTime) { yield return new WaitForSeconds(waitTime); print("WaitAndPrint " + Time.time); } }

Объявление

public Coroutine StartCoroutine(string methodName, object value = null);

Описание

Запускает сопрограмму с именем methodName.

В большинстве случаев лучше использовать описанный выше вариант StartCoroutine. Однако StartCoroutine, использующий строковое имя метода, позволяет использовать StopCoroutine с конкретным именем метода. Недостатком является то, что строковая версия имеет более высокие накладные расходы во время выполнения для запуска сопрограммы, и вы можете передать только один параметр.

// В этом примере мы показываем, как вызвать сопрограмму, используя строковое имя, и остановить ее. using UnityEngine; using System.Collections; public class ExampleClass : MonoBehaviour { IEnumerator Start() { StartCoroutine("DoSomething", 2.0f); yield return new WaitForSeconds(1); StopCoroutine("DoSomething"); } IEnumerator DoSomething(float someParameter) { while (true) { print("DoSomething Loop"); // Завершить выполнение этой сопрограммы и вернуться в основной цикл до следующего кадра yield return null; } } }

Созданная сопрограмма может запустить другую сопрограмму. Эти две сопрограммы могут работать вместе во многих отношениях. Это включает в себя обе сопрограммы, работающие параллельно. В качестве альтернативы одна сопрограмма может остановить другую, в то время как она продолжает свою работу. В приведенном ниже примере показана пауза одной сопрограммы при запуске другой. Когда вторая сопрограмма завершает работу, она перезапускает первую.

using System.Collections; using System.Collections.Generic; using UnityEngine; public class ExampleClass : MonoBehaviour { void Start() { StartCoroutine(coroutineA()); } IEnumerator coroutineA() { // ждем 1 секунду Debug.Log("coroutineA created"); yield return new WaitForSeconds(1.0f); yield return StartCoroutine(coroutineB()); Debug.Log("coroutineA running again"); } IEnumerator coroutineB() { Debug.Log("coroutineB created"); yield return new WaitForSeconds(2.5f); Debug.Log("coroutineB enables coroutineA to run"); } }
Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
API скрипты 2021.3