【Unity】Unity中的StreamingAssets文件夹

目录

  • 前言
    • 核心特性
      • 1. 文件保留原始格式
      • 2. 只读访问
      • 3. 平台兼容性
    • 不同平台下的路径
  • 一、使用
    • 1、读写
    • 2、使用UnityWebRequest读取
  • 二、AB读取的特例
  • 三、注意事项

前言

StreamingAssets 文件夹是Unity项目中的一个特殊目录,用于存放需要在运行时访问的资源文件。这个文件夹中的文件会被逐字复制到目标平台的特定位置,并且保持原始格式,不会被引擎进行压缩或编译。

核心特性

1. 文件保留原始格式

  • 不经过处理:Unity 不会修改 StreamingAssets 中的文件
  • 保持原始结构:文件夹结构和文件内容完全保留(比如图片不会被引擎进行纹理压缩)
  • 适用文件类型:JSON、XML、文本、图像、视频、音频、二进制数据等
  • 放置在 StreamingAssets 文件夹中的 .dll 文件 和 脚本不会参与编译;

2. 只读访问

  • 运行时只读:无法在运行时修改 StreamingAssets 中的文件
  • 构建后不可变:文件在构建后成为应用程序的一部分

3. 平台兼容性

  • 全平台支持:支持所有 Unity 平台(PC、移动、WebGL、主机)
  • 路径统一访问:通过 Application.streamingAssetsPath 获取路径

不同平台下的路径

平台路径格式示例
Windows/Mac/Linuxfile://[Application.dataPath]/StreamingAssetsfile://C:/App/Data/StreamingAssets/data.json
Androidjar:file://[Application.dataPath]!/assetsjar:file:///data/app/com.game.apk!/assets/data.json
iOSfile://[Application.dataPath]/Rawfile:///var/mobile/Containers/Data/App/Raw/data.json
WebGL[URL]/StreamingAssetshttp://localhost:8080/StreamingAssets/data.json
通用访问Application.streamingAssetsPath跨平台访问的统一方式

对于android平台:
Application.streamingAssetsPath的详细格式形如:“jar:file:///data/app/包名-XXXXX/base.apk!/assets” 亦即 “jar:file://”+Application.dataPath+“!/assets”
Application.dataPath的详细格式形如:“/data/app/包名-XXXXX/base.apk”
Application.persistentDataPath的信息格式形如:“/storage/emulated/0/Android/data/包名/files”

一、使用

1、读写

  • 读:对于非Android和WebGL平台,支持File或者Stream的同步读取。同时File或者Directory类的方法也都可用。
    但对于Android平台和WebGL平台,对StreamingAssets目录使用File类,Direcotry类的方法,以及Stream方式的读取都不支持。
    针对Android平台,如果有同步读取的需求,可以考虑在游戏运行时,把StreamingAssets下的文件写入persistentDataPath,后续的读取和写入都在persistentDataPath进行。另一种方法就是针对Android平台提供额外的jar,对StreamingAssets下的文件进行同步操作。对Android平台和WebGL平台使用UnityWebRequest(使用WWW类进行读取已废弃)对StreamingAssets下的文件进行读取,该方法是异步的。对于其它平台UnityWebRequest也是支持的。

  • 写:StreamingAssets文件夹在所有平台上都 不支持写入

访问方式对比

访问方式适用平台优点缺点
UNITY_EDITOR#define指令,用于从游戏代码中调用Unity编辑器脚本简单直接不适用于WebGL和Android
UnityWebRequest全平台最通用方式需要协程处理
WWW (已弃用)旧版Unity简单性能差,已弃用
Resources.Load不适用-无法访问StreamingAssets

2、使用UnityWebRequest读取

UnityWebRequest读取文件需要传入文件的URL,StreamingAssets目录不同平台对应的URL是不一样的,如下:

  • Windows平台 file:///D:/DATA/StreamingAssets/data.json
  • WebGl平台 http://localhost/StreamingAssets/data.json
  • Android平台 jar:file:///data/app/xxx!/assets/data.json
  • iOS平台 Application/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/xxx.app/Data/Raw

这时候最好通过构造Uri()的方式来规避平台的差异,获得真正的请求URL。如:

