kidoOooOoooOOom

IT系で開発やってます

Unity Tutorial Beginner Space Shooter chapter 13 で学んだ事

プログラムの実行を中断して、任意のタイミングで再開する方法として yieldを使う。
yieldを書ける場所としては

  • メソッドの戻り値がIEnumerator型である
  • StartCoroutine()にメソッド名を指定して呼び出される

ことが条件である。
チュートリアルでは、最初の待ち時間、各オブジェクトの生成interval, waveのintervalをつけるため
下記のようにyieldを3回用いた。

    public GameObject hazard;
    public Vector3 spawnValues;
    public int hazardCount;
    public int startWait;
    public int spawnWait;
    public int waveWait;

    void Start()
    {
        StartCoroutine(SpawnWaves());
    }

    IEnumerator SpawnWaves()
    {
        yield return new WaitForSeconds(startWait);
        while (true)
        {
            for (int i = 0; i < hazardCount; i++)
            {
                Vector3 spawnPosition = new Vector3(Random.Range(-spawnValues.x, spawnValues.x), spawnValues.y, spawnValues.z);
                Quaternion spawnRotation = Quaternion.identity;
                Instantiate(hazard, spawnPosition, spawnRotation);
                yield return new WaitForSeconds(spawnWait);
            }
            yield return new WaitForSeconds(waveWait);
        }
    }

参考URL

Unity - コルーチンとyield
http://www40.atwiki.jp/spellbound/pages/1363.html

爆発effectなどのオブジェクトがずっと生存するのを避けるため、Destroyに引数を与えるとその時間後にDestroyしてくれる。

    public float lifetime;

    void Start()
    {
        Destroy(gameObject, lifetime);
    }

Object.Destroy
http://docs.unity3d.com/Documentation/ScriptReference/Object.Destroy.html