CRIWARE Unity Plugin Manual  Last Updated: 2024-07-12
[Asset Support] DeployType 的扩展

范例内容

概述


此范例將添加或使用您自己的DeployType。 可以通过按下画面的按钮来播放/停止Cue。

场景信息


中间件 CRI ADX (CRI Atom)
范例 Asset Support 范例
存储位置 CRIWARE/SDK/unity/samples/UnityProject/Assets/CriAssetSamples/Scenes/
场景文件 Scene_07_CustomDeployType.unity
ACB Asset CRIWARE/SDK/unity/samples/UnityProject/Assets/CriAssetSamples/Data/PinballMain.acb


程序说明

通过定义继承ICriAssetImplCreator接口的类,来添加CRI Asset的 Deploy Type的设置
在本范例的DeployType中,Asset内部持有数据,并通过在下载后将其写入缓存,可以进行文件加载。
注意
在本范例使用DeployType时,数据将同时保持在Asset和缓存之中。
建议尽可能使用CRI Addressables,或通过您自己的DeployType下载Non-Asset CRI数据。

ICriAssetImpl 的执行

CRI Asset实际持有数据的方式通过 ICriAssetImpl 接口抽象化。
CRI Asset实例通过实现 ICriMemoryAssetImpl 或 ICriFileAssetImpl 的继承类,
每个Asset都可以以不同方式表达其与实际数据的关系。

此范例定义了 ICriFileAssetImpl 的继承类。
// 需要设置为Serializable属性以保持Asset內的信息
[System.Serializable]
public class Scene_07_CustomDeployType : ICriFileAssetImpl
{
// 在Asset內序列化后保持数据
[SerializeField, HideInInspector]
byte[] data;
[SerializeField]
string fileName;
public Scene_07_CustomDeployType(byte[] data, string fileName)
{
this.data = data;
this.fileName = fileName;
}
public string Path => System.IO.Path.Combine(CriWare.Common.installCachePath, fileName);
public ulong Offset => 0;
public long Size { get; }
public bool IsReady { get; private set; }
public void OnEnable() {
File.WriteAllBytes(Path, data);
IsReady = true;
#if !UNITY_EDITOR
data = null;
#endif
}
public void OnDisable() => File.Delete(Path);
}
此实现将数据实体作为字节数组保持在Asset中。
在实例化Asset时调用的OnEnable方法中,通过将数据写入缓存文件夹,
可以将数据作为文件加载。
因此,虽然不使用Addressables也可以在 AssetBundle 包含串流数据,
但数据将同时保存在Asset内和缓存中。

ICriAssetImplCreator 的执行

对于导入CRI Asset时将Asset与Non-Asset CRI数据关联的处理,通过 ICriAssetImplCreator 接口进行了抽象化。
使用 ICriAssetImplCreator 的继承类中的 CreateAssetImpl 方法处理Non-Asset CRI数据。
CreateAssetImpl 返回 ICriFileAssetImpl 接口实例。
此范例会返回 Scene_07_CustomDeployType 类的实例。
public ICriAssetImpl CreateAssetImpl(AssetImportContext ctx)
{
// 读取所有对象文件的内容
var data = File.ReadAllBytes(ctx.assetPath);
// 生成用于写入缓存时所使用的路径的哈希
var md5 = MD5.Create();
var hash = md5.ComputeHash(data);
md5.Clear();
// 生成并返回包含目标数据的 Scene_07_CustomDeployType 实例
return new Scene_07_CustomDeployType(data, BitConverter.ToString(hash).ToLower().Replace("-", ""));
}
请将 ICriAssetImplCreator 的继承类定义为编辑器脚本。
此范例通过 UNITY_EDITOR 宏从运行时中排除。

此外,也可以使用 CriDisplayName 属性在导入器上指定显示名称。
[System.Serializable, CriDisplayName("CustomDeploySample")]