Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
【リリースが先か】
えっ!Addressablesを新規プロジェクトに?
【Ver1が先か】
所属団体名 / 株式会社サムザップ
登壇者名 / 中山正法
プロフィール
H2
— 中山 正法
— 株式会社サムザップ ネイティブエンジニア
アセット管理について
3
— 運用型のアプリにおいては生命線
— フルネイティブ時代が到来して気を使うことが多くなった
— Unityではアセットバンドルが提供されている
4
皆さん
5
アセットバンドルは
好き?
Addressable Assets Systemについて
6
— AASの概要
— 導入の経緯
— 実際の組み込みについて
– 各バージョン
– いろいろ起きた問題について
AASの概要
7
— Unity純正のアセット管理システム
— アセットバンドルをベースにしている
— 依存関係などの挙動は大体同じ
— ファイル拡張子は違う
— マニフェストは存在しない
— 代わりにカタログファイルが存在する
AASの使い方
8
— PackageManagerからインストールできる
— Unity備え付けじゃないのでVer Upの影響を受けにくい
— 大きな修正の場合はUnityのVer Upを要請されることがある
— 主なUI構成はAddress...
AASの使い方
9
— アセットを増やすときはD&D
— グループごとに管理できる
– ビルド先、ロード先の設定
– プロバイダの指定
– ビルドの単位
– ひとまとまりにするか
– バラバラにするか
— ドラッグ後はアドレスがパスの名で記入される
— simplifyを使って短くする
— パスのままでビルドを行うとその分ディレクトリが掘られる
— Windowsでパス長制限に引っかかる可能性あり
AASの使い方
10
AASの使い方
11
— ラベル機能がある
— ラベルはグループではなくアセット
単位で付与できる
— ラベルはアドレスとほぼ同列の扱
いなので、ロードの際に利用できる
— ビルドはボタン一つ
— addressables windowの右上のボタ
ンからできる
— 各グループで設定したパスに向かってビ
ルドされる
AASの使い方
12
— ビルドはボタン一つ
— addressables windowの右上のボタ
ンからできる
— 各グループで設定したパスに向かってビ
ルドされる
AASの使い方
13
— ロードはAddressable.LoadAssetAsync<>()
— 実際のロードはグループに設定されたプロバイダが行う
— プロバイダは実際にロードを担当するクラス
— ベースクラスを継承して自作することもできる
— AsyncOpe...
— メモリ解放はAddressable.Release()
— 引数に対象のオブジェクトを入れる
— 参照カウントがデクリメントされて0になるとメモリ解放
— より確実なのはAsyncOperationHandleを入れてしまうこと
AASの使...
— 実行モードは3種類
— 実機準拠のPacked Play Mode
— アセットの依存関係は計算するがPrefabを読み込むVirtual Mode
— 完全にPrefabで駆動するFast Mode
AASの使い方
16
— 実行モードは3種類
— 実機準拠のPacked Play Mode
— アセットの依存関係は計算するがPrefabを読み込むVirtual
Mode
— 完全にPrefabで駆動するFast Mode
AASの使い方
17
— Fast Mode
— 開発者への福音
— アセットをビルドすることなく、その場で動作確認できる
— 開発中は基本的にこのモード
— FastMode用のカタログがLibrary下に作られる
AASの使い方
18
— Virtual Mode
— FastModeの状態を維持しつつプロファイラで詳細な確
認ができるモード
— 恐ろしく重い
— これも専用のカタログが作られる
— あんまりつかってない
AASの使い方
19
— Packed Play Mode
— ビルドしたアセットを読み込む、実機準拠モード
— 実機でトラブルが発生したときはこちらで調査を行う
— カタログはビルドしたものを使う
AASの使い方
20
— プロファイラ
— FastModeでは使えない
— アセットの参照カウントがわかる
ようになる
— これに映ってる間はメモリから除
去されない
AASの使い方
21
— アセットバンドルのマネージャーについて悩んでいた
— 自作するのはだるい
— グループ会社から提供してもらう道もあった
— いろいろ考えて却下
AAS導入の経緯
22
— 自分では作りたくないが、人から施しも受けたくない
— AASの記事をみて導入を検討した
AAS導入の経緯
23
— 納期が決まっている
— 技術的な挑戦は控えている
— 開発は終盤
プロジェクトの概要
24
— Spineを使った2D RPG
— サウンドと動画はCRIを利用している
— アドベンチャーパートにLive2Dを使用している
— これらを一緒に扱って差分を検知する必要がある
プロジェクトの概要
25
最初期の検証
26
— Ver0.2系
— UI系のバグが多く正常に動作しない
— 最低限アセットバンドル様に動作することだけ確認した
最初期の検証
27
— Ver0.2系
— UI系のバグが多く正常に動作しない
— 最低限アセットバンドル様に動作することだけ確認した
— しかしながら上述のバグが深刻なため、移行を断念
最初期の検証
28
— Ver0.2系
— UI系のバグが多く正常に動作しない
— 最低限アセットバンドル様に動作することだけ確認した
— しかしながら上述のバグが深刻なため、移行を断念
— しばらくアセットバンドルでの開発をすすめる
アセットバンドルでの開発中
29
— ほぼロードAPIをラップするだけに留める
— 依存関係の解決をランタイムで行わない
— アセット構造をエンジニアが熟知
— ロード順を厳格に決めて実装していた
— この時点でアセットの粒度を決めていたので移...
時は流れて年始
30
— Ver 0.5系
— UI系のバグもだいぶマシになっていたので、アセット登録からビ
ルドまで比較的スムーズに実行できた
時は流れて年始
31
— Ver 0.5系
— UI系のバグもだいぶマシになっていたので、アセット登録からビ
ルドまで比較的スムーズに実行できた
— ただしAndroidとiOSの実機にて動作しなかった
時は流れて年始
32
— Ver 0.5系
— UI系のバグもだいぶマシになっていたので、アセット登録からビ
ルドまで比較的スムーズに実行できた
— ただしAndroidとiOSの実機にて動作しなかった
— 意図せずプロバイダーのコードが削除さ...
33
monoで試してみた
34
かろうじて
起動に成功
35
そして・・・
36
37
ビルトインシェーダー
全滅
38
ver 0.5系での移行を
断念
さらに時は流れて
39
— Ver 0.6系
— IL2CPPでのストリップ問題は解決
— アセットバンドルからの移行を開始
さらに時は流れて
40
— Ver 0.6系
— IL2CPPでのストリップ問題は解決
— アセットバンドルからの移行を開始
— まずはStreaming Assetsから読み込みさせた
— そのあとダウンロードの実装
ダウンロード
41
— リモートから直接ロードは行わない
ダウンロード
42
— リモートから直接ロードは行わない
— カタログデータからバンドルファイル名を取得
— 接続先のサーバーからwebrequestを利用してDL
ダウンロード
43
— リモートから直接ロードは行わない
— カタログデータからバンドルファイル名を取得
— 接続先のサーバーからwebrequestを利用してDL
— Persistent Data pathへ書き込みを行う
— グループのロ...
ダウンロード
44
— UnityWebrequestのダウンロードハンドラを利用してる
ダウンロード
45
— UnityWebrequestのダウンロードハンドラを利用してる
— お手軽にDL時のメモリプレッシャーを抑えてくれる
ダウンロード
46
— UnityWebrequestのダウンロードハンドラを利用してる
— お手軽にDL時のメモリプレッシャーを抑えてくれる
— DL時のダウンロードサイズ表示もカタログから取得している
ダウンロード
47
— UnityWebrequestのダウンロードハンドラを利用してる
— お手軽にDL時のメモリプレッシャーを抑えてくれる
— DL時のダウンロードサイズ表示もカタログから取得している
— 差分に関してはファイル名にハッシュ...
CRI系ファイルの取扱
48
— 音と映像に使用している
CRI系ファイルの取扱
49
— 音と映像に使用している
— bytesファイルに書き換えてAASで扱っている
— 他のアセット違ってDL後に中身をロードして、別のディレクトリに
cpkファイルを書き込んでいる
CRI系ファイルの取扱
50
— 音と映像に使用している
— bytesファイルに書き換えてAASで扱っている
— 他のアセット違ってDL後に中身をロードして、別のディレクトリに
cpkファイルを書き込んでいる
— その際はラベルを使ってCRI...
CRI系ファイルの取扱
51
— 音と映像に使用している
— bytesファイルに書き換えてAASで扱っている
— 他のアセット違ってDL後に中身をロードして、別のディレクトリに
cpkファイルを書き込んでいる
— その際はラベルを使ってCRI...
0.7系
52
— 使用感はほとんど変わっていない
0.7系
53
— 使用感はほとんど変わっていない
— ただしStreamingAssetsに格納されるファイルの取り扱いが変
わった
0.7系
54
— 使用感はほとんど変わっていない
— ただしStreamingAssetsに格納されるファイルの取り扱いが変
わった
— Library下に配置されて、アセットビルドのときだけ更新され、ア
プリビルドのときだけStreamin...
0.7系
55
— 使用感はほとんど変わっていない
— ただしStreamingAssetsに格納されるファイルの取り扱いが変
わった
— Library下に配置されて、アセットビルドのときだけ更新され、ア
プリビルドのときだけStreamin...
0.8系
56
— 使用感はほとんど変わっていない
— 名前空間がすべて変更され、非同期処理にはAsyncがつけられ
た
1.1.3
57
— ねんがんのver 1!
1.1.3
58
— ねんがんのver 1!
— しかしまた実機で動かない!
1.1.3
59
— ねんがんのver 1!
— しかしまた実機で動かない!
— 翌日に1.1.4が緊急リリースされてやっと動く
— ありがとうunity_bill !
1.1.5
60
— これをもってpreviewが取れる
— 以降はバグfixを中心行われる
1.1.7
61
— いろいろ修正されている(詳しくはリリースノートで)
1.1.7
62
— いろいろ修正されている(詳しくはリリースノートで)
— バンドルファイルの命名規則にハッシュなしなどが選べるように
なった
1.1.7
63
— いろいろ修正されている(詳しくはリリースノートで)
— バンドルファイルの命名規則にハッシュなしなどが選べるように
なった
— これにより内蔵ファイルなど名前に差分をつけたくないものも扱
いやすくなった。
内蔵したいアセットについて
64
— アップルの規約により、アプリ起動直後にDLを走らせるとリジェク
トされる可能性がある
内蔵したいアセットについて
65
— アップルの規約により、アプリ起動直後にDLを走らせるとリジェク
トされる可能性がある
— グループ設定でロードパスとビルドパスをStreaming Assetsに
すると内蔵できる
内蔵したいアセットについて
66
— アップルの規約により、アプリ起動直後にDLを走らせるとリジェク
トされる可能性がある
— グループ設定でロードパスとビルドパスをStreaming Assetsに
すると内蔵できる
— ファイルの命名規則を...
内蔵したいアセットについて
67
— spriteAtlas使用時にはより注意が必要
— spriteAtlasを構成しているソースファイルが、DLしたいアセット
と内蔵したいアセットの双方に組み込まれていると、依存関係が
発生してしまう
— ...
エラーハンドルについて
68
— ファイルがないとか、アドレスが間違っているとかを検知してハ
ンドリングしないといけない
エラーハンドルについて
69
— ファイルがないとか、アドレスが間違っているとかを検知してハ
ンドリングしないといけない
— AysncOperationHnadleがSuccess以外のステータスを返し
てくれなかった(8月現在)
— 1.1...
エラーハンドルについて
70
— ファイルがないとか、アドレスが間違っているとかを検知してハ
ンドリングしないといけない
— AysncOperationHnadleがSuccess以外のステータスを返し
てくれなかった(8月現在)
— 1.1...
そのほか遭遇した不具合
71
— サブアセットが取れない。。。
そのほか遭遇した不具合
72
— サブアセットが取れない。。。
— マルチスプライトのようにサブアセットを保持しているアセットを
取り扱う場合、LoadAssetAsync<IList<Sprite>>を利用できる
のだが、実際使ってみるとスレ...
そのほか遭遇した不具合
73
— サブアセットが取れない。。。
— マルチスプライトのようにサブアセットを保持しているアセットを
取り扱う場合、LoadAssetAsync<IList<Sprite>>を利用できる
のだが、実際使ってみるとスレ...
そのほか遭遇した不具合
74
— ProjectからAddressable Assetsをアタッチすると。。。
— The file 'none' is corrupted!
そのほか遭遇した不具合
75
— ProjectからAddressable Assetsをアタッチすると。。。
— The file 'none' is corrupted!
— アタッチする側とアタッチされる側双方がAddressable As...
そのほか遭遇した不具合
76
— 2018.3からの新機能nested prefab
そのほか遭遇した不具合
77
— 2018.3からの新機能nested prefab
— 中でmissingが発生していると、アセットのビルド時にUnityがク
ラッシュする
そのほか遭遇した不具合
78
— 2018.3からの新機能nested prefab
— 中でmissingが発生していると、アセットのビルド時にUnityがク
ラッシュする
— 不慮のクラッシュに見舞われたときは、prefabの中を確認すべし
まとめ
79
— AASはおおよそアセットバンドルを使うのに必要な機能が、だい
たい搭載されていて便利
— バグも非常に多いが1.1.9までにだいぶ修正されている
— 根っこはアセットバンドルだが、互換性がないので運用中のプロ
ジェクトから乗り...
80
Thank you!
Upcoming SlideShare
Loading in …5
×

