StreamingAssets
is a reserved folder that you can use to make files available to a Player build directly and bypass the standard project build process. The standard build process serializes scenesA Scene contains the environments and menus of your game. Think of each unique Scene file as a unique level. In each Scene, you place your environments, obstacles, and decorations, essentially designing and building your game in pieces. More info
See in Glossary and assets into binary files inside the generated Player. StreamingAssets
allows you to add files that are already in the correct format for the target platform and that your application can load directly.
Example usages include:
The StreamingAssets
folder must be in the root of the Assets
folder at Assets/StreamingAssets
. The name is case sensitive and must be StreamingAssets
exactly. Any files in this directory are copied without modification into the Player output. When deployed to a target device the files are copied to a location appropriate for the platform.
Tip: To avoid the overhead of Unity automatically importing every file from StreamingAssets
, you can add content from other directories during the build process by calling AddAdditionalPathToStreamingAssets
from a callback that implements BuildPlayerProcessor.PrepareForBuild
. This is useful if, for example, your content is large and generated.
The location of the StreamingAssets
folder in your deployed application varies between platforms. To retrieve the path to the StreamingAssets
folder reliably, use the Application.streamingAssetsPath
property because it always points to the correct location on the current host platform.
On most platforms Application.streamingAssetsPath
is a directory accessible using regular file system APIs.
On Android and the Web platform, it’s not possible to access the streaming asset files directly via file system APIs because these platforms return a URL. Use the UnityWebRequest
class to access the content instead.
The following example loads a file from the StreamingAssets
folder:
using UnityEngine;
using UnityEngine.Networking;
using System.Collections;
// Example of loading a file from the StreamingAssets folder
// This assumes that a file "config.json" has been placed in the Assets/StreamingAssets folder
public class LoadStreamingAssets : MonoBehaviour
{
void Start()
{
StartCoroutine(LoadFile());
}
IEnumerator LoadFile()
{
string jsonData = "";
string filePath = System.IO.Path.Combine(Application.streamingAssetsPath, "config.json");
if (filePath.StartsWith("jar") || filePath.StartsWith("http"))
{
// Special case to access StreamingAsset content on Android and Web
UnityWebRequest request = UnityWebRequest.Get(filePath);
yield return request.SendWebRequest();
if (request.result == UnityWebRequest.Result.Success)
{
jsonData = request.downloadHandler.text;
}
}
else
{
// This is a regular file path on most platforms and in playmode of the editor
jsonData = System.IO.File.ReadAllText(filePath);
}
Debug.Log("Loaded JSON Data: " + jsonData);
}
}
StreamingAssets
location is read-only and you can’t modify or write new files to it. To write files, you can use Application.persistentDataPath
instead.StreamingAssets
folder. These file types must be processed by a Player or AssetBundle build in order to be loadable at runtime.StreamingAssets
folder aren’t included during script compilation.The StreamingAssets
folder is useful if you intend to distribute AssetBundles
directly in the Player installation, rather than downloading them on-demand.
To do this:
Assets/StreamingAssets
. Note: the .manifest files generated alongside the AssetBundle files are not required in the runtime and can be removed. For more information, refer to Output of the Build.Application.streamingAssetsPath
to determine the path to the AssetBundles. Depending on the platform, you can load them as a local file path, or with UnityWebRequestAssetBundle. Note: On Android it’s not necessary to cache the AssetBundle or to perform CRC checks, because the file is already present on local storage.The Addressables package uses this mechanism automatically for local content.
Alternatively, AssetBundles and Addressables can be hosted on a remote server and downloaded on-demand rather than using the StreamingAssets
folder. This is preferred for situations where the content is large, or frequently updated, or where you want to avoid the overhead of releasing new Player builds when you want to change or add new content.
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.