using UnityEngine;
using UnityEngine.Networking;
using System.Collections;public class LoadStreamingAsset : MonoBehaviour
{IEnumerator Start(){string path = System.IO.Path.Combine(Application.streamingAssetsPath, "data.json");string uri = new System.Uri(path).AbsoluteUri;UnityWebRequest request = UnityWebRequest.Get(uri);yield return request.SendWebRequest();if (request.result == UnityWebRequest.Result.Success){Debug.Log(request.downloadHandler.text);}else{Debug.LogError(request.error);}}}

方法Path.Combine(path1,path2)在检测到path1不是以分隔符结尾的话,会自动补充分隔符,

二、AB读取的特例

有一个特例,就是StreamingAssets目录下的AssetBundle资源,无论什么平台,都可以通过 AssetBundle.LoadFromFile(string path) 该接口(该接口亦可读取其它具体目录中的资源,不仅仅是StremingAssets目录)同步读取。
但是对于anroid平台,path参数需要使用路径(称之为路径1)Application.dataPath + “!assets/XXXX"的格式才能读取。
其它平台path参数使用路径(称之为路径2)Application.streamingAssetsPath+”/XXXX"即可读取

(20220621补充:在较老版本Unity中,StreamingAssets目录下的AB资源若要通过AssetBundle.LoadFromFile进行读取,安卓平台上的路径确实需要使用Application.dataPath + “!assets/XXXX”(即上述删除线中提到的路径1);但经笔者测试,在Unity2020.3.20f1版本中,路径1、路径2两种方式都支持;在Unity2021.3.3f1中只支持路径2的方式)

三、注意事项

在StreamingAssets目录下,创建文件夹名字为Tables,通过jar的方式读取其内的文件,无法读取。改成其它名字即可。

参考文档:Unity StreamingAssets 详解& 简单封装

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/92439.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/92439.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[windows]torchsig 1.1.0 gr-spectrumdetect模块安装

问题 按照提供的readme git clone https://github.com/TorchDSP/torchsig.git cd torchsig pip install . cd gr-spectrumdetect mkdir build cd build cmake ../ make install cd ../examples/ bash trained_model_download.sh gnuradio-companion example.grc &安装总是出…

网络安全要了解的知识

基于2025年网络安全态势整理的十大高危漏洞类型,结合攻击影响范围、技术严重性及实际案例分析综合排序:---1. 访问控制失效- 核心问题:权限校验缺失导致越权操作(如修改URL参数获取他人数据)。 - 案例:202…

xml 格式化

