CRIWARE Unity Plugin Manual  Last Updated: 2024-12-05
CPKファイルからのファイル読み込み

データフロー

ファイルマジックPROを使うと、アプリケーションで使う大量のデータファイルを1つのファイルにパッキングし、ランタイム時にパッキングファイルの中のファイルに自由にアクセスすることができます。
(パッキングファイル中のファイルはファイル名やファイルIDを使って指定します。)

crifs2_tutor02_dataflow_small.png
パッキングしたファイルのことを「CPKファイル」(CRI Packed File)と呼びます。
CPKファイルは「CPK File Builder」を使って作成します。
ファイルの入ったディレクトリをツールへドラッグ&ドロップするだけで簡単にCPKファイルを作成することができます。

動作イメージ

CPKファイルよりファイルを読み込む時の動作は以下のようになります。

fmpu_keys_fileload_cpk_system_mini.png

まず、CPKファイルを「バインダ」に登録(バインド)します。
バインダは仮想的なドライブあるいはデバイスのようなものです。
バインドすることにより、バインダを経由して、CPKファイル内のファイル(コンテンツファイル)にアクセスできるようになります。
バインダとコンテンツファイル名を指定し、「ローダ」によりコンテンツファイルを読み込みます。

処理の流れ

  • (1) バインダの生成
    CPKファイルからファイルを読み込むため、バインダを生成します。

    this.binder = new CriFsBinder();

  • (2) CPKファイルのバインド
    生成したバインダにCPKファイルをバインドします。
    ローカルにあるCPKファイルだけでなく、遠方のサーバー上にあるCPKファイルもバインドすることができます。

    • ローカルにあるCPKファイルのバインド
      CriFsBindRequest request = CriFsUtility.BindCpk(this.binder, "StreamingAssets/sample.cpk");

    • 遠方のサーバー上にあるCPKファイルのバインド
      CriFsBindRequest request = CriFsUtility.BindCpk(this.binder, "http://crimot.com/sdk/sampledata/crifilesystem/sample.cpk");
バインドのリクエストが発行され、バックグラウンドで非同期にバインド処理が行われます。
yield命令 でバインドの完了待ちを行います。
成功するとリクエストからバインドIDを取得できます。

yield return request.WaitForDone(this);
if (request.error == null) {
this.bindId = request.bindId;
}

  • (3) ファイル読み込み
    コルーチンを使ってファイル読み込みを行います。
    CPKファイル内のファイルの読み込みリクエストを発行し、yield命令 でファイル読み込みの終了を待ちます。
    ファイル読み込みの手順は、ローカルにあるCPKファイルであっても、リモートにあるCPKファイルであっても変わりません。

    CriFsLoadFileRequest request = CriFsUtility.LoadFile(this.binder, contentfile);

  • (4) アンバインドとバインダの破棄
    バインドを解除します。

    CriFsBinder.Unbind(this.bindId);

    バインダを忘れずに破棄します。

    this.binder.Dispose();

[備考]
実際のコードについては、サンプル「 [CriFs]データのインストール 」をご覧ください。