示例内容
概述
此示例將添加或使用您自己的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")]
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.