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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Haruki Yano
June 30, 2022
Technology
2.8k
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
2026 TECHFRESH 畢業分享會 - AI-Native 重塑軟體工程與虛擬講師
line_developers_tw
PRO
0
1.2k
Oracle AI Database@AWS:サービス概要のご紹介
oracle4engineer
PRO
4
3k
AIはどのように 組織のアジリティを変えるのか?
junki
4
1k
SONiCで構築・運用する生成AI向けパブリッククラウドネットワーク ~実装編~
sonic
0
270
2026TECHFRESH畢業分享會 - 葬送的通靈師:化系統與用戶雜訊成行動訊號
line_developers_tw
PRO
0
1.2k
白金鉱業Meetup_Vol.24_「AIエージェントは分けるほど良い」は本当か? / Is it true that “the more you divide AI agents, the better”?
brainpadpr
1
410
アジャイルな経理と Claude Code と経営の未来
kawaguti
PRO
3
150
2026TECHFRESH畢業分享會 - AI 時代的人生存檔點
line_developers_tw
PRO
0
1.2k
iAEONの段階的リアーキテクト戦略 / iAEON's_Gradual_Re-architecture_Strategy
aeonpeople
0
220
10年間のブログ発信を振り返って見えたWebアプリケーションエンジニアとしての軌跡
stefafafan
0
140
SONiCの統計情報を取得したい
sonic
0
210
Kiro Ambassador を目指す話
k_adachi_01
0
110
Featured
See All Featured
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
440
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
160
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.3k
Become a Pro
speakerdeck
PRO
31
6k
Why Our Code Smells
bkeepers
PRO
340
58k
From π to Pie charts
rasagy
0
210
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2k
BBQ
matthewcrist
89
10k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
230
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
おわり