ブログ

コルーチンの処理を途中で停止させる(StopCoroutine)

*コルーチンの処理を「変数」に代入しておくことがポイント。


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class EnemyGene2 : MonoBehaviour
{
    public GameObject enemyPrefab;
    public int geneAmount;
    [Range(0, 5.00f)]
    public float waitTime;
    private ScoreManager scoreManager;
    private int gene2Score;

    // (ポイント)
    // コルーチンを変数に代入する。
    private IEnumerator ge;

    void Start()
    {
        // *
        ge = GeneEnemy();
        StartCoroutine(ge);

        scoreManager = GameObject.Find("ScoreLabel").GetComponent<ScoreManager>();

    }

    void Update()
    {
        gene2Score = ScoreManager.score;
        print(gene2Score);

        // *
        // もしもスコアが10になったらコルーチンを停止する。
        if (gene2Score == 10)
        {
            StopCoroutine(ge);
        }
    }

    IEnumerator GeneEnemy()
    {
        while (true)
        {
            for (int i = 0; i < geneAmount; i++)
            {
                GameObject enemy = Instantiate(enemyPrefab, transform.position, Quaternion.identity);
                Destroy(enemy, 4.0f);
                yield return new WaitForSeconds(waitTime);

            }
            yield return new WaitForSeconds(1.0f);
        }
    }
}