Страница 1 из 1

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

СообщениеДобавлено: 15 янв 2021, 15:14
WasTabon
Синтаксис:
Используется 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;

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

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

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

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

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

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

СообщениеДобавлено: 15 янв 2021, 17:00
seaman
А как Вы определяете, что она не остановилась? Вы же ее тут же в том же методе снова запускаете.

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

СообщениеДобавлено: 15 янв 2021, 18:56
WasTabon
seaman писал(а):А как Вы определяете, что она не остановилась? Вы же ее тут же в том же методе снова запускаете.

@seaman Даже если запуск закоментировать, он будет такой же

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

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

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

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

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

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

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

СообщениеДобавлено: 15 янв 2021, 19:50
seaman
Ну так и второй и третий раз также делайте. Почему по разному то?

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

СообщениеДобавлено: 16 янв 2021, 13:00
WasTabon
seaman писал(а):Ну так и второй и третий раз также делайте. Почему по разному то?

Всмысле

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

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

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

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

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

СообщениеДобавлено: 16 янв 2021, 13:57
WasTabon
seaman писал(а):Две строчки:
Синтаксис:
Используется csharp
spawning = StartCoroutine(Spawning());
StartCoroutine(Spawning());

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

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

Старт просто работал, вот я и не трогал, а оно разве может как-то помешать?