こんにちわ、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をキャッシュして再利用するとゴミが無駄に増え続けることはありません。

期間限定 最大95%オフセール
効率UPメガバンドル開催中!最大95%オフ!!!
期間 : 11月1日午後15時59分まで
オススメ記事
検証環境