Почему не останавливается Coroutine?

Общие вопросы о Unity3D

Почему не останавливается Coroutine?

Сообщение WasTabon 15 янв 2021, 15:14

Синтаксис:
Используется csharp
    public void ReDeletePlatforms(InputAction.CallbackContext context)
{
    Debug.Log("Нажал");
    StopCoroutine(spawning);
    Debug.Log("Остановил корутину");
    destroyPlatforms = GameObject.FindGameObjectsWithTag("Platform");
    for (int i3 = 0; i3 < destroyPlatforms.Length; i3++)
    {
        Instantiate(destroyPlatforms[i3], destroyPlatforms[i3].transform.position, Quaternion.identity);
        destroyPlatforms[i3].gameObject.tag = "PlatfomRealy";
        Destroy(destroyPlatforms[i3]);
    }
    StartCoroutine(Spawning());
}

public IEnumerator Spawning()
{
    for (int i = 0; i < 4; i++)
    {
        //Debug.Log(i);
        yield return new WaitForSeconds(1);
        int plNumber = Random.Range(0, platforms.Length);
        float posX = Random.Range(DownLeft.x, DownRight.x);
        float posY = Random.Range(DownRight.y, UpRight.y);
        Vector3 vector3 = new Vector3(posX, posY, 0);
        Instantiate(platforms[plNumber], vector3, Quaternion.identity);
        if (i == 3)
        {
            //Debug.Log("Stopped!");
            StopCoroutine("Spawning");
            Destroying();
        }
    }
}

Вот метод сверху, он корутину не останавливает, только создает объекты (или стартует ещё раз корутину на 1 цикл) и не меняет тег. Снизу сама корутина. А вот ещё список переменных, которые я объявил
Синтаксис:
Используется csharp
public GameObject[] platforms;
public GameObject[] destroyPlatforms;
public Vector3 DownLeft;
public Vector3 DownRight;
public Vector3 UpLeft;
public Vector3 UpRight;
//Coroutine co = StartCoroutine(myEnum.GetEnumerator());
private Coroutine spawning;
WasTabon
UNец
 
Сообщения: 5
Зарегистрирован: 15 янв 2021, 15:12

Re: Почему не останавливается Coroutine?

Сообщение samana 15 янв 2021, 16:27

Обратите внимание, что вы по-разному останавливаете корутину в первом методе
Синтаксис:
Используется csharp
StopCoroutine(spawning);

это не сработает, так как вы нигде не присваиваете переменной spawning ссылку на запущенную корутину.

А во втором методе
Синтаксис:
Используется csharp
StopCoroutine("Spawning");

это скорее всего работает корректно.
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: Почему не останавливается Coroutine?

Сообщение seaman 15 янв 2021, 17:00

А как Вы определяете, что она не остановилась? Вы же ее тут же в том же методе снова запускаете.
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Почему не останавливается Coroutine?

Сообщение WasTabon 15 янв 2021, 18:56

seaman писал(а):А как Вы определяете, что она не остановилась? Вы же ее тут же в том же методе снова запускаете.

@seaman Даже если запуск закоментировать, он будет такой же
WasTabon
UNец
 
Сообщения: 5
Зарегистрирован: 15 янв 2021, 15:12

Re: Почему не останавливается Coroutine?

Сообщение WasTabon 15 янв 2021, 18:58

samana писал(а):Обратите внимание, что вы по-разному останавливаете корутину в первом методе
Синтаксис:
Используется csharp
StopCoroutine(spawning);

это не сработает, так как вы нигде не присваиваете переменной spawning ссылку на запущенную корутину.

А во втором методе
Синтаксис:
Используется csharp
StopCoroutine("Spawning");

это скорее всего работает корректно.

Забыл сказать, что в старте я вот это прописываю
Синтаксис:
Используется csharp
spawning = StartCoroutine(Spawning());
WasTabon
UNец
 
Сообщения: 5
Зарегистрирован: 15 янв 2021, 15:12

Re: Почему не останавливается Coroutine?

Сообщение seaman 15 янв 2021, 19:50

Ну так и второй и третий раз также делайте. Почему по разному то?
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Почему не останавливается Coroutine?

Сообщение WasTabon 16 янв 2021, 13:00

seaman писал(а):Ну так и второй и третий раз также делайте. Почему по разному то?

Всмысле
WasTabon
UNец
 
Сообщения: 5
Зарегистрирован: 15 янв 2021, 15:12

Re: Почему не останавливается Coroutine?

Сообщение seaman 16 янв 2021, 13:18

Две строчки:
Синтаксис:
Используется csharp
spawning = StartCoroutine(Spawning());
StartCoroutine(Spawning());

разницу видно?

Ну и если уже присвоили переменную - почему не используете тут:
Синтаксис:
Используется csharp
StopCoroutine("Spawning");
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Почему не останавливается Coroutine?

Сообщение WasTabon 16 янв 2021, 13:57

seaman писал(а):Две строчки:
Синтаксис:
Используется csharp
spawning = StartCoroutine(Spawning());
StartCoroutine(Spawning());

разницу видно?

Ну и если уже присвоили переменную - почему не используете тут:
Синтаксис:
Используется csharp
StopCoroutine("Spawning");

Старт просто работал, вот я и не трогал, а оно разве может как-то помешать?
WasTabon
UNец
 
Сообщения: 5
Зарегистрирован: 15 янв 2021, 15:12


Вернуться в Общие вопросы

Кто сейчас на конференции

Сейчас этот форум просматривают: GoGo.Ru [Bot] и гости: 14