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
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
k7a
March 20, 2018
Programming
640
0
Share
AssetBundleの問題点 / Problems of AssetBundle
社内で発表したものを公開用に調整
k7a
March 20, 2018
Other Decks in Programming
See All in Programming
How We Practice Exploratory Testing in Iterative Development( #scrumniigata ) / 反復開発の中で、探索的テストをどう実施しているか
teyamagu
PRO
3
790
Agentic Elixir
whatyouhide
0
450
Structured Concurrency, Scoped Values and Joiners in the JDK 25 26 27
josepaumard
1
150
tRPCの概要と少しだけパフォーマンス
misoton665
2
270
My daily life on Ruby
a_matsuda
3
200
いつか誰かが、と思っていた フロントエンド刷新5年間の実践知
kiichisugihara
1
260
AWSはOSSをどのように 考えているのか?
akihisaikeda
0
110
Firefoxにコントリビューションして得られた学び
ken7253
2
160
AI時代になぜ書くのか
mutsumix
0
360
PHPer、Cloudflare に引っ越す
suguruooki
1
150
運転動画を検索可能にする〜Cosmos-Embed1とDatabricks Vector Searchで〜/cosmos-embed1-databricks-vector-search
studio_graph
1
700
ローカルLLMでどこまでコードが書けるか / How much code can be written on a local LLM
kishida
2
350
Featured
See All Featured
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.8k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
170
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.3k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
70
39k
Become a Pro
speakerdeck
PRO
31
5.9k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
55k
ラッコキーワード サービス紹介資料
rakko
1
3.3M
Bash Introduction
62gerente
615
210k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
How to Ace a Technical Interview
jacobian
281
24k
New Earth Scene 8
popppiees
3
2.2k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
160
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