Version: 6000.3
语言: 中文
目标平台的构建路径要求
自定义播放器

在构建中包含其他文件

StreamingAssets是一个保留文件夹,可用于使文件直接可供播放器构建,并绕过标准项目构建过程。标准构建过程序列化场景场景包含游戏的环境和菜单。将每个唯一的场景文件视为一个唯一的关卡。在每个场景中,您可以放置环境、障碍物和装饰,实质上是分部分设计和构建游戏。更多信息
请参阅术语表
和资源转换为生成的播放器中的二进制文件。StreamingAssets允许您添加已采用目标平台正确格式的文件,并且您的应用程序可以直接加载这些文件。

示例用法包括:

  • JSON、XML、SQLite 或其他格式的配置文件。
  • 视频文件,例如 iOS 设备上的电影文件。
  • 所需的文件插件Unity 外部创建的一组代码,用于在 Unity 中创建功能。可以在 Unity 中使用两种类型的插件:托管插件(使用 Visual Studio 等工具创建的托管 .NET 程序集)和本机插件(特定于平台的本机代码库)。详细信息
    请参阅术语表
    .
  • AssetBundles(如下所述)。

StreamingAssets文件夹必须位于Assets文件夹位于Assets/StreamingAssets. 名称区分大小写,必须是StreamingAssets完全。 此目录中的任何文件都会复制到播放器输出中,而无需修改。当部署到目标设备时,文件将复制到适合平台的位置。

提示:为了避免 Unity 自动导入每个文件的开销StreamingAssets,您可以通过调用AddAdditionalPathToStreamingAssets从实现BuildPlayerProcessor.PrepareForBuild. 例如,如果您的内容很大且生成,则此功能非常有用。

访问流媒体资产

的位置StreamingAssets文件夹因平台而异。要检索StreamingAssets文件夹,请使用Application.streamingAssetsPath属性,因为它始终指向当前主机平台上的正确位置。

在大多数平台上Application.streamingAssetsPath是一个可以使用常规文件系统 API 访问的目录。

在 Android 和 Web 平台上,无法通过文件系统 API 直接访问流式资产文件,因为这些平台会返回一个 URL。使用UnityWebRequest类来访问内容。

以下示例从StreamingAssets文件夹:

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 文件夹限制

  • 在运行时,StreamingAssetslocation 是只读的,您无法修改或向其写入新文件。要写入文件,您可以使用Application.persistentDataPath相反。
  • 不要将 Unity 文件(.unity、.prefab、.asset 等)放入StreamingAssets文件夹。 这些文件类型必须由播放器或资产包构建处理,才能在运行时加载。
  • .dll和脚本文件位于StreamingAssets文件夹在脚本编译期间不包括在内。

AssetBundles 和 StreamingAssets 文件夹

StreamingAssets文件夹很有用,如果您打算分发AssetBundles直接在 Player 安装中,而不是按需下载。

为此,请执行以下作:

  1. AssetBundle构建到内部的输出路径Assets/StreamingAssets. 注意:运行时不需要与 AssetBundle 文件一起生成的 .manifest 文件,可以删除。有关更多信息,请参阅 AssetBundles 文件格式
  2. 构建播放器。AssetBundle 包含在特定于平台的输出中。
  3. 编写使用Application.streamingAssetsPath以确定 AssetBundle 的路径。根据平台的不同,您可以将它们作为本地文件路径加载,也可以使用 UnityWebRequestAssetBundle 加载。注意:在 Android 上,无需缓存 AssetBundle 或执行 CRC 检查,因为该文件已存在于本地存储中。

Addressables 包会自动对本地内容使用此机制。

或者,AssetBundle 和 Addressables 可以托管在远程服务器上并按需下载,而不是使用StreamingAssets文件夹。对于内容较大或经常更新的情况,或者您希望在想要更改或添加新内容时避免发布新 Player 版本的开销,这是首选。

其他资源

目标平台的构建路径要求
自定义播放器