渋谷ほととぎす通信

完全趣味でやってるUnityメモ。説明できないところを説明できるようにするための個人ブログ。昨日の自分より少しでも大きくなれるように。。。 ※所属団体とは一切関係がありません

Unity DOTweenのガベコレ頻度を下げる方法


f:id:esakun:20150825162207p:plain

DOTweenのメソッドを洗っていると気になるものが目につきました。

SetRecyclableメソッド

いかにも内部でTweenerインスタンスをPoolしてくれて、再利用することでガベージコレクションの発生率を下げてくれるのではと。あわよくばパフォーマンスも上がるかもしれないと。

こちらのコードとUnityのProfilerでにらめっこしながら検証しました。

f:id:esakun:20161008220824g:plain

gist.github.com

強制的にガベージコレクションを発生させるため、大量のオブジェクトを生成し、Tweenさせています。

結果

予想したとおり、がベージコレクションの頻度が下がりました。

SetRecyclable未使用 Ver.

f:id:esakun:20161008221009p:plain

SetRecyclable使用 Ver.

f:id:esakun:20161008221024p:plain

DOTweenのソースを確認する

TweenManagerの217行目
Tweenが終了したタイミングで isRecyclable フラグがtrueのものは_pooledTweeners 配列に格納されています。

TweenManagerの64行目
Tweenerを取り出す部分で_pooledTweenersが存在していたらPoolされたものを使用しています。

このようにインスタンスを生成しない分、ガベージコレクションを下げているのが分かります。

まとめ

大量のオブジェクトを何度もTweenさせる場合であればガベージコレクションによるスパイク頻度を軽減させる方法としては良い気がします。SetRecyclableはそのためのメソッドだと思います。

あわせてどうぞ

www.shibuya24.info

www.shibuya24.info

www.shibuya24.info