of

【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 1 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 2 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 3 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 4 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 5 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 6 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 7 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 8 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 9 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 10 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 11 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 12 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 13 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 14 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 15 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 16 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 17 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 18 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 19 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 20 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 21 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 22 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 23 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 24 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 25 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 26 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 27 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 28 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 29 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 30 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 31 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 32 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 33 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 34 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 35 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 36 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 37 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 38 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 39 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 40 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 41 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 42 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 43 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 44 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 45 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 46 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 47 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 48 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 49 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 50 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 51 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 52 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 53 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 54 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 55 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 56 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 57 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 58 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 59 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 60 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 61 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 62 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 63 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 64 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 65 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 66 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 67 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 68 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 69 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 70 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 71 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 72 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 73 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 74 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 75 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 76 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 77 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 78 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 79 【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】 Slide 80
Upcoming SlideShare
What to Upload to SlideShare
Next
Download to read offline and view in fullscreen.

1 Like

Share

Download to read offline

【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】

Download to read offline

2019/9/25-6に開催されたUnite Tokyo 2019の講演スライドです。
中山 正法(株式会社サムザップ)

こんな人におすすめ
・Addressable Assets Systemを導入してみたい人
・プロジェクトの技術選定に悩んでいる人
・勇気が欲しい人

受講者が得られる知見
・Addressable Assets Systemの使用の一例
・開発プロジェクトに未完成のパッケージを入れると起きる事象


