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
AssetBundleの問題点 / Problems of AssetBundle
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
k7a
March 20, 2018
Programming
630
0
Share
AssetBundleの問題点 / Problems of AssetBundle
社内で発表したものを公開用に調整
k7a
March 20, 2018
Other Decks in Programming
See All in Programming
煩雑なSkills管理をSoC(関心の分離)により解決する――関心を分離し、プロンプトを部品として育てるためのOSSを作った話 / Solving Complex Skills Management Through SoC (Separation of Concerns)
nrslib
4
950
ルールルルルルRubyの中身の予備知識 ── RubyKaigiの前に予習しなイカ?
ydah
1
180
事業会社でのセキュリティ長期インターンについて
masachikaura
0
250
アクセシビリティ試験の"その後"を仕組み化する
yuuumiravy
0
150
10年分の技術的負債、完済へ ― Claude Code主導のAI駆動開発でスポーツブルを丸ごとリプレイスした話
takuya_houshima
0
2.6k
Offline should be the norm: building local-first apps with CRDTs & Kotlin Multiplatform
renaudmathieu
0
210
How We Benchmarked Quarkus: Patterns and anti-patterns
hollycummins
1
140
ふりがな Deep Dive try! Swift Tokyo 2026
watura
0
220
Making the RBS Parser Faster
soutaro
0
380
Coding as Prompting Since 2025
ragingwind
0
830
Claude Codeをカスタムして自分だけのClaude Codeを作ろう
terisuke
0
140
ハーネスエンジニアリングとは?
kinopeee
10
5.3k
Featured
See All Featured
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
Everyday Curiosity
cassininazir
0
200
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
260
YesSQL, Process and Tooling at Scale
rocio
174
15k
Agile that works and the tools we love
rasmusluckow
331
21k
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.2k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
140
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
150
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.2k
A Modern Web Designer's Workflow
chriscoyier
698
190k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.1k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.7k
Transcript
AssetBundleの問題点 皆が困っている事や求めている機能について
1 1. ロード周り
ロード周り - 依存関係解決 • 依存関係のある場合のロード • AB1のマテリアルAをロードする時、 AB2もロードする必要がある • マテリアルAのロード前に
全部ロードされていればOK • Unity5.x~ではAssetBundleManifestを使うのがスタンダード • ビルド時に生成される • GetAllDependenciesで依存関係が解決できる • アプリ起動時にAssetBundleとして読み込んで使う 2
ロード周り - アンロード管理 • AssetBundle.Unload(bool unloadAllLoadedObjects) • false: AssetBundleのみ解放する •
展開したアセットは解放されない • Unload(false)した後、同じアセットをロードするとメモリに二重に乗る • 二重ロードさえ気を付ければメモリが節約できる • アセットは参照が切れた後Resources.UnloadUnusedAssetsで解放される • true: 展開したアセットも解放する • 使用中でも容赦なく解放される • →全ての参照が切れてから行う必要がある • 依存関係が絡むと、意識して管理するのは難しい 3
ロード周り - アンロード管理 よくある実装 • Managerクラスを作って参照カウンタを用いて管理 • ロード時に+1 • アンロード時に-1
• カウンタが0になった時に実際にUnload(true)を呼ぶ • Unload(false)したい場合は実装者側が頑張るしかない 4
5 2. キャッシュ・世代管理
キャッシュ・世代管理 • Unity標準のキャッシュ管理が雑で使いにくい • キャッシュの個別削除ができなかったりした • 更新したのに古いAssetBundleがキャッシュに残る • Caching.readyが遅い •
有効期限の設定が不自由 • Unity2017~は色々改善された模様 • APIが増え、個別削除ができるように • パフォーマンスはどうなんだろう • 未調査 6
キャッシュ・世代管理 • AssetBundleを差し替えた場合、クライアント側は新しいAssetBundleをDLしキャッシュを更 新する必要がある • ハッシュ値などを用いて更新判定 • 配信にCDN(CloudFront)を使うため、更新時はキャッシュ回避のためにファイル名を変える 必要がある •
AssetBundle名に対応するURLの管理が必要 →サーバー側とクライアント側で世代情報を同期する必要がある 7
担当アプリでの実装 • AssetBundle命名ルール:末尾にハッシュ値を付ける • 更新の度にユニークなファイル名になるように • 静的ファイル「AssetInfo」をAssetBundleビルド時に生成 • 全てのAssetBundle名、依存関係、CRCなどの情報をシリアライズ •
暗号化している 8
担当アプリでの実装 • サーバー側 • AssetInfoをS3→CloudFrontで配信 • ゲームサーバー上でAssetInfoのURLを管理 • 現在はビルドする度に手動でアップロード&更新している… •
クライアント側 • ログイン時にサーバーから最新のAssetInfoのURLを取得 • AssetInfoをDLし、ResourceService(管理用クラス)を初期化 • あとはロード時にAssetInfoの情報を使ってよしなにしてくれる • 更新時には再ログインさせる(いわゆるデータロード) 9
オルタナティブガールズでの例 AssetBundle配信をマイクロサービス化 参考:複雑化するAssetBundleの配信からロードまでを基盤化した話【CEDEC 2017】 10
11 3. ビルド〜デプロイ
ビルド〜デプロイ • ビルドスクリプトが独自実装だとJenkinsの設定なども共通化できない • 共通化することで解決 • 更新時はファイル名を変える必要がある→命名のルール化 • 世代情報の更新も必要 •
個別ビルド、差分ビルド対応 • コミット→ビルド→デプロイの自動化 12
13 その他
14 テスト環境 • ローカルのAssetBundleを読み込む • ステージングのAssetBundleを読み込む • AssetBundleをビルドせずにテストできるシミュレーションモード アセット暗号化 •
AssetBundleは簡単に展開されてアセットを抽出できてしまうので防ぐ
参考資料 • Unity - アセットバンドルの基礎 • Unity - AssetBundle usage
patterns • 【Unity】AssetBundleの個別削除に関する覚書【AssetBundle】 - Qiita • 他社事例など • Unity-Technologies / AssetBundleDemo — Bitbucket • 使いやすい API 設計 - Tech Inside Drecom • AssetBundle設計のとある形 – てっくぼっと! • 複雑化するAssetBundleの配信からロードまでを基盤化した話【CEDEC 2017】 15