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
k7a
March 20, 2018
Programming
0
590
AssetBundleの問題点 / Problems of AssetBundle
社内で発表したものを公開用に調整
k7a
March 20, 2018
Tweet
Share
Other Decks in Programming
See All in Programming
Quand Symfony, ApiPlatform, OpenAI et LangChain s'allient pour exploiter vos PDF : de la théorie à la production…
ahmedbhs123
0
120
Deep Dive into ~/.claude/projects
hiragram
10
2.2k
Benchmark
sysong
0
280
Composerが「依存解決」のためにどんな工夫をしているか #phpcon
o0h
PRO
1
250
ふつうの技術スタックでアート作品を作ってみる
akira888
0
290
たった 1 枚の PHP ファイルで実装する MCP サーバ / MCP Server with Vanilla PHP
okashoi
1
220
AIエージェントはこう育てる - GitHub Copilot Agentとチームの共進化サイクル
koboriakira
0
480
LINEヤフー データグループ紹介
lycorp_recruit_jp
0
1.7k
今ならAmazon ECSのサービス間通信をどう選ぶか / Selection of ECS Interservice Communication 2025
tkikuc
20
3.8k
Result型で“失敗”を型にするPHPコードの書き方
kajitack
4
560
設計やレビューに悩んでいるPHPerに贈る、クリーンなオブジェクト設計の指針たち
panda_program
6
1.8k
Select API from Kotlin Coroutine
jmatsu
1
210
Featured
See All Featured
Fireside Chat
paigeccino
37
3.5k
A designer walks into a library…
pauljervisheath
207
24k
BBQ
matthewcrist
89
9.7k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
138
34k
VelocityConf: Rendering Performance Case Studies
addyosmani
331
24k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
Building a Scalable Design System with Sketch
lauravandoore
462
33k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
48
2.9k
Intergalactic Javascript Robots from Outer Space
tanoku
271
27k
The Invisible Side of Design
smashingmag
300
51k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
46
9.6k
Large-scale JavaScript Application Architecture
addyosmani
512
110k
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