Unityのイベント資料はこちらから:
https://www.slideshare.net/UnityTechnologiesJapan/clipboards

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all

【Unite Tokyo 2019】【リリースが先か】えっ!Addressablesを新規プロジェクトに?【ver1が先か】

  1. 1. 【リリースが先か】 えっ!Addressablesを新規プロジェクトに? 【Ver1が先か】 所属団体名 / 株式会社サムザップ 登壇者名 / 中山正法
  2. 2. プロフィール H2 — 中山 正法 — 株式会社サムザップ ネイティブエンジニア
  3. 3. アセット管理について 3 — 運用型のアプリにおいては生命線 — フルネイティブ時代が到来して気を使うことが多くなった — Unityではアセットバンドルが提供されている
  4. 4. 4 皆さん
  5. 5. 5 アセットバンドルは 好き?
  6. 6. Addressable Assets Systemについて 6 — AASの概要 — 導入の経緯 — 実際の組み込みについて – 各バージョン – いろいろ起きた問題について
  7. 7. AASの概要 7 — Unity純正のアセット管理システム — アセットバンドルをベースにしている — 依存関係などの挙動は大体同じ — ファイル拡張子は違う — マニフェストは存在しない — 代わりにカタログファイルが存在する
  8. 8. AASの使い方 8 — PackageManagerからインストールできる — Unity備え付けじゃないのでVer Upの影響を受けにくい — 大きな修正の場合はUnityのVer Upを要請されることがある — 主なUI構成はAddressablesのウィンドウとプロファイラ — コード無しでビルドできる
  9. 9. AASの使い方 9 — アセットを増やすときはD&D — グループごとに管理できる – ビルド先、ロード先の設定 – プロバイダの指定 – ビルドの単位 – ひとまとまりにするか – バラバラにするか
  10. 10. — ドラッグ後はアドレスがパスの名で記入される — simplifyを使って短くする — パスのままでビルドを行うとその分ディレクトリが掘られる — Windowsでパス長制限に引っかかる可能性あり AASの使い方 10
  11. 11. AASの使い方 11 — ラベル機能がある — ラベルはグループではなくアセット 単位で付与できる — ラベルはアドレスとほぼ同列の扱 いなので、ロードの際に利用できる
  12. 12. — ビルドはボタン一つ — addressables windowの右上のボタ ンからできる — 各グループで設定したパスに向かってビ ルドされる AASの使い方 12
  13. 13. — ビルドはボタン一つ — addressables windowの右上のボタ ンからできる — 各グループで設定したパスに向かってビ ルドされる AASの使い方 13
  14. 14. — ロードはAddressable.LoadAssetAsync<>() — 実際のロードはグループに設定されたプロバイダが行う — プロバイダは実際にロードを担当するクラス — ベースクラスを継承して自作することもできる — AsyncOperarionHandleは残しておいたほうがいい — 後述のメモリ解放で使う AASの使い方 14
  15. 15. — メモリ解放はAddressable.Release() — 引数に対象のオブジェクトを入れる — 参照カウントがデクリメントされて0になるとメモリ解放 — より確実なのはAsyncOperationHandleを入れてしまうこと AASの使い方 15
  16. 16. — 実行モードは3種類 — 実機準拠のPacked Play Mode — アセットの依存関係は計算するがPrefabを読み込むVirtual Mode — 完全にPrefabで駆動するFast Mode AASの使い方 16
  17. 17. — 実行モードは3種類 — 実機準拠のPacked Play Mode — アセットの依存関係は計算するがPrefabを読み込むVirtual Mode — 完全にPrefabで駆動するFast Mode AASの使い方 17
  18. 18. — Fast Mode — 開発者への福音 — アセットをビルドすることなく、その場で動作確認できる — 開発中は基本的にこのモード — FastMode用のカタログがLibrary下に作られる AASの使い方 18
  19. 19. — Virtual Mode — FastModeの状態を維持しつつプロファイラで詳細な確 認ができるモード — 恐ろしく重い — これも専用のカタログが作られる — あんまりつかってない AASの使い方 19
  20. 20. — Packed Play Mode — ビルドしたアセットを読み込む、実機準拠モード — 実機でトラブルが発生したときはこちらで調査を行う — カタログはビルドしたものを使う AASの使い方 20
  21. 21. — プロファイラ — FastModeでは使えない — アセットの参照カウントがわかる ようになる — これに映ってる間はメモリから除 去されない AASの使い方 21
  22. 22. — アセットバンドルのマネージャーについて悩んでいた — 自作するのはだるい — グループ会社から提供してもらう道もあった — いろいろ考えて却下 AAS導入の経緯 22
  23. 23. — 自分では作りたくないが、人から施しも受けたくない — AASの記事をみて導入を検討した AAS導入の経緯 23
  24. 24. — 納期が決まっている — 技術的な挑戦は控えている — 開発は終盤 プロジェクトの概要 24
  25. 25. — Spineを使った2D RPG — サウンドと動画はCRIを利用している — アドベンチャーパートにLive2Dを使用している — これらを一緒に扱って差分を検知する必要がある プロジェクトの概要 25
  26. 26. 最初期の検証 26 — Ver0.2系 — UI系のバグが多く正常に動作しない — 最低限アセットバンドル様に動作することだけ確認した
  27. 27. 最初期の検証 27 — Ver0.2系 — UI系のバグが多く正常に動作しない — 最低限アセットバンドル様に動作することだけ確認した — しかしながら上述のバグが深刻なため、移行を断念
  28. 28. 最初期の検証 28 — Ver0.2系 — UI系のバグが多く正常に動作しない — 最低限アセットバンドル様に動作することだけ確認した — しかしながら上述のバグが深刻なため、移行を断念 — しばらくアセットバンドルでの開発をすすめる
  29. 29. アセットバンドルでの開発中 29 — ほぼロードAPIをラップするだけに留める — 依存関係の解決をランタイムで行わない — アセット構造をエンジニアが熟知 — ロード順を厳格に決めて実装していた — この時点でアセットの粒度を決めていたので移行後のパフォーマ ンスの変化に敏感になれた
  30. 30. 時は流れて年始 30 — Ver 0.5系 — UI系のバグもだいぶマシになっていたので、アセット登録からビ ルドまで比較的スムーズに実行できた
  31. 31. 時は流れて年始 31 — Ver 0.5系 — UI系のバグもだいぶマシになっていたので、アセット登録からビ ルドまで比較的スムーズに実行できた — ただしAndroidとiOSの実機にて動作しなかった
  32. 32. 時は流れて年始 32 — Ver 0.5系 — UI系のバグもだいぶマシになっていたので、アセット登録からビ ルドまで比較的スムーズに実行できた — ただしAndroidとiOSの実機にて動作しなかった — 意図せずプロバイダーのコードが削除されてしまっていた — 起動時のAASイニシャライズに失敗し起動すらできない状態
  33. 33. 33 monoで試してみた
  34. 34. 34 かろうじて 起動に成功
  35. 35. 35 そして・・・
  36. 36. 36
  37. 37. 37 ビルトインシェーダー 全滅
  38. 38. 38 ver 0.5系での移行を 断念
  39. 39. さらに時は流れて 39 — Ver 0.6系 — IL2CPPでのストリップ問題は解決 — アセットバンドルからの移行を開始
  40. 40. さらに時は流れて 40 — Ver 0.6系 — IL2CPPでのストリップ問題は解決 — アセットバンドルからの移行を開始 — まずはStreaming Assetsから読み込みさせた — そのあとダウンロードの実装
  41. 41. ダウンロード 41 — リモートから直接ロードは行わない
  42. 42. ダウンロード 42 — リモートから直接ロードは行わない — カタログデータからバンドルファイル名を取得 — 接続先のサーバーからwebrequestを利用してDL
  43. 43. ダウンロード 43 — リモートから直接ロードは行わない — カタログデータからバンドルファイル名を取得 — 接続先のサーバーからwebrequestを利用してDL — Persistent Data pathへ書き込みを行う — グループのロードパスはこちらを向いてる
  44. 44. ダウンロード 44 — UnityWebrequestのダウンロードハンドラを利用してる
  45. 45. ダウンロード 45 — UnityWebrequestのダウンロードハンドラを利用してる — お手軽にDL時のメモリプレッシャーを抑えてくれる
  46. 46. ダウンロード 46 — UnityWebrequestのダウンロードハンドラを利用してる — お手軽にDL時のメモリプレッシャーを抑えてくれる — DL時のダウンロードサイズ表示もカタログから取得している
  47. 47. ダウンロード 47 — UnityWebrequestのダウンロードハンドラを利用してる — お手軽にDL時のメモリプレッシャーを抑えてくれる — DL時のダウンロードサイズ表示もカタログから取得している — 差分に関してはファイル名にハッシュがついているので、ストレー ジにないものはすべてDLしている
  48. 48. CRI系ファイルの取扱 48 — 音と映像に使用している
  49. 49. CRI系ファイルの取扱 49 — 音と映像に使用している — bytesファイルに書き換えてAASで扱っている — 他のアセット違ってDL後に中身をロードして、別のディレクトリに cpkファイルを書き込んでいる
  50. 50. CRI系ファイルの取扱 50 — 音と映像に使用している — bytesファイルに書き換えてAASで扱っている — 他のアセット違ってDL後に中身をロードして、別のディレクトリに cpkファイルを書き込んでいる — その際はラベルを使ってCRIかどうか区別している
  51. 51. CRI系ファイルの取扱 51 — 音と映像に使用している — bytesファイルに書き換えてAASで扱っている — 他のアセット違ってDL後に中身をロードして、別のディレクトリに cpkファイルを書き込んでいる — その際はラベルを使ってCRIかどうか区別している — ちなみにUnity標準のビデオアセットをAASで取り扱おうとした が、当時はエラーで実機からロードできなかった
  52. 52. 0.7系 52 — 使用感はほとんど変わっていない
  53. 53. 0.7系 53 — 使用感はほとんど変わっていない — ただしStreamingAssetsに格納されるファイルの取り扱いが変 わった
  54. 54. 0.7系 54 — 使用感はほとんど変わっていない — ただしStreamingAssetsに格納されるファイルの取り扱いが変 わった — Library下に配置されて、アセットビルドのときだけ更新され、ア プリビルドのときだけStreamingAssetsに転写される
  55. 55. 0.7系 55 — 使用感はほとんど変わっていない — ただしStreamingAssetsに格納されるファイルの取り扱いが変 わった — Library下に配置されて、アセットビルドのときだけ更新され、ア プリビルドのときだけStreamingAssetsに転写される — エディタだけで確認してると、Setting.jsonの変更が反映されな かったりしてハマる
  56. 56. 0.8系 56 — 使用感はほとんど変わっていない — 名前空間がすべて変更され、非同期処理にはAsyncがつけられ た
  57. 57. 1.1.3 57 — ねんがんのver 1!
  58. 58. 1.1.3 58 — ねんがんのver 1! — しかしまた実機で動かない!
  59. 59. 1.1.3 59 — ねんがんのver 1! — しかしまた実機で動かない! — 翌日に1.1.4が緊急リリースされてやっと動く — ありがとうunity_bill !
  60. 60. 1.1.5 60 — これをもってpreviewが取れる — 以降はバグfixを中心行われる
  61. 61. 1.1.7 61 — いろいろ修正されている(詳しくはリリースノートで)
  62. 62. 1.1.7 62 — いろいろ修正されている(詳しくはリリースノートで) — バンドルファイルの命名規則にハッシュなしなどが選べるように なった
  63. 63. 1.1.7 63 — いろいろ修正されている(詳しくはリリースノートで) — バンドルファイルの命名規則にハッシュなしなどが選べるように なった — これにより内蔵ファイルなど名前に差分をつけたくないものも扱 いやすくなった。
  64. 64. 内蔵したいアセットについて 64 — アップルの規約により、アプリ起動直後にDLを走らせるとリジェク トされる可能性がある
  65. 65. 内蔵したいアセットについて 65 — アップルの規約により、アプリ起動直後にDLを走らせるとリジェク トされる可能性がある — グループ設定でロードパスとビルドパスをStreaming Assetsに すると内蔵できる
  66. 66. 内蔵したいアセットについて 66 — アップルの規約により、アプリ起動直後にDLを走らせるとリジェク トされる可能性がある — グループ設定でロードパスとビルドパスをStreaming Assetsに すると内蔵できる — ファイルの命名規則を、nohashにしておかないと依存関係をミ スったときにアセットを読み込めなくなるので注意
  67. 67. 内蔵したいアセットについて 67 — spriteAtlas使用時にはより注意が必要 — spriteAtlasを構成しているソースファイルが、DLしたいアセット と内蔵したいアセットの双方に組み込まれていると、依存関係が 発生してしまう — エディターのselect dependencyからは確認ができないので、 ハマりやすい
  68. 68. エラーハンドルについて 68 — ファイルがないとか、アドレスが間違っているとかを検知してハ ンドリングしないといけない
  69. 69. エラーハンドルについて 69 — ファイルがないとか、アドレスが間違っているとかを検知してハ ンドリングしないといけない — AysncOperationHnadleがSuccess以外のステータスを返し てくれなかった(8月現在) — 1.1.9で修正されたので、Exceptionをキャッチできるようになっ た
  70. 70. エラーハンドルについて 70 — ファイルがないとか、アドレスが間違っているとかを検知してハ ンドリングしないといけない — AysncOperationHnadleがSuccess以外のステータスを返し てくれなかった(8月現在) — 1.1.9で修正されたので、Exceptionをキャッチできるようになっ た — 特別な実装をせずに、何らかのエラーを検知したら、トップに戻し ている
  71. 71. そのほか遭遇した不具合 71 — サブアセットが取れない。。。
  72. 72. そのほか遭遇した不具合 72 — サブアセットが取れない。。。 — マルチスプライトのようにサブアセットを保持しているアセットを 取り扱う場合、LoadAssetAsync<IList<Sprite>>を利用できる のだが、実際使ってみるとスレッドエラーを大量に吐き出してハン グアップしてしまう
  73. 73. そのほか遭遇した不具合 73 — サブアセットが取れない。。。 — マルチスプライトのようにサブアセットを保持しているアセットを 取り扱う場合、LoadAssetAsync<IList<Sprite>>を利用できる のだが、実際使ってみるとスレッドエラーを大量に吐き出してハン グアップしてしまう — Unity 2019.3で直っているらしい
  74. 74. そのほか遭遇した不具合 74 — ProjectからAddressable Assetsをアタッチすると。。。 — The file 'none' is corrupted!
  75. 75. そのほか遭遇した不具合 75 — ProjectからAddressable Assetsをアタッチすると。。。 — The file 'none' is corrupted! — アタッチする側とアタッチされる側双方がAddressable Assets だと起きてしまう — 2019.3で直っているらしい
  76. 76. そのほか遭遇した不具合 76 — 2018.3からの新機能nested prefab
  77. 77. そのほか遭遇した不具合 77 — 2018.3からの新機能nested prefab — 中でmissingが発生していると、アセットのビルド時にUnityがク ラッシュする
  78. 78. そのほか遭遇した不具合 78 — 2018.3からの新機能nested prefab — 中でmissingが発生していると、アセットのビルド時にUnityがク ラッシュする — 不慮のクラッシュに見舞われたときは、prefabの中を確認すべし
  79. 79. まとめ 79 — AASはおおよそアセットバンドルを使うのに必要な機能が、だい たい搭載されていて便利 — バグも非常に多いが1.1.9までにだいぶ修正されている — 根っこはアセットバンドルだが、互換性がないので運用中のプロ ジェクトから乗り換えるのは厳しい — 凝ったロードする場合はプロバイダーを自作すると、読み込む部 分のAPIを統一できるのでスッキリする
  80. 80. 80 Thank you!
  • yukiakiya

    Oct. 15, 2019

2019/9/25-6に開催されたUnite Tokyo 2019の講演スライドです。 中山 正法(株式会社サムザップ) こんな人におすすめ ・Addressable Assets Systemを導入してみたい人 ・プロジェクトの技術選定に悩んでいる人 ・勇気が欲しい人 受講者が得られる知見 ・Addressable Assets Systemの使用の一例 ・開発プロジェクトに未完成のパッケージを入れると起きる事象 Unityのイベント資料はこちらから: https://www.slideshare.net/UnityTechnologiesJapan/clipboards

Views

Total views

15,859

On Slideshare

0

From embeds

0

Number of embeds

12,457

Actions

Downloads

15

Shares

0

Comments

0

Likes

1

×