こんにちは、Unityエンジニアのオオバです。

Unityで演出をスクリプトでタイミングの調整をしたいときにWaitForSecondsを使ったりすることがあります。
刹那的に使うのは問題ないですが、以下のようにWaitForSecondsを高頻度で生成すると問題が出てきます。

IEnumerator Hoge()  
{
    while (true)  
    {
        Profiler.BeginSample("## Sample ##");  
        var wait = new WaitForSeconds(0.01f);  
        Profiler.EndSample();  
        yield return wait;  
    }
}

WaitForSecondsはキャッシュして使おう_0

このようにGC Allocに20Bほどゴミが溜まっていきます。

これは回避したいので、そもそもWaitForSecnodsをキャッシュしておく方法が考えられます。

IEnumerator Hoge()  
{
    var cachedWait = new WaitForSeconds(0.01f);  
    while (true)  
    {
        // キャッシュしてるWaitForSecondsを使う  
        yield return cachedWait;  
    }
}

このようにWaitForSecondsをキャッシュして再利用するとゴミが無駄に増え続けることはありません。

オススメ記事
検証環境