序
场景除外的AssetBundle中的资源分为两中类型,GameObject与Asset,GameObject使用GameObject.Destroy进行卸载,Asset使用Resources.Unload(Asset)进行卸载,好,我们来看几个有趣的例子。
事发现场
例子1 卸载资源
//> 代码片段1 在Start中
Package = AssetBundle.LoadFromFile(file);
Texture = Package.LoadAsset<Texture2D>("BG");
//> 代码片段2 在Update中
if (Input.GetKeyDown(KeyCode.U))
{
Resources.UnloadAsset(Texture);
Debug.Log(Texture);
Debug.Log("卸载Texture资源");
}
这乍一看是非常正常的代码,加载了一个资源包,从资源包中加载了一张纹理,然后在按下U键的时候,卸载这张被加载的纹理,好像没什么问题。不过他却没有像预期那样正常工作~
没错,它没被能被卸载~
- 原因:就是Debug.Log(Texture)引起的。如果没有这句代码,这个工作是正常的。
例子2 资源的卸载与激活
//> 代码片段1 在Start中
Package = AssetBundle.LoadFromFile(file);
Texture = Package.LoadAsset<Texture2D>("BG");
//> 代码片段2 在Update中