こんにちは、Unityエンジニアのオオバです。
Unityで演出をスクリプトでタイミングの調整をしたいときにWaitForSecondsを使ったりすることがあります。
刹那的に使うのは問題ないですが、以下のようにWaitForSecondsを高頻度で生成すると問題が出てきます。
IEnumerator Hoge()
{
while (true)
{
Profiler.BeginSample("## Sample ##");
var wait = new WaitForSeconds(0.01f);
Profiler.EndSample();
yield return wait;
}
}
このようにGC Allocに20Bほどゴミが溜まっていきます。
これは回避したいので、そもそもWaitForSecnodsをキャッシュしておく方法が考えられます。
IEnumerator Hoge()
{
var cachedWait = new WaitForSeconds(0.01f);
while (true)
{
// キャッシュしてるWaitForSecondsを使う
yield return cachedWait;
}
}
このようにWaitForSecondsをキャッシュして再利用するとゴミが無駄に増え続けることはありません。
この記事が気に入ったらフォローしよう
オススメ記事
検証環境
- Unity2018.2.0f2