誰もADDRESSABLEを

語らないなら、

自分が語るしかない
@TSUBAKI_T1
アジェンダ
•Addressableとは何ぞや?
•Addressableの想定
•Addressableを使う流れ
•『個人的』感想
ADDRESSABLE

とは何ぞや?
アセットの制御を
簡単にしたい機能
RESOURCES並に
ASSETBU
NDLEをビ
ルドする
リソースの出力
グループ
アドレス
アドレス
アドレス
ASSET
BUNDLE
ASSET
BUNDLE
ASSET
BUNDLE
グループ
アドレス
アドレス
アドレス
ASSET
BUNDLE
CDN
どこから取
得したかを
気にせず利
用できる
アセットのアドレス管理
ASSETBUNDLE
ASSETBUNDLE
ASSETBUNDLE ASSETBUNDLE
ASSETBUNDLE
ADDRESSABLE
Address
GUIで設定し
たアセットを

必要になるま
でロードしない。
遅延ロード
Scene
MODEL
LOD 2
MODEL
LOD 2
MODEL
LOD 2
MODEL
LOD 2
MODEL
LOD 0
必要に応じて
ディティールの細かい

モデルをロード
通常はシーンと一緒に

ロードされる
使わない
ASSETBUN
DLEは開放
メモリ管理
LoadAsset 01 & 02
ASSET
ASSET
ASSET
ASSET
01
ReleaseAsset 01
ASSET
ASSET
ASSET
ASSET
01
ASSET
02
ASSET
02
参照先も開放
UnloadUnusedAssetは使わない
ASSETBU
NDLEの一
部を差し替
える
ABのパッチ ASSETBUNDLE 1
ASSET 1
ASSET 2
ASSET 3
ASSET 4
ASSET 5
ASSETBUNDLE 2
ASSET 3
STATIC ABの
参照先を差し替え
DL済み
追加DL
REMOTE-
ASSETBU
NDLEの動
作を確認
ローカルサーバー
LOCAL SERVER
ASSETBUNDLE
ASSETBUNDLE ASSETBUNDLE
ASSETBUNDLE
ADDRESSABLE
HOSTING
ADDRESSABLE
downloadstart
ADDRESSABLE の用語
スキーマ
グループ毎のビルド設定。
足したり引いたり出来る。
プロバイダー
どうやってグループ内の

アセットをロードするか

グループ
アドレスを格納する単位
現状のビルドスクリプトだと

ASSETBUNDLEを
アドレス単位で分割もしくは

全体でひとまとめに出力
アドレス
アセットと1:1になる文字列。
フォルダを登録するとフォルダ
以下が全て登録される
ADDRESSABLE の動き(ビルド)
グループ
アドレス
アドレス
アドレス
スキーマ 1
グループ
BUILD

(SRB)
グループ毎にスキーマの情報を
元にASSETBUNDLEと
CONTENTCATALOGを
構築する。
アドレス
アドレス
アドレス
スキーマ 1
スキーマ 2
CONTENT
CATALOG
ASSET
BUNDLE 3
ASSET
BUNDLE 2
ASSET
BUNDLE 1
ASSET
BUNDLE 4
サーバーか

STREAMINGASSETSに
配置
ABへのアドレスと

読むときに使うプロバイダー、

含まれるファイル一覧
ADDRESSABLE の動き(プレイヤー)
ADDRESSABLE
CONTENT
CATALOG
登録
アドレス

(文字列) RESOURCE
MANAGER
Locationを

渡す
ASSET
BUNDLE 3
ASSET
BUNDLE 2
ASSET
BUNDLE 1
ASSET
BUNDLE 4
指定のプロバイダーで

ロードしてアセットを返す
ADDRESSABLEの

想定

(予想)
全てのアセットを
ASSETBUNDLE
に
ASSETBUNDLEと

