CRIWARE Unity Plugin Manual  Last Updated: 2024-04-24
[ゲームへの組み込み]編
ファイルマジックPROでファイルを読み込む手順について説明します。
ここでは、「パッキングファイルからテキストファイルを読み込み、テキスト内容を表示する」 スクリプトを作成することにします。
作業全体の流れは、次のようになります。

(1) Unityプロジェクトの新規作成とプラグインパッケージのインポート

まず、ファイル読み込みのスクリプトを実行する準備を行います。
CRI ADXのクイックスタートと同じように、Unityプロジェクトを新規作成し、プラグインパッケージをプロジェクトにインポートしてください。
プロジェクト名は「TutorialFs」としてください。
また、シーン名は「NewScene」としてください。

(2) 読み込み対象ファイルのコピー

(2-1) 用意するファイル
次に、スクリプトで読み込むファイルを用意します。
ファイルマジックPROのサンプルで使用している「sample.cpk」を使うことにします。
これらのファイルは、以下の場所にあります。

サンプルデータの格納場所
  * cri

  \ * unity

    \ * samples

      \ * crifilesystem

        \ * basic

          \ * Assets

            \ * StreamingAssets

              \ * sample.cpk

 

 

 

: ファイルマジックPROサンプル

: 「Basic]

 

 

: パッキングファイル

 

パッキングファイル「sample.cpk」には、次のファイルが格納されています。

sample.cpk
- criware.png : イメージファイル(CRIWAREロゴ)
- sample_image1.png : イメージファイル1
- sample_image2.png : イメージファイル2
- sample_text.txt : テキストファイル

(2-2) StreamingAssetsへファイルコピー
スクリプトで読み込むファイルはすべて、UnityプロジェクトのAssetsフォルダ下の「StreamingAssets」サブフォルダへコピーしておく必要があります。
「sample.cpk」をStreamingAssetsサブフォルダへコピーしてください。

Unityプロジェクト「TutorialFs」のAssetsフォルダの構成
  * TutorialFs

  \ * Assets

    o * Editor

    o * Gizmos

    o * Plugins

    \ * StreamingAssets

      \ * sample.cpk

 

: Assetsフォルダ

 

 

: CRIWARE Unity Plug-in

: StreamingAssetsフォルダ

: パッキングファイル

 

(3) ゲームオブジェクトへのスクリプトの貼り付け

ファイルマジックPROでは、CRI ADXやCRI Sofdecのように専用コンポーネントは用意されていませんので、ファイル読み込み制御を記述したスクリプトをゲームオブジェクトに貼り付けて使用します。
以下の手順で、ゲームオブジェクトを作成し、スクリプトを貼り付けてください。
  1. メニューより[Game Object]->[Create Empty]を選び、最もベーシックなゲームオブジェクトを作成してください。
  2. 「Hierarchyビュー」で作成した「Game Object」を選択しておきます。
  3. 「Projectビュー」で右クリックし「C# Script」作成してください。
    ファイル名を「LoadText」に変更してください。
  4. LoadText.csを「Hierarchyビュー」上の「Game Object」へドラッグアンドドロップし、Game Objectに貼り付けてください。

    fmpu_qstart_game_attach_mini.png
    Game Objectにスクリプトを貼り付け

(4) スクリプティング

MonoDevelopを起動し、LoadText.csを次のように編集してください。

using System.Collections;
using System.IO;
using System.Text;
public class LoadText : MonoBehaviour {
private string loadedText;
private CriFsBinder binder = null;
private uint bindId = 0;
// Called when the object becomes enabled and active
void OnEnable()
{
// Create a binder
this.binder = new CriFsBinder();
}
// Use this for initialization
IEnumerator Start () {
// Bind CPK file in StreamingAssets
CriFsBindRequest bind_request = CriFsUtility.BindCpk(
this.binder, CriWare.streamingAssetsPath + "/sample.cpk");
// Wait until end of binding
yield return bind_request.WaitForDone(this);
if (bind_request.error != null) {
yield break;
}
else {
// Store bind ID
this.bindId = bind_request.bindId;
}
// Load text data in CPK file
CriFsLoadFileRequest load_request
= CriFsUtility.LoadFile(this.binder, "sample_text.txt");
// Wait unitl end of loading
yield return load_request.WaitForDone(this);
if (load_request.error != null) {
yield break;
}
// Convert loaded data to text
Encoding enc = Encoding.GetEncoding("utf-8");
this.loadedText = enc.GetString(load_request.bytes);
}
// Update is called once per frame
void Update () {
}
// Display loaded text
void OnGUI() {
// Check whether the text has been loaded
if (this.loadedText == null) {
return;
}
// Draw the loaded text
GUI.Label(new Rect(0, 0, Screen.width, Screen.height), this.loadedText);
}
// Called when the object becomes disabled or inactive
void OnDisable() {
// Upbind CPK
if (this.bindId > 0) {
CriFsBinder.Unbind(this.bindId);
this.bindId = 0;
}
// Destroy binder
this.binder.Dispose();
this.binder = null;
}
}


スクリプトの内容

パッキングファイル「sample.cpk」に格納されているテキストファイル「sample_text.txt」を読み込み、テキスト内容を表示します。

スクリプトのフロー

このスクリプトでは、スクリプト起動にCPKファイルの準備とテキストファイルの読み込みを行います。
その後、読み込んだテキスト内容をラベルに表示します。

スクリプトの解説

[1] バインダの生成
CPKファイルからファイルを読み込むための 「バインダ」 を生成します。
バインダは仮想的なドライブあるいはデバイスのようなものです。
バインドすることにより、バインダを経由して、CPKファイル内のファイル(コンテンツファイル)にアクセスできるようになります。
バインダの生成はOnEnable関数で行います。

[2] CPKファイルのバインド
CriWare.CriFsUtility::BindCpk 関数により、CPKファイルをバインダに登録します。
この関数は即時復帰関数ですので、処理が完了するまで待つ必要があります。
yield ステートメントで完了待ちを行っています。

[備考]
通常ファイルにアクセスする場合は、CPKファイルにパッキングする必要はありません。
また、スクリプトでのバインドも必要ありません。

[3] テキストファイルのロード
CriWare.CriFsUtility::LoadFile 関数でファイル読み込みを行います。
この関数も即時復帰関数ですので、処理が完了するまで待つ必要があります。
yield ステートメントで完了待ちを行っています。

[4] テキストデータへの変換
ファイルの読み込みが終わったら、テキストデータへの変換を行います。

[5] テキストの表示
読み込んだテキスト内容をラベルに表示します。
OnGUI関数で処理を行います。

[6] バインダの破棄
OnDisable関数で、CPKファイルのバインダへの登録解除(アンバインド)とバインダの破棄を行います。

スクリプトの実行画面

Unityのプレイボタンをクリックしてゲームを実行すると、次のような画面になります。

fmpu_qstart_game_run_mini.png
ゲームの実行画面