深夜、余力があった時に覚え書き程度にメモしている内容です。
あんまり信用しないほうがいいかも。
0.Scroll Viewが重い、というのはある程度有名な話
Unity標準のスクロールビューは、要素の数が増えるほど処理負荷とメモリの使用量が大きくなるため、スケール可能にするためには工夫が必要です。
例えば表示範囲外のGameObjectを非アクティブにしたり、オブジェクトプールを使って使い回したりすることが考えられます。
https://light11.hatenadiary.com/entry/2022/05/16/201949
この話は結構界隈で知られている(主観基準)話だろうと思うので、詳細は省くが、まあドローコールが云々みたいな話である。
この問題について、自分の手が届く範囲で、いろいろと検証しようというのが今日のお話。
当方、Unity 2021.3.16f1環境にて進めてまいります
1.準備
雑いが、とりま一列縦にスクロールする系のUnity標準スクロールビューを準備。
スクリプトからFPSとメモリだけ出しておく。
とりまプレファブを一つだけ表示してたら、まあこのへん。
2.Unity標準のScroll Viewのみの場合
プレファブを300個生成。ほぼ大半のボタンが画面に描画されていない状態。
FPSめっちゃ食われているが、目的のメモリも、少し右から左に削られてるわね。
ちなみに、このボタン生成はゲーム起動時から3秒後、と少しラグを敢えて作っている。
実際のスクロールビュー実装は、要素を後で足したくなることもあるもの。
3.自分で頑張って非表示、はきっつい
まあ、この話は結局、見えていない部分を非表示にしたらいいんでしょってことがわかりきっているため、何かしらのアセットに頼るまでもなく自分で実装するのも悪くない。
まあ悪くないのだが、実際の開発現場では例外というやつがつきものである。
最初想定していなかった使い方が増発するため、正直コストに見合ってるかわからん。
とりま即時的な手としてはありだが、個人開発ならむしろ悪手では?
自分よりも幾ばくか長い時間、この問題に取り組んでいる諸氏の力を借りたほうが、断然クオリティも向上するというものである。
4.EnhancedScroller
この問題を調べると、絶対におすすめされるアセット。
普通に高機能なScrollなので、パフォーマンスを置いておいても買っておくのはあり。
まあ、今回はパフォーマンスに絞って、このアセットを評価してみよう。
ってことで、手持ちで購入してあるものがあるので流用します。
適当にこれに書いてあるのをそのまま写して...
300個生成した結果がこちら。
うん?なんかボタン君、前面に出てるな?調整ミスったんだろうけど、まあ本題じゃないし無視で。
スクリプトが全然違うので、まあ純粋な比較はできないけど、FPSすごく向上してますね。
メモリも、初期状態より何なら最適化されているような。
さすが、界隈でもてはやされてるだけある。
5.Loop Scroll Rect & オブジェクトプール
まあここまではある程度既知の内容なのだが、今回満を持して比較検討させていただきたいのがこれ。
『Loop Scroll Rect』というOSSと、Unity2021以降から標準実装のオブジェクトプールとの組み合わせ。
『Loop Scroll Rect』は日本語の参考資料が少なく、あとはこの記事くらいになると思われる(2023年5月時点)。
なので、好奇心から楽しみではある。早速やってみる。
まずは、オブジェクトプールつけてない版。
あれ、もうこの時点でEnhancedScrollerといい勝負してね?
じゃあ、オブジェクトプールつけた版。
おおう、FPS。
まあ、平均値とか厳密にはとらないとだから難しいが、そこまで悪い値ではないのでは?
これでOSSなのか、すっげー。
6.まとめ
EnhancedScrollerと比べ、Loop Scroll Rectのほうがより体感的に使えるような気がした。
ああ、深夜深夜と言ってたのに、いつの間にか夜が明けてる...(眩しい朝の光)。
7.ほかの参考にしたほうがいい記事