Upgrade to Pro — share decks privately, control downloads, hide ads and more …

無限スクロールビューライブラリ 二つの設計思想比較

無限スクロールビューライブラリ 二つの設計思想比較

Haruki Yano

June 30, 2022
Tweet

More Decks by Haruki Yano

Other Decks in Technology

Transcript

  1. はじめに スクロール範囲外の要素を非表示にしたり削除した り、使いまわしたりする機能がない。そのため何も 考えずに無 限スクロールすると処 理 負 荷も無 限 に...。

    (機能が少ないというよりは、エンジンとして汎用 的にサポートしようとしている責務にそれらが入っ てないだけ。) Unityのスクロールビューは機能が少ない
  2. はじめに • GameObjectを表示に必要な分だけ生成・使い回せる • スクロール要素をループさせられる • 各セルのサイズを可変にできる • 複数の種類の要素(Prefab)を使える •

    指定したセルにジャンプできる • グリッド表示に対応してる …くらいあれば最低限よさそう 無限スクロールライブラリを使おう
  3. Enhanced Scroller セル(要素)の数のほか、各セルのサイズを渡すインターフェースになっている データのインデックスからセルのサイズを返す必要がある セルのサイズがあらかじめ計算できる前提の設計意図を感じるインターフェース インターフェース public interface IEnhancedScrollerDelegate {

    // セルの数を返す int GetNumberOfCells (EnhancedScroller scroller); // セルのサイズを返す float GetCellViewSize (EnhancedScroller scroller, int dataIndex); // セルのインスタンスを返す EnhancedScrollerCellView GetCellView(EnhancedScroller scroller, int dataIndex, int cellIndex); }
  4. Enhanced Scroller 要素のトータルの高さがあらかじめ計算できる → スクロールバーの長さもあらかじめ計算可能 → 各要素の座標もあらかじめ計算可能 → いろいろと破綻なしに内部実装はできる Pros

    そもそも要素の高さって予め計算できるんだっけ? Unityの自動レイアウトを使って、高さ可変なTextの高さをど う処理する? 一応デモに自動レイアウトと併用した場合の実装例はあるが、 パフォーマンスが悪いので推奨しない旨が書かれている。 Cons
  5. Loop Scroll Rect Enhanced Scrollerと違ってセルのサイズを返すインターフェースがない セルサイズはUnityの自動レイアウトを使っている(Preferred Width/Height) レイアウトの仕組みはUnityに従う設計思想を感じるインターフェース インターフェース public

    interface LoopScrollDataSource { // セルにデータをセットする void ProvideData(Transform transform, int idx); } public interface LoopScrollPrefabSource { // インデックスに対応する GameObjectを返す GameObject GetObject(int index); // 表示に不要になった GameObjectを処理 void ReturnObject(Transform trans); }
  6. おまけ① グリッド表示の対応も結構違う Enhanced Scroller Loop Scroll Rect セルを1行 分グルーピングしたものを一つ のセルとして取り扱っている

    Grid Layout Groupを使っている この場 合セルサイズはPreferredSizeでは なくこのCell Sizeが使用される