使用中产生了疑惑,实验了一下
SkeletonDataAsset skeleton = null;
// 自己写的一个类,作用是加载AB包
HttpRequest.Instance.GetAssetBundle(url1, (ab) =>
{
skeleton = ab.LoadAsset<SkeletonDataAsset>("chaifen_SkeletonData");
ab.Unload(false);
Debug.Log(skeleton); // 结果不为空
});
像上面这样Unload(false)
,我的debug出来skeleton不会为空,但是如果Unload(true)
SkeletonDataAsset skeleton = null;
// 自己写的一个类,作用是加载AB包
HttpRequest.Instance.GetAssetBundle(url1, (ab) =>
{
skeleton = ab.LoadAsset<SkeletonDataAsset>("chaifen_SkeletonData");
ab.Unload(true);
Debug.Log(skeleton); // 结果为null
});
所以我的结论是Unload(true)
时,会将从包体内加载出来的临时文件也卸载掉,比如上面的skeleton
,这样我拿到的值一直是空
如果我在卸载之前就使用这个skeleton
,如下
SkeletonDataAsset skeleton = null;
// 自己写的一个类,作用是加载AB包
HttpRequest.Instance.GetAssetBundle(url1, (ab) =>
{
skeleton = ab.LoadAsset<SkeletonDataAsset>("chaifen_SkeletonData");
// 将skeleton用掉
SkeletonGraphic.NewSkeletonGraphicGameObject(skeleton, loading.transform, material);
ab.Unload(true);
Debug.Log(skeleton); // 结果为null
});
这样虽然我的动画能够被创建,但是因为material
和贴图等被卸载掉了,所以动画还能动但是失去了贴图
一般使用Unload(false)
即可,Unload(true)
谨慎使用