ビルドの区分を無くす
LOCAL ASSET
NG
LOCAL
ASSETBUNDLE
ASSET
ASSETBUNDLE
PREFAB
OK
全てをABにすろとビルドに時間がかかるので、
ビルドせずともコンテンツの動きを確認
GAME
VIRTUAL
OR
BUILD MODE
ASSET
BUNDLE
ASSET
DATABASE
ビルドが必要
ビルドは不要
全てをABにすろとビルドに時間がかかるので、
ビルドせずともコンテンツの動きを確認
Fast

(単純なロード)
Virtual

(データレイアウト

のみ使用)
pack

(ABをビルドして

それを使用する)
動作確認

(エディター)
◎コンテンツ作成
◎
○ ☓
○
テストプレイ ☓ ☓ ◎
リリース ☓ ☓ ◎
○
ビルド前はVIRTUALでサクサク確認(RESOURCESと同じ動き)
実際の動きはビルドして確認
モード
用途
アセットを取得して組み立てる、ではなく
組み上がったアセットを使う
C#
MODEL
TEXTURE
MATERIAL
ASSET
BUNDLE
ASSET
BUNDLE
MODEL
TEXTURE
MATERIAL
アセットが重複する問題は
ANALYZEで重複チェックして
個別にアドレスを設定、グループ分け
ASSET
BUNDLE
PREFAB 1
SPRITE

(PREFABが参照)
ASSET
BUNDLE
PREFAB 2
SPRITE

(PREFABが参照)
ASSET
BUNDLE PREFAB 1
SPRITE
ASSET
BUNDLEPREFAB 2
ASSET
BUNDLE
new
!
UNLOADUNUSEDASSETSは使わない
AB
AB
ADDRESSABLEはロードしたアセットが全てリリースされると開放
ADDRESSABLEは現状、全て非同期
AB
AB
Aaddressable.Instantiate
AB
AB
アセットの複製は

自分で参照カウントを持つ
設計と合わない場合はビルドモードをカスタム
グループを取得
スキーマからタスクを構築
タスクを元にビルド処理
カタログ更新
グループからスキーマを取得
ロードに使うプロバイダー取得 ビルドに新しいルールを追加、もし
くはビルドするルールを変更したい
ならば、ビルドモードを切り替え
① 独自スキーマを定義(任意)
② プロバイダーを構築(任意)
③ ビルドスクリプトを記述
④ ビルドモードを切り替え
グループ分けに特別なルールを

追加したいならば、

ANALYZEにルールを追加(予定)
ビルドスクリプトをカスタム
プロバイダーをカスタムすれば、もう少し色々出来る
RESOURCE PROVIDER
INSTANCE PROVIDER
SCENE PROVIDER
ASSETBUNDLEの暗号化や

その他云々の用途。
SRBのバージョンアップで化ける

かも
オブジェクトプーリング等を

行いたい場合
現状、ほとんどビルドモード拡張とセット
JSONから作るか…?
ADDRESSABLE

どうやって使うのか
今回の作業の流れ
1. Addressableを導入
2. ローカルサーバーを立てる
3. Sceneを全てAddressableに移行

(アセットは全てAssetBundleから取得するように)
4. 敵とプレイヤーキャラクターを遅延ロードに変更
5. SceneとPrefabのグループをリモートグループへ変更
6. ダウンロードサイズを取得して事前ダウンロード

(アセットは全てサーバーから取得する形へ変更)
7. サーバー上のコンテンツを更新
現状、どうなの?
• 素直に使えるなら凄い楽になった。

(所属ABの切り替え等は殆ど意識しなくても良い)
• Builtin Shaderが特別なABに含まれるのは割とありがたい
• テストケースがまだ甘い

(設定を正しく行わないとエラーが発生。

 要因はコードを見ないと分からないという事も)
• もうすぐ1.0なので概ねAPIは固定したらしい
• 想定を大きく外れる使い方の場合は、今はResourceManagerから

拡張するのが良いかもしれない。
おわり

誰もAddressableについて語らないなら、自分が語るしかない…ッッッッ