CRIWARE Unity Plugin Manual
Last Updated: 2024-07-12
文件加载的方法和种类
CRI文件系统库
(FileMajik PRO 运行时库)中含有两种可用的文件加载方法。分别为
"coroutine method(协同程序方法)"
和
"regular method(标准方法)"
。
根据不同的内容,你可以使用两者之一的方法。
协同程序方法 ( CriFsUtility 类)
标准方法 ( CriFsLoader 类)
协同程序方法 ( CriFsUtility 类)
该方法使用了协同程序,让文件在后台异步载入。
Yield语句用于等待文件加载的完成。
应用程序提供了
CriWare.CriFsUtility
应用类来帮助文件加载和绑定。
它能自动创建并处理CRI文件系统中的基础对象,即绑定器 (
CriWare.CriFsBinder
) 和加载器 (
CriWare.CriFsLoader
) 。
因此,你可以编写简单易懂的代码。
过程流程
(1) 创建并启动协同程序
应用程序所提供的文件加载功能将以协同程序的形式启动。
StartCoroutine(this.AppLoadFunction(path));
(2) 发出文件加载请求
当呼叫
CriWare.CriFsUtility.LoadFile
功能时,程序将发出文件加载请求,文件将在后台异步载入。
请求对象由该功能返回。
CriFsLoadFileRequest request = CriFsUtility.LoadFile(path);
(3) 等待文件加载完成
Yield语句用于等待文件加载的完成。
如果错误为零,那么文件便已成功载入。
yield
return
request.WaitForDone(
this
);
if
(request.error == null) {
// 文件已成功载入
// 从请求对象中获取缓冲并处理数据
...
}
(4) 从请求对象中获取缓冲并处理数据
举例,一个文本文件的载入数据(存储于request.bytes)将使用指定代码转换为字符串。
Encoding enc = Encoding.GetEncoding(
"utf-8"
);
this.loadedText = enc.GetString(request.bytes);
标准方法 ( CriFsLoader 类)
这是一个在FileMajik PRO中用于游戏机的文件载入方法。它在帧被更新的时候使用轮询,使其确认加载是否已经完成。
在这个方法中,
CriWare.CriFsLoader
种类用于加载文件。
它需要一个绑定文件以及该绑定文件的路径。
"绑定器"
(
CriWare.CriFsBinder
) 和虚拟驱动或设备相似。
你可以使用绑定器(绑定)来注册文件,目录和CPK文件。
文件通过绑定器,使用
"加载器"
(
CriWare.CriFsLoader
) 对象进行加载。
过程流程
(1) 创建绑定器
首先,创建一个绑定器。
请注意,如需加载一个单独的文件,你不需要将其分配至绑定器。
CriFsBinder binder =
new
CriFsBinder();
请分别使用
CriWare.CriFsUtility.BindDirectory
和 CriFsUtility.BindCpk 将目录和CPK文件分配至绑定器。
(2) 获取文件大小
获取目标文件的大小。
int
file_size = (int)binder.GetFileSize(path);
(3) 固定文件加载的缓冲区
固定该文件大小的缓冲区。
byte[] buffer =
new
byte[file_size];
(4) 创建加载器
创建一个加载器对象 (
CriWare.CriFsLoader
) 来加载文件。
你可以使用一个加载器来加载多个文件。
你同样可以为每个文件提供一个加载器,以同时加载多个文件。
CriFsLoader loader =
new
CriFsLoader();
(5) 发出文件加载请求
呼叫
CriWare.CriFsLoader.Load
功能。一个文件加载请求已发出。
请将第一个参数(binder)设置为null来加载一个单独的文件。
loader.Load(null, path, 0, file_size, buffer);
(6) 确认文件加载是否完成
我们将在每一帧都使用
CriWare.CriFsLoader.GetStatus
功能来获取加载器的当前状态,以确认加载是否完成。
当加载完成时,加载器的状态会变成 CriFsLoader.Status.Complete 。
// 在每帧执行
public
void
Update()
{
// 加载是否完成?
if
(loader.GetStatus() == CriFsLoader.Status.Complete) {
// 处理载入数据
...
}
}
加载器状态的变化如下所述。
加载器状态的变化
(7) 处理载入文件
以下是一些处理在缓冲区载入的文件的范例代码。
Encoding enc = Encoding.GetEncoding(
"utf-8"
);
this.loadedText = enc.GetString(buffer);
loader.Stop();
[注意]
如需实际代码,请参照 "
[CriFs] 加载文件
" 范例。
Copyright (c) CRI Middleware Co., Ltd. 1.8.10