【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
英文地址,請注明出處:http://en.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;測試…