运行效果:免费在线XML格式化工具 - XML代码美化/压缩/验证 代码实现: using Microsoft.AspNetCore.Mvc; using System.Xml; using System.Xml.Linq;namespace SaaS.OfficialWebSite.Web.Controllers {public class XmlController : Controller{public I…

Pygame音频播放的最简框架代码示例

一、示例代码:import pygame pygame.init() pygame.mixer.init() pygame.mixer.music.load(/home/lijiang/Music/Lynyrd Skynyrd - Sweet Home Alabama.mp3) pygame.mixer.music.play()while pygame.mixer.music.get_busy():pygame.time.Clock().tick(10)二、代码详…

在Ubuntu环境中安装Docker和Minikube的完整指南

目录 前言 准备工作 第一部分:安装Docker 步骤1:卸载旧版本(如果有) 步骤2:安装依赖包 步骤3:添加Docker官方GPG密钥 步骤4:设置Docker仓库 步骤5:安装Docker引擎 步骤6&am…

几个概率分布在机器学习应用示例

一、说明 在这份快速指南中,我们将介绍最重要的分布——从始终公平的均匀分布,到钟形的正态分布,计数点击的泊松分布,以及二元选择的二项分布。 没有复杂的数学,只有清晰的概念、真实的例子,以及为什么它们…

2025年测绘程序设计模拟赛一--地形图图幅编号及图廓点经纬度计算

想要在2026年参加这个比赛的,可以加入小编和其它大佬所建的群242845175一起来备赛,为2026年的比赛打基础,也可以私信小编,为你答疑解惑一、读取文件 这里有两种文件需要读取,所以要额外处理 internal class Read {publ…

【C++基础】名字空间与 inline 命名空间:面试高频考点与真题解析

想象一下,你正在开发一个大型项目,团队中有10名程序员同时工作。当你们分别定义了calculate()函数时,编译器会陷入混乱:它不知道应该调用哪个版本的calculate。这就是C++引入名字空间(Namespace)的根本原因! 一、名字空间(Namespace)基础概念 1.1 为什么需要名字空间…

Pytest项目_day08(setup、teardown前置后置操作)

setup模块级setup_module:运行于模块开始之前,生效一次 一个py文件(测试文件)就是一个模块函数级setup_function:对于每条(不在类中的)函数用例生效,如果函数在类中,那么…

trae开发c#

安装插件C# Dev Kit,使用的版本是1.41.11 .NET Install Tool一般会自动安装,安装C# dev kit的时候,版本2.3.7 C# 插件,版本2.87.31 https://marketplace.visualstudio.com/items?itemNamems-dotnettools.vscode-dotnet-runtim…

Modstart 请求出现 Access to XMLHttpRequest at ‘xx‘

在 uniapp 前端页面请求时出现类似如下错误Access to XMLHttpRequest at https://example.com/api/mtiku/config from origin http://localhost:20000 has been blocked by CORS policy: Response to preflight request doesnt pass access control check: No Access-Control…

计算机视觉CS231n学习(5)

循环神经网络 RNN recurrent neural networksRNN序列处理能力(RNN核心作用) RNN处理序列数据,相比“Vanilla”神经网络(仅支持一对一映射),RNN支持多种序列映射模式: 一对一:传统分类…

Spring Boot Redis 缓存完全指南

Spring Boot Redis 缓存完全指南 1. 项目依赖配置 1.1 Maven依赖 <dependencies><!-- Spring Boot Redis --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><…

八股——WebSocket

文章目录1、 什么是 WebSocket&#xff1f;与 Http 协议的区别是什么&#xff1f;2、 Http 是如何升级为 WebSocket 的&#xff1f;3、 为什么 WebSocket 可以进行全双工模式的消息传输&#xff0c;而 Http 不可以&#xff1f;4、 什么是 TCP 的沾包和拆包&#xff1f;5、 WebS…

Mysql 如何使用 binlog 日志回滚操作失误的数据

文章目录一、背景二、准备测试数据1. 创建测试表2. 创建测试数据三、模拟误操作四、数据回滚&#xff08;一&#xff09;方案一&#xff1a;云数据库恢复&#xff08;二&#xff09;方案二&#xff1a;手动恢复1. 查询 binlog 日志2. 找到删除语句&#xff0c;手动还原为插入语…

wodpress结构化数据对SEO的作用

在 WordPress 网站中&#xff0c;结构化数据对 SEO 的作用主要体现在以下几个方面&#xff1a; 1. 提升搜索结果的可见性 结构化数据能够帮助搜索引擎更好地理解网页内容&#xff0c;从而以更精准的方式展示搜索结果。通过添加结构化数据&#xff0c;网页可以在搜索结果中显示…

讲一讲@ImportResource

题目详细答案ImportResource是 Spring 框架中的一个注解&#xff0c;用于将传统的 XML 配置文件导入到基于 Java 配置的 Spring 应用程序中。它允许开发者在使用 Java 配置的同时&#xff0c;继续利用现有的 XML 配置文件。这样可以逐步迁移旧的 XML 配置&#xff0c;或者在某些…

解决 Nginx 反代中 proxy_ssl_name 环境变量失效问题:网页能打开但登录失败

前言&#xff1a;在现代企业架构中&#xff0c;多域名反向代理是实现业务隔离、品牌独立的常见方案。然而&#xff0c;看似简单的Nginx配置背后&#xff0c;隐藏着与TLS协议、后端认证逻辑深度绑定的细节陷阱。本文将从原理到实践&#xff0c;详解为何在多域名场景下&#xff0…

三步完成,A100本地vLLM部署gpt-oss,并启动远程可访问api

A100本地vLLM部署gpt-oss&#xff0c;并启动远程可访问api GPT-oss试用 gpt-oss有两个原生配置是目前&#xff08;2025-8-8&#xff09;Ampere系列显卡不支持的&#xff0c;分别是默认的MXFP4量化&#xff0c;以及Flash-attn V3。官方给出的vllm教程也是默认使用的是H系列显卡…

【华为机试】63. 不同路径 II

文章目录63. 不同路径 II题目描述示例 1&#xff1a;示例 2&#xff1a;提示&#xff1a;解题思路核心思想&#xff1a;动态规划&#xff08;避开障碍&#xff09;算法流程复杂度分析边界与细节方法对比代码实现Go 实现&#xff08;含二维DP / 一维DP / 记忆化&#xff09;测试…