LoginSignup
19
17

More than 5 years have passed since last update.

UnityのAssetBundle差分更新システムの設計

Last updated at Posted at 2014-08-29

概要

1年程前に実装した内容のまとめ
最近まで実装の変更はあったが、下記で落ち着いた感じです。
一応、アプリのバージョンアップを考慮した設計にしたつもり。

開発環境の前提

  • 更新リストを利用したAssetBundleの利用が前提
  • バージョン管理にSubversionの利用を前提
  • ブランチ毎にアプリのバージョンが異なる前提

設計

  • 依存関係の取得
    AssetBundleにするファイルの依存関係のファイルリストを取得し、そのファイルと.metaについてもリビジョンを取得
    ※ 依存関係はAssetDatabase.GetDependenciesにリストを渡すことで取得
    更新するかは、最終の更新リストのリビジョンと照らし合わせる ※更新リストについては後述

  • リビジョンの取得方法
    svn infoにある
    Last Changed Rev: からファイルのリビジョンを取得する

  • ビルド後の格納パス
    ビルドしたファイルは下記のフォルダに格納する
    [platform]/[アプリバージョン]/[リビジョン]/ファイル名
    アプリバージョンは変更を考慮し、アプリバージョンとは別でナンバーリングした値を利用
    例) Android/11/12345/hoge.prefab

気をつけること

WWW.LoadFromCacheOrDownloadのバージョンにリビジョンを利用した場合、 別ブランチ(異なるアプリバージョン)でのリビジョンの方が上のことがある。
更新リスト取得時に以前のアプリバージョンのAssetBundleを消す事で対処とする

※ WWW.LoadFromCacheOrDownloadのCRCの値にダミーを放りこむことで削除する

更新リストの管理

ビルド後、[platform]_ [アプリバージョン]_ [連番].csvを作成

  • csvフォーマット ファイル名,容量,リビジョン,CRC

※ アプリバージョンは前述のナンバーリングした値
※ 連番は更新リストの作成数

CRCの管理

  • AssetBundleの更新の無い分については最終の更新リストから継続
  • AssetBundle更新分はビルド時に収集していく

後処理

  • ビルドが正常に完了した場合のみ、AssetBundleは別フォルダに格納して利用可能な状態にする

メモ

外部コマンドの結果を取得する場合に、取得出来ないバグがあるので下記で対応

command.cs
static string systemCommand(string command, string args){

    System.Diagnostics.Process p = new System.Diagnostics.Process();
    p.StartInfo.FileName = command;
    p.StartInfo.Arguments = args;
    p.StartInfo.UseShellExecute = false;
    p.StartInfo.RedirectStandardError=true;
    p.StartInfo.RedirectStandardOutput = true;

    p.Start();
    //string output = p.StandardOutput.ReadToEnd();
    string output = "";
    while (p.StandardOutput.Peek() > -1)
    {
        output += p.StandardOutput.ReadLine() + "\n";
    }
    p.WaitForExit();
    p.Close();
    return output;
}
19
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
17