CRIWARE Unity Plugin Manual  Last Updated: 2025-05-08
[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")]

translated_by_Google.png

THIS SERVICE MAY CONTAIN TRANSLATIONS POWERED BY GOOGLE. GOOGLE DISCLAIMS ALL WARRANTIES RELATED TO THE TRANSLATIONS, EXPRESS OR IMPLIED, INCLUDING ANY WARRANTIES OF ACCURACY, RELIABILITY, AND ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.