【Unity实战|热更】Addressable读取SO文件报错解决

情景再现

假定你有一个Unity工程,使用了HybridCLR和Addressable,SO文件存放在Addressable中。热更加载后进入游戏场景出现了SO文件读取报错:

UnityEngine.AddressableAssets.InvalidKeyException: Exception of type 'UnityEngine.AddressableAssets.InvalidKeyException' was thrown. No Asset found with for Key=Inventory Model Database. Key exists as Type=System.Object, which is not assignable from the requested Type=InventorySystem.Models.InventoryModelDatabase
UnityEngine.AddressableAssets.Addressables:LoadAssetAsync(Object)

可能原因

读取SO文件时,文件绑定的脚本并没有成功还原出来。见官方文档

解决办法

加载SO文件的代码时不要声明具体的类型,改用System.Object,成功后进行强转。

Before:

cs 复制代码
Addressables.LoadAssetAsync<InventoryModelDatabase>("Inventory Model Database").Completed += handle =>
			{
				if (handle.Status == AsyncOperationStatus.Succeeded)
				{
					_inventoryModelDatabase = handle.Result;
					Debug.Log($"[{GetType()}] Inventory Model Database loaded!");
				}
				else
					Debug.LogError($"[{GetType()}] Failed to load Inventory Model Database!");
			};

After:

cs 复制代码
Addressables.LoadAssetAsync<System.Object>("Inventory Model Database").Completed += handle =>
			{
				if (handle.Status == AsyncOperationStatus.Succeeded)
				{
					_inventoryModelDatabase = handle.Result as InventoryModelDatabase;
					Debug.Log($"[{GetType()}] Inventory Model Database loaded!");
				}
				else
					Debug.LogError($"[{GetType()}] Failed to load Inventory Model Database!");
			};

问题解决。

相关推荐
Xing201715 小时前
unity打包ios Xcode问题记录
unity·游戏引擎
学游戏开发的19 小时前
UE求职Demo开发日志#8 强化前置条件完善,给物品加图标
游戏引擎
墨笺染尘缘1 天前
Unity——鼠标是否在某个圆形Image范围内
unity·c#·游戏引擎
Thomas_YXQ1 天前
Unity3D项目开发中的资源加密详解
游戏·3d·unity·unity3d·游戏开发
qq_428639612 天前
虚幻基础-1:cpu挑选(14600kf)
游戏引擎·虚幻
杀死一只知更鸟debug2 天前
Unity自学之旅05
unity·游戏引擎
qq_5982117572 天前
Unity编辑拓展显示自定义类型
unity·游戏引擎
你疯了抱抱我2 天前
【VRChat · 改模】Unity2019、2022的版本选择哪个如何决策,功能有何区别;
unity·vr·vrchat
东方猫2 天前
UE虚幻引擎No Google Play Store Key:No OBB found报错如何处理?
游戏引擎·虚幻
Thomas_YXQ2 天前
Unity3D 动态骨骼性能优化详解
开发语言·网络·游戏·unity·性能优化·unity3d