记录一下开发Unity游戏的资源管理模块时,通过测试得到的一些结论,避免遗忘:
1.从assetbundle里load出来的资源,即使游戏中没有对该资源的引用,不主动调用Resources.UnloadUnusedAssets的话,该资源是不会被释放掉的,指向该资源的弱引用也不会变为空;当调用了Resources.UnloadUnusedAssets和GC.Collect后,弱引用的Target变为空,说明此时资源被释放。
2.Unity加载的assetbundle,即使游戏中没有对该assetbundle的引用,不主动调用assetbundle.Unload(false或true)的话,该assetbundle是不会被释放掉的,指向该assetbundle的弱引用也不会变为空。
3.从assetbundle里load出来的资源,即使资源没有在游戏中被引用,在调用assetbundle.Unload(false)后,该资源的弱引用也不会变为空。但调用assetbundle.Unload(true)会使资源的强弱引用均变空。
4.Unity无法加载同一个AssetBundle两次,第二次加载时会报错;因此如果使用异步的AssetBundle加载,需要注意如果已经有一个加载请求在异步处理了,就不要再申请相同AssetBundle的异步加载了,否则当一个请求处理完成后,剩下的请求协程会报错,assetbundle返回为null;此外,如果在AssetBundle的异步加载完成前申请同步加载,Unity不会在调用同步加载方法时报错,而是之后在异步加载的协程中报错;如果已经加载完成了AssetBundle,再申请异步加载该AssetBundle时,Unity不会在调用异步加载方法时报错,而是之后在异步加载的协程中报错;