Follow

How do I delete AssetBundles from the cache?

Symptoms 

  • I cannot download new AssetBundles.
  • I want to update or remove an old version of my AssetBundles.

Cause

You may be running out of space in your device (this issue was fixed in 5.3.4p2 and old AssetBundles are now deleted if there is no available space). Alternatively there may be problems with the downloaded AssetBundles.

Resolution

Solution #1:

  • Use Caching.CleanCache() to delete all AssetBundles that have been cached by the current application.
  • Caching.CleanCache() returns a bool depending if it was able to complete the operation or not:

    public static void CleanCache ()
    {
    if (Caching.CleanCache ())
    {
    Debug.Log("Successfully cleaned the cache.");
    }
    else
    {
    Debug.Log("Cache is being used.");
    }

Solution #2:

  • Use Caching.expirationDelay to set the number of seconds that an AssetBundle may remain unused in the cache before it is automatically deleted. When a bundle is downloaded, the timestamp is stored for that given bundle.
  • To set the expirationDelay property, there needs to be an entry for your application in the Cache folder. That setting is stored in a file in your applications's root Cache folder. If the folder for your application does not exist, the file cannot be written. For that entry to exist you need to first request a bundle. So in order to set the expirationDelay, first request at least one bundle which will create the folder for your app's bundles. You could use any bundle just to make sure the folder exists before you call that property.

Both solutions can be used individually, or at the same time.

More Information

http://docs.unity3d.com/ScriptReference/Caching.html

http://docs.unity3d.com/ScriptReference/Caching.CleanCache.html

http://docs.unity3d.com/ScriptReference/Caching-expirationDelay.html

Was this article helpful?
0 out of 0 found this helpful
Have more questions? Submit a request

2 Comments

  • 0
    Avatar
    Abhay Raghuwanshi

    Hello,

    We have a game in the market and we have been using WWW.LoadFromCacheOrDownload to download our asset bundles. Now the application data size is growing and we want to control it like the asset bundles not used since X time, should gets automatically deleted, so we tried to set Caching.expirationDelay (for testing we set it to 2 hours but we want it to 7 days in production), but Caching.expirationDelay seems not working at all.
    1. It doesn't remove the asset bundle older than Caching.expirationDelay time set by us.
    2. When we check the value of Caching.expirationDelay after each app restart, it always stays at "12960000"

    We want to clear out old assets (not used since 7 days) and also want to apply the same caching timeout for future assets. Can you suggest whats wrong being done by us!

    We are using unity 5.3.4p1
    And tested on Android phone and unity ediror.

  • 0
    Avatar
    Urs Clement

    Shouldn't it be Caching.ClearCache() ?

    public static void CleanCache ()
    {
    if (Caching.ClearCache ())
    {
    Debug.Log("Successfully cleaned the cache.");
    }
    else
    {
    Debug.Log("Cache is being used.");
    }
Please sign in to leave a comment.