Как правильно использовать IEnumerator, когда кнопка вызывает несколько функций

Я делаю карточную игру, в которой пытаюсь сделать задержку (0,5f) перед созданием каждой карты. У меня есть код, который создает экземпляры и объект

public IEnumerator Name(int x,int y, int z)
{

}    

В IEnum у меня есть yeild return new WaitForSeconds(0.5f) перед всем кодом с созданием.

Я вызываю свой IEnumerator в 2 разных классах по 2 раза в каждом, используя

StartCoroutine(Name(...par...));

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

Есть ли способ заставить карточки появляться по одной.

Спасибо за любую поддержку.


person Aleks19    schedule 05.09.2018    source источник
comment
Вероятно, вам стоит подумать об использовании async/await, чем совместных подпрограмм Unity, теперь, когда Unity поддерживает Tasks. Первый является стандартом для разработки .NET, в то время как совместные подпрограммы, унаследованное изобретение Unity, являются неправильным использованием yield/return.   -  person MickyD    schedule 06.09.2018
comment
@MickyD O Я тоже попробую. Спасибо   -  person Aleks19    schedule 06.09.2018
comment
Как долго длится f? Что такое задержка (0,5f)?   -  person Flydog57    schedule 06.09.2018
comment
0,5 секунды. Я пробовал всего с 1 или 2, тоже не имеет значения. Испытаю новый способ и посмотрю.   -  person Aleks19    schedule 06.09.2018


Ответы (1)


То, что в настоящее время вызывает StartCoroutine, должно быть сопрограммой.

Прямо сейчас у вас есть код, который выглядит / ведет себя следующим образом:

StartCoroutine(Name(...par...));
StartCoroutine(Name(...par...));
StartCoroutine(Name(...par...));
StartCoroutine(Name(...par...));

И все они порождают карту и не ждут друг друга. Вы этого не хотите, поэтому вам нужно будет внести фундаментальные изменения в то, как выполняются ваши вызовы, чтобы вы могли получить такое поведение:

StartCoroutine(SomeMethod(...));

IEnumerator SomeMethod(...) {
    yield return Name(...par...)
    yield return Name(...par...)
    yield return Name(...par...)
    yield return Name(...par...)
}
person Draco18s no longer trusts SE    schedule 05.09.2018