CRIWARE Unity Plugin Manual  Last Updated: 2024-04-24
[CriFs]ディレクトリバインド

サンプル内容

概要

cri4u_samples_crifs_scene05_game_mini.png
本サンプルでは、バインドディレクトリ機能について説明します。
バインドディレクトリ機能は、指定したディレクトリ以下をバインドする機能です。 しかしながら、バインドディレクトリ時にはファイルのオープンなどは行われず、 ファイルロード等、実際のファイルアクセス時にファイルオープン処理やファイルサイズ取得が行われます。
予めファイルオープン処理やファイル情報の取得を行う事のできるCPKファイルを用いた動作と比較すると、 とても効率の悪い処理となります。
上記の理由から、開発中などでは特に問題にはなりませんが、リリース前など、 最終的には効率の良いCPKファイルにパッキングしてご利用頂くことを推奨します。
本サンプルでは、StreamingAssets以下の異なる階層のディレクトリをマルチバインドしています。 StreamingAssets内には開発初期に用意したデータファイルが置かれており、 データファイルの更新は別ディレクトリに対して行われていくといような利用方法を想定しています。
データの作成者は最新ファイルを所定のディレクトリ上に置くだけで、 ゲーム本体側は一切変更せずにデータファイルを更新できるということになります。

操作方法

  • [Step1 : Bind Directory]
    • [Bind Base Directory]ボタン
      ベースとなるディレクトリをバインドします。

    • [Bind Update Directory]ボタン
      更新ファイルを配置する想定のディレクトリをバインドします。

    • [Unbind Directory]ボタン
      バインドを取り消します。

  • [Step2 : Load File]
    • [Load Text File]ボタン
      いずれかのディレクトリにあるテキストファイルを読み込みます。

    • [Load Image File 1]ボタン
      いずれかのディレクトリにある画像ファイルを読み込んで表示します。

    • [Load Image File 2]ボタン
      いずれかのディレクトリにある別の画像ファイルを読み込んで表示します。

    • [Reset]ボタン
      初期状態に戻します。


シーン情報


ミドルウェア ファイルマジックPRO (CRI File System)
サンプル Basicサンプル
格納場所 /cri/unity/samples/UnityProject/Assets/Scenes/crifilesystem/basic
シーンファイル Scene_05_BindDirectory.unity


プログラムの解説

/* Create a binder. */
this.binder = new CriFsBinder();

はじめにアプリ側でバインダを作成します。
このバインダを対象に単体ファイルやCPKファイル等をバインドしていきます。

/* Request a directory binding. */
var request = CriFsUtility.BindDirectory(this.binder, null, path);

ディレクトリのバインドリクエストを出します。バックグラウンドで非同期にバインド処理が行われます。
バインド対象となるバインダを指定して実行します。pathはバインドするディレクトリのパスです。

/* Wait for the completion of directory binding. */
yield return request.WaitForDone(this);
this.lockBindDirectoryButton = false;
if (request.error == null) {
/* If successful, store the binder ID on the application side. */
this.bindId[bind_index] = request.bindId;

CPKファイルのバインド処理完了を待ちます。
errorがnullならバインド成功です。

/* 成功したらバインドIDをアプリ側で憶えておく */
/* バインドIDはバインド解放時等に使用 */
this.bindId[bind_index] = request.bindId;
/* 検索順の優先度を設定 */
/* 検索優先度は、値が大きいほど高くなります。 */
/* 本サンプルでは常に、更新ファイル用ディレクトリ側CPKをベースのCPKより先に検索するように設定しています。 */
CriFsBinder.SetPriority(this.bindId[bind_index], bind_index);

バインドが成功したら、requestのメンバであるバインドIDの値をアプリケーション側で覚えておく必要があります。
このバインドIDを指定して、ファイルアクセス時の検索優先度をCriFsBinder.SetPriority()で設定します。
本サンプルではローカルのディレクトリとリモートホスト上のディレクトリをマルチバインドします。
マルチバインドについては、[CriFs]ディレクトリバインド を参照してください。

/* Issue a request for the file loading to the directory-bound binder. */
var request = CriFsUtility.LoadFile(this.binder, path);
/* Wait for the completion of loading. */
yield return request.WaitForDone(this);

ロード時に、マルチバインド済みのバインダを指定します。
バインダにバインドされているディレクトリのうち、優先度の高いものから順に検索され、ファイルがロードされます。
本サンプルでは更新ファイルを配置する想定のディレクトリの検索優先度を高く設定しているため、このディレクトリ内のファイルが更新されれば、アプリがそこから優先的にファイルをロードしてきます。