Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
無限スクロールビューライブラリ 二つの設計思想比較
Search
Haruki Yano
June 30, 2022
Technology
2.9k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
無限スクロールビューライブラリ 二つの設計思想比較
Haruki Yano
June 30, 2022
More Decks by Haruki Yano
See All by Haruki Yano
Addressableアドレス自動付与ツール「Smart Addresser」の概要と使い方
harumak
0
1.9k
【Unity】リリース時にデバッグ用リソースをちゃんと消す方法
harumak
1
2.7k
Asset Regulation Manager よく使う設定逆引きリファレンス
harumak
0
260
Other Decks in Technology
See All in Technology
Kiro Crewしか勝たん!?
miu_crescent
PRO
0
170
Bet AI Day 2026丨AIによって本質に戻るシステムリスク管理
layerx
PRO
0
790
Claude Codeで開発以外の業務も爆速化しよう!
minorun365
PRO
12
9.6k
PfEingのアプローチで働こう
rindrics
0
160
いかに伝えるか 〜新卒エンジニアの教育のための、ライトノベル活用の一例
ikedon
1
180
Bet AI Day 2026丨バクラク Autopilot、業務システムの再設計
layerx
PRO
2
1.1k
『止めない』を設計する — 制約の中で、事業の根幹を支える判断
hiroyaterui
0
150
When Does a Local Qwen Start to Break
morshoto
0
160
少人数データチームのDevin活用実践事例
runandy16
2
430
作り直せるコードは迅速に 作り直せないDBは慎重に - AI時代のプロダクトエンジニアが「判断の不可逆性」で開発速度を変える話
kinosuke01
0
180
20260903 Tokyo Jazug Night #62 | Azure エンジニアよ、 その環境は本当にセキュアか?
olivia_0707
1
610
bet_ai_day_2026_session02
agenticsec
1
910
Featured
See All Featured
30 Presentation Tips
portentint
PRO
1
390
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
4.6k
How to Think Like a Performance Engineer
csswizardry
28
2.8k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
590
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2k
Bash Introduction
62gerente
615
220k
Un-Boring Meetings
codingconduct
0
410
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
370
The Curious Case for Waylosing
cassininazir
1
490
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.6k
The Limits of Empathy - UXLibs8
cassininazir
1
630
A Soul's Torment
seathinner
7
3.5k
Transcript
無限スクロールビューライブラリ 二つの設計思想比較 コアテク 矢野 春樹 2022.06.03
はじめに 01
はじめに スクロール範囲外の要素を非表示にしたり削除した り、使いまわしたりする機能がない。そのため何も 考えずに無 限スクロールすると処 理 負 荷も無 限 に...。
(機能が少ないというよりは、エンジンとして汎用 的にサポートしようとしている責務にそれらが入っ てないだけ。) Unityのスクロールビューは機能が少ない
はじめに • GameObjectを表示に必要な分だけ生成・使い回せる • スクロール要素をループさせられる • 各セルのサイズを可変にできる • 複数の種類の要素(Prefab)を使える •
指定したセルにジャンプできる • グリッド表示に対応してる …くらいあれば最低限よさそう 無限スクロールライブラリを使おう
はじめに 微妙にできることが違うので技術選定が必要 設計思想の異なる二つのライブラリを比較してみる ライブラリ多すぎ問題 Enhanced Scroller Loop Scroll Rect
Enhanced Scroller 02
Enhanced Scroller セル(要素)の数のほか、各セルのサイズを渡すインターフェースになっている データのインデックスからセルのサイズを返す必要がある セルのサイズがあらかじめ計算できる前提の設計意図を感じるインターフェース インターフェース public interface IEnhancedScrollerDelegate {
// セルの数を返す int GetNumberOfCells (EnhancedScroller scroller); // セルのサイズを返す float GetCellViewSize (EnhancedScroller scroller, int dataIndex); // セルのインスタンスを返す EnhancedScrollerCellView GetCellView(EnhancedScroller scroller, int dataIndex, int cellIndex); }
Enhanced Scroller 要素のトータルの高さがあらかじめ計算できる → スクロールバーの長さもあらかじめ計算可能 → 各要素の座標もあらかじめ計算可能 → いろいろと破綻なしに内部実装はできる Pros
そもそも要素の高さって予め計算できるんだっけ? Unityの自動レイアウトを使って、高さ可変なTextの高さをど う処理する? 一応デモに自動レイアウトと併用した場合の実装例はあるが、 パフォーマンスが悪いので推奨しない旨が書かれている。 Cons
Loop Scroll Rect 03
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); }
Loop Scroll Rect 自動レイアウトと破綻することなく組み合わせられる インスタンス化して自動レイアウト適用を待って高さを取得して… みたいなのが不要になる Pros まだ生成されていない要素の高さを正確に取得できない → スクロールバーの長さがスクロール中に変わる(違和感はない)
そのフレームで高さが決まる様な自動レイアウトの仕方をしないとうまく表示されない → 横幅も縦幅も可変みたいな(重そうな)組み方をしない Cons
おまけ 04
おまけ① グリッド表示の対応も結構違う Enhanced Scroller Loop Scroll Rect セルを1行 分グルーピングしたものを一つ のセルとして取り扱っている
Grid Layout Groupを使っている この場 合セルサイズはPreferredSizeでは なくこのCell Sizeが使用される
おまけ② カルーセルビュー いわゆる「バナー」みたいなビュー これに無限スクロールライブラリを使いたくなるけど、ちゃんと作るには以下の要件満たしてないと無理 • スクロールアニメーションを途中でキャンセルできること(ユーザがドラッグ時に必要) • 最後の要素から最初の要素にスクロールする時に、逆方向/順方向スクロール選べるか • 要素1個の時に
index: 0 から index: 0 にスクロールできるか(これが必要かは仕様次第)
おまけ② Fancy Carousel View 少なくとも今回紹介した二つのライブラリでは無理 Fancy Scroll View(setchi氏: https://github.com/setchi/FancyScrollView)が要件を満たした これをベースにしたFancy
Carousel ViewをOSSとして公開中(宣伝) https://github.com/Haruma-K/FancyCarouselView
おわり