CRIWARE Unity Plugin Manual  Last Updated: 2024-07-12
将数据植入游戏
这个部分描述了使用FileMajik PRO加载文件的过程。
我们将创建一个脚本,使"打包文件加载文本文件,并显示其内容。"
我们将参照以下步骤:

(1) 创建一个新的Unity项目并导入插件安装包

首先,运行文件加载脚本需要有一些准备。
请参照CRI ADX Quick Start(快速启动)部分的说明,创建一个新的Unity项目,并将插件安装包导入项目中。
请将project(项目)命名为 "TutorialFs" 以及场景命名为 "NewScene"

(2) 复制文件以加载

(2-1) Preparing the files
其次,让我们来准备即将从脚本中载入的文件。
我们将使用sample.cpk,此为一个FileMajik PRO的范例CPK文件。
以下图片显示了该文件的位置。

范例文件位置
  * cri

  \ * unity

    \ * samples

      \ * crifilesystem

        \ * basic

          \ * Assets

            \ * StreamingAssets

              \ * sample.cpk

 

 

 

FileMajik PRO的范例

 

 

 

打包文件

 

sample.cpk打包文件含有以下文件:

sample.cpk
- criware.png 图片文件 (CRIWARE logo)
- sample_image1.png 图片文件 1
- sample_image2.png 图片文件 2
- sample_text.txt 文本文件

(2-2) 将文件复制至StreamingAssets
你必须把所有即将从脚本中载入的文件,复制至Unity项目里Assets文件夹的子文件夹,StreamingAssets文件夹中。
将sample.cpk复制至StreamingAssets子文件夹。

TutorialFs Unity项目的资源文件夹的结构
  * TutorialFs

  \ * Assets

    o * Editor

    o * Gizmos

    o * Plugins

    \ * StreamingAssets

      \ * sample.cpk

 

资源文件夹

 

 

CRIWARE Unity 插件

StreamingAssets 文件夹

打包文件

 

(3) 将脚本添加至游戏对象

CRI ADX 和 CRI Sofdec 都提供了专门的组件,然而FileMajik PRO并不提供。因此,你必须添加一个加载文件至游戏对象的脚本。
请参照以下步骤来创建游戏对象并添加脚本。
  1. 请从目录中选择 Game Object -> Create Empty 来创建最基础的游戏对象。
  2. 在Hierarchy view(层次结构视图)中,请选择刚才创建的游戏对象。
  3. 在"Project view"中右键,以创建一个 C::脚本。
    将脚本文件重命名为 "LoadText"。
  4. 将 LoadText.cs 拖放至Hierarchy view中的游戏对象,以添加至游戏对象。

    fmpu_qstart_game_attach_mini.png
    添加脚本至游戏对象

(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;
// 当对象被启动或激活时即可调用
void OnEnable()
{
// Create a binder
this.binder = new CriFsBinder();
}
// 将这个用作初始化
IEnumerator Start () {
// 绑定StreamingAssets中的CPK文件
CriFsBindRequest bind_request = CriFsUtility.BindCpk(
this.binder, CriWare.streamingAssetsPath + "/sample.cpk");
// 等待至绑定结束
yield return bind_request.WaitForDone(this);
if (bind_request.error != null) {
yield break;
}
else {
// 储存 bind ID
this.bindId = bind_request.bindId;
}
// 加载CPK文件中的文本文件
CriFsLoadFileRequest load_request
= CriFsUtility.LoadFile(this.binder, "sample_text.txt");
// 等待至加载结束
yield return load_request.WaitForDone(this);
if (load_request.error != null) {
yield break;
}
// 将载入的数据转换为文字
Encoding enc = Encoding.GetEncoding("utf-8");
this.loadedText = enc.GetString(load_request.bytes);
}
// 每帧将会进行一次更新
void Update () {
}
// 显示载入的文本
void OnGUI() {
// 确认文本是否已载入
if (this.loadedText == null) {
return;
}
// 绘制载入的文本
GUI.Label(new Rect(0, 0, Screen.width, Screen.height), this.loadedText);
}
// 当对象被关闭或闲置时即可调用
void OnDisable() {
// 解除CPK绑定
if (this.bindId > 0) {
CriFsBinder.Unbind(this.bindId);
this.bindId = 0;
}
// 销毁绑定器
this.binder.Dispose();
this.binder = null;
}
}

脚本函数

脚本可以加载打包文件 sample.cpk 中含有的文本文件 sample_text.txt 并显示其内容。

脚本流程

启动脚本后,脚本将准备CPK文件并加载文本文件。
随后它将在标签上显示载入的文本。以下为不同的步骤:

脚本描述

[1] 创建绑定器
为了从CPK文件中加载文件,请创建 "binder(绑定器)"
绑定器与虚拟驱动或设备相似。
绑定文件可以让你使用绑定器来访问CPK文件中的文件 (content files(内容文件))。
请使用 OnEnable 函数来创建绑定器。

[2] 绑定CPK文件
请使用 CriFsUtility::BindCpk 函数,以将CPK文件与绑定器注册。
该函数为无阻塞函数,因此你必须等待其过程完成。
yield语句将等待完成。

[注意]
你无需将单独文件打包至CPK文件来访问它。
你同样不需要在脚本中绑定。

[3] 加载文本文件
请使用 CriFsUtility::LoadFile 函数,以加载文件。
该函数同样为无阻塞函数,因此你必须等待其过程完成。
同样的,yield语句将等待完成。

[4] 将文件转换至文本数据
载入文件后,该文件将转换至文本数据。

[5] 显示文本
在OnGUI函数内,我们将在一个标签上显示载入的文本。

[6] 摧毁绑定器
请使用 OnDisable 函数,以解除CPK文件和绑定器的绑定,并将其摧毁。

脚本执行画面

请在Unity中点击 Play 按钮来运行游戏。应用程序将显示以下画面。

fmpu_qstart_game_run_mini.png
游戏启动画面