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

CustomYieldInstruction

класс в UnityEngine / Реализовано в: UnityEngine.CoreModule

Описание

Базовый класс для пользовательских инструкций yield для приостановки сопрограмм.

CustomYieldInstruction позволяет реализовать пользовательские инструкции yield для приостановки выполнения сопрограммы до наступления события. Под капотом пользовательская инструкция yield — это просто еще одна работающая сопрограмма. Чтобы реализовать его, наследуйте от класса CustomYieldInstruction и переопределите свойство keepWaiting. Чтобы приостановить сопрограмму, верните true. Чтобы позволить сопрограмме продолжить выполнение, верните false. Свойство keepWaiting запрашивается в каждом кадре после MonoBehaviour.Update и перед MonoBehaviour.LateUpdate.

Для этого класса требуется Unity 5.3 или более поздней версии.

Чтобы приостановить сопрограмму, верните true. Чтобы позволить сопрограмме продолжить выполнение, верните false.

// Пример, показывающий, как скрипт CustomYieldInstruction // может быть использован. Это ждет, когда левая кнопка поднимется, а затем // ждём, пока правая кнопка нажмёт. using System.Collections; using UnityEngine;

public class ExampleScript : MonoBehaviour { void Update() { if (Input.GetMouseButtonUp(0)) { Debug.Log("Left mouse button up"); StartCoroutine(waitForMouseDown()); } }

public IEnumerator waitForMouseDown() { yield return new WaitForMouseDown(); Debug.Log("Right mouse button pressed"); } }

Следующий скрипт реализует переопределяемую версию keepWaiting. Эта реализация С# может использоваться JS. В этом случае убедитесь, что этот сценарий C# находится в папке, такой как Plugins, чтобы он был скомпилирован перед приведенным выше примером сценария JS.

using UnityEngine;

public class WaitForMouseDown : CustomYieldInstruction { public override bool keepWaiting { get { return !Input.GetMouseButtonDown(1); } }

public WaitForMouseDown() { Debug.Log("Waiting for Mouse right button down"); } }

using System.Collections; using UnityEngine; using System;

// Implementation of WaitWhile yield instruction. This can be later used as: // yield return new WaitWhile(() => Princess.isInCastle); class WaitWhile1 : CustomYieldInstruction { Func m_Predicate;

public override bool keepWaiting { get { return m_Predicate(); } }

public WaitWhile1(Func predicate) { m_Predicate = predicate; } }

Чтобы иметь больший контроль и реализовать более сложные инструкции по выходу, вы можете наследовать непосредственно от класса System.Collections.IEnumerator. В этом случае реализуйте метод MoveNext() так же, как реализуете свойство keepWaiting. Кроме того, вы также можете вернуть объект в свойстве Current, который будет обработан планировщиком сопрограмм Unity после выполнения MoveNext() метод. Так, например, если Current возвращает другой объект, наследуемый от IEnumerator, то текущий перечислитель будет приостановлен до тех пор, пока возвращенный не завершится.< /p> using System; using System.Collections;

// Same WaitWhile implemented by inheriting from IEnumerator. class WaitWhile2 : IEnumerator { Func m_Predicate;

public object Current { get { return null; } }

public bool MoveNext() { return m_Predicate(); }

public void Reset() {}

public WaitWhile2(Func predicate) { m_Predicate = predicate; } }

Свойства

keepWaiting Указывает, следует ли приостановить сопрограмму.
Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
API скрипты 2021.3