CRIWARE Unity Plugin Manual  Last Updated: 2024-07-12
常见问题解答/故障排除
关于Asset Support Add-on的问题,请确认:

CI构建失败

出现 DllNotFoundException 或 entryPointNotFoundException 时

在Linux上出现 DllNotFoundException 时,请参照 在Linux上运行时出现 DllNotFoundException

使用上述方法后仍然无法解决时,请确认插件库的执行权限。
请确认 Assets/CRIMW/CriWare/Runtime/Platforms/ 的运行时库于您的CI环境中是否可以执行。
特别是,在执行构建时,从版本控制系统获取Unity项目可能会导致缺乏执行权限的问题。
因此,请在获取项目后,启动Unity前,更改库的权限。

此外,如果 CriManaUsmAssetImporter 导致异常,请通过禁用USM Asset的 [Import Movie Info] 来避免DLL执行权限要求。
请注意,禁用 [Import Movie Info] 时,CriManaUsmAsset.MovieInfo 可能变为无效值。

构建设备的内存不足时

在旧的CRI Addressables版本中构建Bundle时,会自动大量加载项目中的资产,并导致内存耗尽的问题。
此问题已在CRI Addressables 0.6.05中修复。如果您使用的版本低于此版本时,请尝试最新版本。

无法播放使用了CRI Addressables的Asset

请确认以下各项:

是否直接引用内置场景

在CRI Addressables管理的CRI Asset必须通过Addressables的API进行加载
  • Addressables.LoadAssetAsync
如果从内置场景或内置场景引用的Prefab引用CRI Asset, 由于变为不存在与CRI Asset对应的Non-Asset数据的状态,将无法加载数据。

另外,如果从内置场景中引用了由Addressables管理的Asset时,会多重增加相同数据的复写, 因此不建议将其作为Addressables Asset System的使用方法。
可以使用Addressables Analyze工具来确认是否存在此类不正常的引用。

确认是否引用自Resource文件夹

同样,加载了作为Resource文件夹中的Asset或其依赖目标时,也无法正常播放。
因此建议使用Addressables(而不是Resource文件夹)进行管理或加载。

需要从脚本指定DeployType时

可以通过操作 CriWare.Assets.CriAssetImporter.implementation 来更改 DeployType。
以下的示例中自动将DeployType设置为AssetPostprocessor。
public class MyCriAssetPostprocessor : UnityEditor.AssetPostprocessor
{
void OnPreprocessAsset()
{
CriAssetImporter importer = assetImporter as CriAssetImporter;
if (importer == null) return; // 非CRI Asset时则返回
// 此示例中根据扩展指定不同的DeployType
var extension = System.IO.Path.GetExtension(assetImporter.assetPath);
if (extension == ".acf" || extension == ".acb") // OnMemory
importer.implementation = new CriSerializedBytesAssetImplCreator();
if(extension ==".awb" || extension == ".usm") // Addressables
importer.implementation = new CriCustomAddressableAssetImplCreator(CriAddressablesSetting.Instance.Remote);
}
}
CriWare.Assets.CriAssetImporter.implementation 指定继承 CriWare.Assets.ICriAssetImplCreator 的实例。
在CRI Assets/CRI Addressables的标准实现中的三种类型如下。
实际上DeployType是在 CriWare.Assets.CriAssetImporter.implementation 的更改后,重新导入Asset时被反映。
使用AssetPostprocessor执行操作时,会立即执行重新导入。需要在某个时机反映时,请使用以下代码重新导入。
EditorUtility.SetDirty(importer);
importer.SaveAndReimport();

在Addressables注册的Asset的类型

使用CRI Addressables时,您可以选择在或不在Addressable Group中注册CRI Asset。

指定CRI Asset的地址后加载时

在Addressables管理下加载单个CRI Asset时,请将其直接注册到任意的AddressableGroup中。

加载依赖CRI Asset的Asset时

从Prefab或场景中引用的CRI Asset则无须在Addressables进行注册。
将参照源的场景或Asset注册到AddressableGroup中,可以在已加载参照源Asset时同时加载CRI Asset。

关于AWB Asset

AWB Asset始终引用ACB Asset。
因此,在可以加载ACB Asset的状态下,则无需在Addressables注册AWB Asset。