Include additional files in a build
Use the StreamingAssets folder to include additional files in a build.
Read time 4 minutesLast updated 21 days ago
StreamingAssetsStreamingAssetsExample usages include:
- Configuration files in JSON, XML, SQLite, or other formats.
- Video files, for example movie files on iOS devices.
- Files required by plug-ins.
- AssetBundles (described below).
The folder must be in the root of the folder at . The name is case sensitive and must be 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.
StreamingAssetsAssetsAssets/StreamingAssetsStreamingAssetsAccessing streaming assets
The location of the folder in your deployed application varies between platforms. To retrieve the path to the folder reliably, use the property because it always points to the correct location on the current host platform.
StreamingAssetsStreamingAssetsApplication.streamingAssetsPathOn most platforms is a directory accessible using regular file system APIs.
Application.streamingAssetsPathOn Android and the Web platform, it's impossible to access the streaming asset files directly via file system APIs because these platforms return a URL. Use the class to access the content instead.
UnityWebRequestThe following example loads a file from the folder:
StreamingAssetsusing UnityEngine;using UnityEngine.Networking;using System.Collections;using System;public class LoadStreamingAssets : MonoBehaviour{ void Start() { // Pass the specific filename and the callback method StartCoroutine(LoadFile("config.json", OnFileLoaded)); } // This callback receives the raw string data once the coroutine finishes void OnFileLoaded(string loadedText) { if (string.IsNullOrEmpty(loadedText)) { Debug.LogError("File data was empty or failed to load."); return; } // The data is now safely out of the coroutine. // You can parse it here (e.g., JsonUtility, XML, custom parsing) Debug.Log("File loaded successfully: " + loadedText); } IEnumerator LoadFile(string fileName, Action<string> callback) { string fileContent = ""; string filePath = System.IO.Path.Combine(Application.streamingAssetsPath, fileName); 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) { fileContent = request.downloadHandler.text; } else { Debug.LogError($"Failed to load StreamingAsset: {request.error}"); } } else { // Regular file path on most platforms and in Editor if (System.IO.File.Exists(filePath)) { fileContent = System.IO.File.ReadAllText(filePath); } else { Debug.LogError($"File not found at: {filePath}"); } } // Send the loaded content back to the caller callback?.Invoke(fileContent); }}
StreamingAssets folder limitations
- At runtime the location is read-only and you can't modify or write new files to it. To write files, you can use
StreamingAssetsinstead.Application.persistentDataPath - Don't put Unity files (such as ,
.unity, and.prefab) into the.assetfolder. These file types must be processed by a Player or AssetBundle build to be loadable at runtime.StreamingAssets - and script files located in the
.dllfolder aren't included during script compilation.StreamingAssets
AssetBundles and the StreamingAssets folder
The folder is useful if you intend to distribute AssetBundles directly in the Player installation, rather than downloading them on-demand.
StreamingAssetsTo do this:
- Build the AssetBundles to an output path inside . Note: The
Assets/StreamingAssetsfiles generated alongside the AssetBundle files aren't required in the runtime and can be removed. For more information, refer to AssetBundles file format..manifest - Build the Player. The AssetBundles are included in the platform-specific output.
- Write loading code that uses the to determine the path to the AssetBundles. Depending on the platform, you can load them as a local file path, or with
Application.streamingAssetsPath. 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.UnityWebRequestAssetBundle
The Addressables package uses this mechanism automatically for local content.
Alternatively, you can host AssetBundles and Addressables on a remote server and downloaded them on-demand rather than using the 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.
StreamingAssets