Unity, вызов функции IEnumerator из кнопки onClick - PullRequest
0 голосов
/ 15 октября 2019

Я пытался вызвать функцию IEnumerator с помощью нажатия кнопки, чтобы я мог что-то вернуть, но я не могу выбрать функцию из выпадающего меню инспектора On Click().

Я пытался вызватьIEnumerator из другой функции и назначение этой функции кнопке, не работает!

И, очевидно, я не могу сделать yield return в функции void.

Так могКто-нибудь, пожалуйста, будь так добр и научи меня, что мне делать!?

Очень признателен!

Ответы [ 2 ]

3 голосов
/ 15 октября 2019

Существуют определенные правила для привязки функции к событию единства от инспектора.

1) Функция должна быть public, чтобы иметь возможность выбрать ее из инспектора.

2) Тип возвращаемого значения должен быть void, поэтому вы не сможете выбирать функции с любым типом возврата, а поскольку ваша IEnumerator функция возвращает IEnumerator, вы не сможете выбрать ее изинспектор.

3) Параметры функции должны соответствовать параметрам события, если только UnityEvent не принимает такие параметры, как событие Button.onClick (спасибо @derHugo за исправление), например событие кнопки onClick не делаетНе берите никаких параметров, поэтому чтобы выбрать для него функцию из инспектора, функция должна выглядеть следующим образом:

public void ChoosableTemplateForOnClickButton() { }

Но вы хотите вызвать IEnumerator из инспектора, так что вы можете сделать это вфункция void:

при условии, что ваша функция IEnumerator выглядит как

public IEnumerator MyRoutine()
{
   yield and enjoy...
}

, оберните ее в функцию void:

public void RoutineWrap()
{
   StartCoroutine(MyRoutine());
}

Теперь вы можете выбрать RoutineWrap изINSPECтор.

1 голос
/ 15 октября 2019

Альтернатива этому правильному ответу вы также всегда можете добавить обратный вызов во время выполнения с помощью сценария.

Все еще в Unity каждый Coroutine должен запускаться с использованием StartCoroutine:

public Button button;

private void Awake()
{
    button.onClick.AddListener(() => StartCoroutine(MyRoutine()));
}

private IEnumerator MyRoutine()
{
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...