范例内容
概述
此范例將添加或使用您自己的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 的继承类。
public class Scene_07_CustomDeployType : ICriFileAssetImpl
{
[SerializeField, HideInInspector]
byte[] data;
[SerializeField]
string fileName;
public Scene_07_CustomDeployType(byte[] data, string fileName)
{
this.data = data;
this.fileName = 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();
return new Scene_07_CustomDeployType(data, BitConverter.ToString(hash).ToLower().Replace("-", ""));
}
- 请将 ICriAssetImplCreator 的继承类定义为编辑器脚本。
此范例通过 UNITY_EDITOR 宏从运行时中排除。
- 此外,也可以使用 CriDisplayName 属性在导入器上指定显示名称。
[
System.Serializable, CriDisplayName(
"CustomDeploySample")]