How to load resources asynchronously

I would like to load some resources while the player is playing. I have attempted calling Resources.Load from a thread other than the main thread and so far it seems to work.

Can somebody confirm that Resource.Load is thread safe?

Is there any other approach to load resources asynchronously?

I have considered using Application.LoadLevelAdditiveAsync but it does not seem to work inside the editor, since it throws the error: m_ThreadCheck && !Thread::EqualsCurrentThreadID(m_ThreadID)

The best way to asynchronously load extra assets is by using assetbundles.

For a good example of asynchronously loaded assetbundles, check out:

None of the Unity API is threadsafe. You can use threads, but must make sure to only touch the UnityAPI from the main thread.

Unity 4.5.3 added this featrue. So you can just call

As far as I can see Resources.Load is safe.

Hope that helps.


Just tested it with 20 threads accessing Resources.Load on the same object with a sleep of 1 millisecond each time - It seems to be very thread safe

Debug.Log on the other hand not so much at that speed (Though that amount of accesses is a little silly with file IO on the same file)