Upgrade to Pro — share decks privately, control downloads, hide ads and more …

アセットバンドルの管理について

Cygames
November 30, 2015

 アセットバンドルの管理について

2015/11/15 Cygames Tech Fes

Cygames

November 30, 2015
Tweet

More Decks by Cygames

Other Decks in Programming

Transcript

  1. ⾃自⼰己紹介 $POGJEFOUJBM $PQZSJHIU ˜$ZHBNFT  *OD "MM3JHIUT3FTFSWFE • 中村克也 •

    エンジニアマネージャー • Unityを使⽤用した社内ライブラリ開発・運⽤用 • 社外窓⼝口 • エンジニアのリクルート   
  2. アジェンダ $POGJEFOUJBM $PQZSJHIU ˜$ZHBNFT  *OD "MM3JHIUT3FTFSWFE • Unity4からUnity5へ •

    Unity5の新要素について • シングルマニフェスト • バリアント • 依存関係 • リソース管理理 • ロードAPIと圧縮 • Jenkins連携 • おまけ • 質疑応答   
  3. アジェンダ $POGJEFOUJBM $PQZSJHIU ˜$ZHBNFT  *OD "MM3JHIUT3FTFSWFE • Unity4からUnity5へ •

    Unity5の新要素について • シングルマニフェスト • バリアント • 依存関係 • リソース管理理 • ロードAPIと圧縮 • Jenkins連携 • おまけ • 質疑応答   
  4. アジェンダ $POGJEFOUJBM $PQZSJHIU ˜$ZHBNFT  *OD "MM3JHIUT3FTFSWFE • Unity4からUnity5へ •

    Unity5の新要素について • シングルマニフェスト • バリアント • 依存関係 • リソース管理理 • ロードAPIと圧縮 • Jenkins連携 • おまけ • 質疑応答   
  5. 例例えば、上記のようなフォルダを⽤用意してアセットを管理理す る場合フォルダ(カテゴリ)ごとにビルドしたい! というニーズに3つのAndroid.manifestが作成される。 root Assets Resources Bg 背景画像 Chara キャラ画像

    3d 3dアセット フォルダ構成 Android.manifest (Bg) Android.manifest (Chara) Android.manifest (3d) 同名なので管理理できない $POGJEFOUJBM $PQZSJHIU ˜$ZHBNFT  *OD "MM3JHIUT3FTFSWFE   
  6. 結果、同等の情報を持った独⾃自のリソースリストを作成する ことに。 カテゴリごとに、name/hash/version/groupをCSVでア セットバンドルビルド時に出⼒力力するように。 name hash version group bg_001.unity3d 621a0f92b9f32c8126f2aa6af5ab4cc7

    00000000 common bg_002.unity3d 3d534a8f488cdf3f50837d7ed337d2c3 00000000 common bg_101.unity3d 45b0bab78240018ee411401410c2dbe2 00000000 tutorial_g1 bg_102.unity3d 4095525f35ea45a83ddf67b8ec4178ff 00000000 tutorial_g2 bg_103.unity3d 66d254f9fb533dcf90463f7d96ce2a54 00000000 every bg_104.unity3d 7798907c2e4d18a0f3b5e509377e7680 00000000 every Unity4でも同じことしてました。。 $POGJEFOUJBM $PQZSJHIU ˜$ZHBNFT  *OD "MM3JHIUT3FTFSWFE   
  7. アジェンダ $POGJEFOUJBM $PQZSJHIU ˜$ZHBNFT  *OD "MM3JHIUT3FTFSWFE • Unity4からUnity5へ •

    Unity5の新要素について • シングルマニフェスト • バリアント • 依存関係 • リソース管理理 • ロードAPIと圧縮 • Jenkins連携 • おまけ • 質疑応答   
  8. サウンドとムービーは⾃自動化しない ⾼高⾳音質(画質)/標準⾳音質(画質)は、デザイナにそれぞれ出 ⼒力力してもらい、リポジトリでHD/SDを管理理 Repository 変換sv Build  sv リソースsv リサイズ (50%)

    &  減色 clone cp rsync clone AB(HD)/Sound/Movie AB(SD) サウンド、ムービーも品質を分けるのでCygamesでは HD/SD-‐‑‒>High/Lowと呼ぶように $POGJEFOUJBM $PQZSJHIU ˜$ZHBNFT  *OD "MM3JHIUT3FTFSWFE   
  9. リソースサーバーの階層構造 00000000/High/AssetBundle/Android  など 品質をデバイスのスペックに合わせて変更更する バージョン 品質 種類 プラットフォーム 00000000 High

    AssetBundles Android 00000001 Low Sounds iOS 01010001 Movies PC $POGJEFOUJBM $PQZSJHIU ˜$ZHBNFT  *OD "MM3JHIUT3FTFSWFE   
  10. アジェンダ $POGJEFOUJBM $PQZSJHIU ˜$ZHBNFT  *OD "MM3JHIUT3FTFSWFE • Unity4からUnity5へ •

    Unity5の新要素について • シングルマニフェスト • バリアント • 依存関係 • リソース管理理 • ロードAPIと圧縮 • Jenkins連携 • おまけ • 質疑応答   
  11. アセットバンドルは、共有アセットバンドルと固有アセット バンドルを分けて作成 CommonShader CommonMaterial Model001 ModelTexture001 CommonTexture 3DCommonShader.unity3d 3DCommonTexture.unity3d 3DCommonMaterial.unity3d

    3DCharaModel001.unity3d 3D  Build  Group ModelMaterial001 AssetImporter::assetBundleNameを全て設定してから BuildPipeline.BuildAssetBundles() アセットの依存が残り、依存するアセットは固有バンドルに 格納されない $POGJEFOUJBM $PQZSJHIU ˜$ZHBNFT  *OD "MM3JHIUT3FTFSWFE   
  12. アジェンダ $POGJEFOUJBM $PQZSJHIU ˜$ZHBNFT  *OD "MM3JHIUT3FTFSWFE • Unity4からUnity5へ •

    Unity5の新要素について • シングルマニフェスト • バリアント • 依存関係 • リソース管理理 • ロードAPIと圧縮 • Jenkins連携 • おまけ • 質疑応答   
  13. ①1プロジェクト構成 ソースコード(アプリ)、リソース を1つのプロジェクトに全て含める $POGJEFOUJBM $PQZSJHIU ˜$ZHBNFT  *OD "MM3JHIUT3FTFSWFE Game

    script resources Prein 3D UI Card resources 3D Editor script Editor script resources UI Editor script BG resources Prein Game script Title.  unityproject Title.  unityproject 3DWork.  unityproject UIWork.  unityproject ②複数プロジェクト構成 アプリとカテゴリごとのリソースで分ける 3D/UI/Cardなど、アセットバンドルビル ド⽤用プロジェクトに分ける   
  14. root Assets ①_ProjectName Resources プリインストールリソース Scenes Scripts ②_ProjectNameResources Resources アセットバンドルリソース

    リソースリポジトリで管理 アプリビルド時はcloneしない ③_ProjectNameDebug xxx デバッグツールなど アプリビルド時にフォルダごと削除 Plugins StreamingAssets その他assetフォルダ プロジェクトフォルダ構成 $POGJEFOUJBM $PQZSJHIU ˜$ZHBNFT  *OD "MM3JHIUT3FTFSWFE   
  15. 1プロジェクト構成のメリットは、ローカルに置いたアセッ トを直接ロードできる アセットバンドルとローカルアセットのロードを吸収するク ラスでResourcesのロードをラップする public T  LoadObject<T>(string assetName,  string objectName,

     bool isServerResources =  true)  where  T  :  Object { if (!isServerResources) { //  Resourcesから return Resources.Load<T>(objectName); } else { //  AssetBundleから var o  =  assetManager.LoadObject(assetName,  objectName,  typeof(T)); if (o  !=  null) { return (T)o; } //  なければResourcesから T  resource  =  Resources.Load<T>(objectName); return resource; } } $POGJEFOUJBM $PQZSJHIU ˜$ZHBNFT  *OD "MM3JHIUT3FTFSWFE   
  16. アジェンダ $POGJEFOUJBM $PQZSJHIU ˜$ZHBNFT  *OD "MM3JHIUT3FTFSWFE • Unity4からUnity5へ •

    Unity5の新要素について • シングルマニフェスト • バリアント • 依存関係 • リソース管理理 • ロードAPIと圧縮 • Jenkins連携 • おまけ • 質疑応答   
  17. アセットバンドル⾃自体を圧縮することに。 5,000ファイル:2.5GB  -‐‑‒>  450MB    ※アルゴリズムは⾮非公開。 アセットバンドルビルドシーケンス アセットバンドルロードシーケンス AssetImporter.assetBundleName BuildPipeline.BuildAssetBundles

    圧縮 ハッシュ生成 リソースリスト生成 www  ダウンロード 解凍 AssetBundle.CreateFromMemory 管理クラスに登録 圧縮したままストレージへ保存 解凍時にメモリに乗るのでFromMemory使う $POGJEFOUJBM $PQZSJHIU ˜$ZHBNFT  *OD "MM3JHIUT3FTFSWFE   
  18. アジェンダ $POGJEFOUJBM $PQZSJHIU ˜$ZHBNFT  *OD "MM3JHIUT3FTFSWFE • Unity4からUnity5へ •

    Unity5の新要素について • シングルマニフェスト • バリアント • 依存関係 • リソース管理理 • ロードAPIと圧縮 • Jenkins連携 • おまけ • 質疑応答   
  19. ビルドマシン:Mac  mini(2012年年モデル Intel  Core  i5  2.5GHz) アプリビルド30分、 アセットバンドルビルド2時間(1プラットフォーム) ビルドマシン:Mac  Pro(mem

     64GB  DDR  ECC) アプリビルド5分、 アセットバンドルビルド15分(1プラットフォーム) $POGJEFOUJBM $PQZSJHIU ˜$ZHBNFT  *OD "MM3JHIUT3FTFSWFE   
  20. PC High/Low BuildTarget.WebPlayer iOS High iOS Low Android High Android

    Low PC/iOS/Android Low 画像コンバート $POGJEFOUJBM $PQZSJHIU ˜$ZHBNFT  *OD "MM3JHIUT3FTFSWFE