AssetBundle的卸载

要点:

        当场景中的object被移除后,Unity不会自动卸载相关Asset

         Asset卸载清理是特定的时刻触发,也可以手动触发

         在合适的时刻卸载AB很重要,否则有可能导致Asset冗余,也有可能导致Asset丢失引用

AssetBundle.Unload(bool)

         卸载AB对象头信息(header information)

         是否卸载通过此AB实例化的Asset

AssetBundle.Unload(true)

          卸载实例化的Asset,如果其中某些Asset被场景引用,则会出现丢失

          通过这种方式,资源卸载最彻底,完全从内存移除

           即使代码中有引用此资源,也会被移除

           使用场景:

            建议大多数时间使用此接口,避免出现Asset冗余

             在场景切换时调用,以清理旧场景的资源

AssetBundle.Unload(false)

             断开AB与其Asset之间的关联(危险)

             并不会卸载其Asset,所以引用不会丢失,同时Asset还会继续占用内存

              由于AB断开了与其Asset之间的关联,所以再次从AB实例化Asset时,并不会直接返回初始化过的Asset,而是重新实例化,这               就出现了冗余,同样的Asset,内存中出现了两份

               使用场景:

                不建议使用

                在场景与代码中移除相关Asset的引用,执行Unload(false),之后在执行Resources.UnloadUnusedAssets。

                执行Unload(false)后,切换场景(non-additively)。

Resources.UnloadUnusedAssets

               卸载不再被引用的Asset

               如果Asset仍被AssetBundle引用,则不会卸载

                如果Asset被场景引用,则不会被卸载

                如果Asset被代码引用,则不会被卸载

                调用消耗较大,一般建议调用前先调用AssetBundle.Unload接口

                在切换场景(非Addtively),引擎会自动调用

    https://docs.unity3d.com/Manual/AssetBundles-Native.html

猜你喜欢

转载自blog.csdn.net/chen4388/article/details/86528034
今日推荐