StreamingAssets is a special directory used for adding files that do not need to be processed by the build system.
The normal way to put content into a Player is for Unity to serialize 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 when it builds the Project. However, you may also want to add additional files that are already in the correct format for the target platform and that your game code will load directly.
Example usages include:
The StreamingAssets folder must be created at the Assets root directory, e.g. Assets/StreamingAssets
. This directory name is case sensitive, so it must be named exactly StreamingAssets
rather than streamingassets
or Streamingassets
.
Unity copies any files placed in that directory verbatim into the Player output. Then, when deployed to a target deviceits contents will be placed in a location appropriate for the platform.
You can also add content from additional directories (outside of Assets/StreamingAssets
) during the build process. This is done by calling the AddAdditionalPathToStreamingAssets method from a callback that implements BuildPlayerProcessor.PrepareForBuild. This is a good way to avoid the overhead of Unity importing each file, for example if your content is large and generated.
To retrieve the folder, use the Application.streamingAssetsPath property. It’s always best to use Application.streamingAssetsPath
to get the location of the StreamingAssets folder, because it always points to the correct location on the platform where the application is running.
The location returned by Application.streamingAssetsPath
varies per platform:
Application.dataPath + "/StreamingAssets"
.Application.dataPath + "/Resources/Data/StreamingAssets"
.Application.dataPath + "/Raw"
."jar:file://" + Application.dataPath + "!/assets"
.Application.streamingAssetsPath
returns a HTTP URL that points to the StreamingAssets/
path on the web server. For example when running a local development server, the path might look like http://localhost:8000/unity_webgl_build/StreamingAssets/
.Application.streamingAssetsPaths
will point to the Assets/StreamingAssets
directory.On most platforms the streamingAssets
path is a directory that can be accessed using regular file system APIs.
However on Android and the Web platform, it’s not possible to access the streaming asset files directly via file system APIs and because these platforms return a URL. Use the UnityWebRequest class to access the content instead.
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);
}
}
Notes:
streamingAssets
location is read-only. Don’t modify or write new files to that directory. Instead you can use Application.persistentDataPath or another writeable location.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 that are generated alongside the AssetBundle files are not required in the runtime, so they can be removed. See also Output of the Build.Application.streamingAssetsPath
to determine the path to the AssetBundles. Depending on the platform, you would either load them as a local file path, or with UnityWebRequestAssetBundle. Note: On Android it is not necessary to cache the AssetBundle, nor 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 the Internet 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.