Unity资源路径及加载外部资源介绍

【Unity记录】问题:WebGL游戏保存数据到Application.persistentDataPath不生效 解决Unity WebGL游戏保存数据到Application.persistentDataPath不生效的问题 阅读详情


Unity3D中的资源路径

路径属性 路径说明
Application.dataPath 此属性用于返回程序的数据文件所在文件夹的路径。例如在Editor中就是Assets了。
Application.streamingAssetsPath 此属性用于返回流数据的缓存目录,返回路径为相对路径,适合设置一些外部数据文件的路径。放在Unity工程StreamingAssets文件夹中的资源发布后都可以通过这个路径读取出来。
Application.persistentDataPath 此属性用于返回一个持久化数据存储目录的路径,可以在此路径下存储一些持久化的数据文件。
Application.temporaryCachePath 此属性用于返回一个临时数据的缓存目录。

Unity3D中的资源的处理种类

Unity中的资源资源的处理种类大致分为:Resources、StreamingAssets、AssetBundle、PersistentDataPath 四类。

Resources

是作为一个Unity的保留文件夹出现的,也就是如果你新建的文件夹的名字叫Resources,那么里面的内容在打包时都会被无条件的打到发布包中。

特点:

  1. 只读,即不能动态修改。所以想要动态更新的资源不要放在这里。
  2. 会将文件夹内的资源打包集成到.asset文件里面。因此建议可以放一些Prefab,因为Prefab在打包时会自动过滤掉不需要的资源,有利于减小资源包的大小。
  3. 资源读取使用Resources.Load()。
StreamingAssets

StreamingAssets和Resources很像。同样作为一个只读的Unity3D的保留文件夹出现。不过两者也有很大的区别,那就是Resources文件夹中的内容在打包时会被压缩和加密。而StreamingAsset文件夹中的内容则会原封不动的打入包中,因此StreamingAssets主要用来存放一些二进制文件。

特点:

  1. 只读不可写。
  2. 主要用来存放二进制文件。
  3. 只能用过WWW类来读取。
AssetBundle

AssetBundle就是把prefab或者二进制文件封装成AssetBundle文件。

特点:

  1. 是Unity3D定义的一种二进制类型。
  2. 使用WWW类来下载。
PersistentDataPath

这个路径下是可读写。而且在IOS上就是应用程序的沙盒,但是在Android可以是程序的沙盒,也可以是sdcard。并且在Android打包的时候,ProjectSetting页面有一个选项Write Access,可以设置它的路径是沙盒还是sdcard。

  1. 内容可读写,不过只能运行时才能写入或者读取。 提前将数据存入这个路径是不可行的。
  2. 无内容限制。你可以从 StreamingAsset 中读取二进制文件或者从 AssetBundle 读取文件来写入 PersistentDataPath 中。
  3. 写下的文件,可以在电脑上查看。同样也可以清掉。
  4. 需要使用WWW类来读取。

android平台

路径属性 路径
Application.dataPath /data/app/xxx.xxx.xxx.apk
Application.streamingAssetsPath jar:file:///data/app/xxx.xxx.xxx.apk/!/assets
Application.persistentDataPath /data/data/xxx.xxx.xxx/files
Application.temporaryCachePath /data/data/xxx.xxx.xxx/cache

ios平台

路径属性 路径
Application.dataPath Application/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/xxx.app/Data
Application.streamingAssetsPath Application/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/xxx.app/Data/Raw
Application.persistentDataPath Application/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/Documents
Application.temporaryCachePath Application/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/Library/Caches

资源文件的读取

接下来我们来介绍一下Resources、StreamingAssets、AssetBundle、PersistentDataPath这四个东东的读取方法。

Resources

首先我们新建一个Resources目录,并且并将资源放在这目录中。如图:

https url

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class LoadResources : MonoBehaviour {

	public Image image;

	// Use this for initialization
	void Start () {
	
		image.overrideSprite = Resources.Load ("animotiong_2", typeof(Sprite)) as Sprite;
	
	}

}

StreamingAssets

首先我们新建一个StreamingAssets目录,并且并将资源放在这目录中。如图:

https url

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
using UnityEngine;
using System.Collections;

public class LoadResources : MonoBehaviour {

	string _result;


	// Use this for initialization
	void Start () {
	
		StartCoroutine(LoadXML());
	
	}
	
	IEnumerator LoadXML() {
		string sPath= Application.streamingAssetsPath + "/test.xml";
		WWW www = new WWW(sPath);
		yield return www;
		_result = www.text;
	}
}

PersistentDataPath

之前我们说过,内容可读写,不过只能运行时才能写入或者读取。 提前将数据存入这个路径是不可行的。也就是说,PersistentDataPath是在运行时生成的,例如通过网络下载资源存在放PersistentDataPath中。

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
using UnityEngine;
using System.Collections;

public class LoadResources : MonoBehaviour {

	string _result;

	// Use this for initialization
	void Start () {
	
		StartCoroutine(LoadXML());
	
	}
	
	IEnumerator LoadXML() {
		string sPath= Application.persistentDataPath + "/test.xml";
		sPath = "file://" + sPath;
		WWW www = new WWW(sPath);
		yield return www;
		_result = www.text;

	}
}

这加载方式看起来与StreamingAssets很相识,但是注意这里多了行sPath = "file://" + sPath;这很重要!!想要通过WWW类加载PersistentDataPath必须使用file://协议实现加载。


本文90%的内容都是参考:
http://www.tuicool.com/articles/qMNnmm6

里面有讲述AssetBundle的加载方式。

【Unity记录】问题:WebGL保存文件到Application.persistentDataPath不生效 unity开发,webgl,打包,可持续化数据,文件保存 阅读详情

相关推荐

【Unity】数据持久化路径Application.persistentDataPath

经反复测试发现,有【外置SD卡】的设备上,如果声明读/写外部存储设备的权限,会返回外部存储路径,不声明则会返回内部存储路径,这样不会有问题。而在【无外置SD卡】的设备上,不管是否声明读/写外部存储设备的权限,Application.temporaryCachePath/persistentDataPath都返回外部存储路径,但是又没有权限,就可能会导致返回null了,之所以说可能是因为这个bug不是必现,如果出现了设备重启之后就好了,怀疑是linux设备mount问题。好处嘛,就是卸载app数据依旧存在。

weixin_46472622的博客 1万+

【Unity】关于各个平台加载streamingAssets路径

#if UNITY_EDITOR savePath = Application.dataPath + "/StreamingAssets/custom/"; #elif UNITY_ANDROID savePath = Application.persistentDataPath +"/custom/"; #elif UNITY_IPHONE string f

阿黄的博客 2万+

Unity实现动态资源加载的4种方式

使用unity开发游戏的过程中,资源的加载一直都是需要重点关注的。unity一共提供了5种资源加载的方式,分别是Resources(只能加载Resources目录中的资源),AssetBundle(只能加载AB资源,当前设备允许访问的路径都可以),WWW(可以加载...

顽皮细雨的博客 3万+

Unity3d热更新全书-加载(二)如何在不用AssetBundle的前提下动态加载预设

Unity3D的主要构成大家都知道,首先是场景图,场景图上的节点构成一颗树。 每个节点对应一个GameObject对象 然后每个GameObject有若干个组件 有一些组件会与资源产生关系,比如MeshRenderer会关联材质,材质会关联shader和贴图 场景图的一部分可以被保存为一个预设,prefab。 有时候我们会需要用预设去复用,而预设的加载似乎只能通过AB去打包,其实不然,这...

dianjupi9036的博客 221

unity读取外部资源

1.在编辑器中动态读取文件 在实际的游戏开发中,其实有相当一部分的静态数据是可以放在客户端的,所以自然而然地产生了动态读取这些文件的需求,比如csv、xml等,不管是用什么系统做Unity的开发,如果想要实现这种效果,显然要先在编辑器中实现基本的功能,然后再去各个移动平台去测试,所以要读取外部文件的第一步,显然要再电脑端实现这个共嫩南瓜(编辑器) 下面举一个读取xml的例子-----读取xml文件并动态生成一个类 举例: <?xml version="1.0" encoding="UTF-8"?&gt

lfanyize的博客 3662

Unity 3D 音乐播放器www异步加载外部资源

最近在做final year project,我有一个服务器,上面的文件下载下来之后会存放在c盘的默认路径里。然后我要把里面的音频文件读取出来,每个mp3文件做一个button ,用来控制播放。 //This script allows you to toggle music to play and stop. //Assign an AudioSource to a GameObject an

weixin_39673686的博客 1331

unity 通过resouce加载图片_Unity资源路径及加载外部资源介绍

相信大家在碰到加载Unity外部资源的问题都会很纠结,也遇到过很多坑,为了让大家可以早点摆脱它,下面就给大家介绍下Unity资源路径及加载外部资源,希望对大家有用。各平台的资源路径问题想读取文件就必须在到文件所在的目录,我们先来了解一下Unity下各个资源路径的特点和在各平台下资源路径的存放位置吧。Unity3D中的资源路径路径属性路径说明Application.dataPath此属性用于返回程序...

weixin_31156651的博客 1296

unity Editor自动生成材质及动态加载资源

自动生成材质及动态加载资源

tong_fly的博客 9032

unity3D保存文件到本地路径进行读写(移动端)

详细: https://www.cnblogs.com/zhepama/p/4362312.html Unity资源路径及加载外部资源介绍 https://www.simcai.com/2015/11/29/unity%E8%B5%84%E6%BA%90%E8%B7%AF%E5%BE%84%E5%8F%8A%E5%8A%A0%E8%BD%BD%E5%A4%96%E9%83%A8%E8%B5%84%...

qq_18428005的博客 1367

OPC UA 协议详解

OPC UA(统一架构)是新一代工业自动化标准通信协议,替代传统OPC Classic,具有跨平台、高安全性、标准化等优势。基于TCP协议,支持全平台部署,采用面向对象架构组织数据,提供实时读写、事件订阅、历史数据访问等功能。作为工业4.0核心协议,适用于智能制造、数字孪生等场景,能实现多品牌设备统一接入。相比Modbus和MQTT,OPC UA协议更规范安全但复杂度较高,是大型工业集群互联的主流选择。

eastyuxiao的专栏 725

逆向工程实战:解密AppleAccount的X-MMe-Nas-Qualify签名生成机制

本文通过逆向工程实战,详细解析了AppleAccount服务中X-MMe-Nas-Qualify签名的生成机制。作者利用Frida进行动态追踪定位签名源头,结合IDA Pro进行静态分析,并借助LLDB动态调试还原核心算法。文章最终分享了如何独立于苹果官方库,通过Python代码复现签名算法,为自动化测试和深度交互苹果服务的开发者提供了关键技术路径。

weixin_29323049的博客 706

(文档)流媒体资源 Streaming Assets

Most assets in Unity are combined into the project when it is built. However, it is sometimes useful to place files into the normal filesystem on the target machine to make them accessible via a pathn...

weixin_30852451的博客 94

5分钟搞定Google Custom Search API申请:从注册到获取CX Key全流程

本文详细介绍了如何快速申请和配置Google Custom Search API,从Google Cloud项目创建、启用计费、获取API Key,到在Programmable Search Engine控制台创建自定义搜索引擎并获取关键的CX Key,提供了全流程实战指南。文章还包含安全配置建议、API调用测试方法及前端与后端的集成代码示例,帮助开发者高效实现网站或应用的智能搜索功能。

weixin_29227585的博客 1663

Unity读取内部、外部资源详解

Unity读取内部、外部资源详解unity读取资源大概分为两部分:一部分为内部资源,什么是内部资源,就是导入unity中的资源,我们称之为Asset,这部分资源unity有现成的管理方法。另外一部分是外部资源,没有导入unity,也不是打包的AssetBundle资源,比方说就是一个txt、png、lua等资源,需要自己去实现读取以及资源的管理。

a958832776的博客 5923

保姆级教程:用CANoe手把手复现ECU刷写全流程(含BootLoader三阶段详解)

本文提供了一份详细的CANoe ECU刷写实战指南,涵盖BootLoader三阶段的深度解析。从实验环境搭建到预编程、主编程及后编程阶段,逐步讲解ECU刷写的关键步骤和隐藏逻辑,特别强调UDS诊断和CAN通信的精确控制,帮助开发者掌握ECU刷写的核心技术。

weixin_29234423的博客 529

SFR算法实现详解:从边缘检测到MTF计算的完整流程

本文详细解析了SFR算法从边缘检测到MTF计算的完整流程,包括边缘检测、ESF超采样、LSF差分等关键步骤。通过代码示例和实战经验,帮助开发者高效实现成像系统解析力评估,优化MTF测量精度。适用于摄像头模组调试、工业检测等场景。

Black的专栏 1009

Unity-资源加载(一)

Unity中的资源加载 面板拖拽 代码中变量使用public修饰符,在unity面板中将需要的资源拖拽上进行赋值 。(一般用于个人测试或者Demo中,如果不小心遇到Unity崩溃或者物体上的脚本丢失情况则需要重新拖拽,非常不利于项目开发) 使用Resources文件夹方式加载 Resources文件夹文件大小上限大概为两个G左右,所以可以将一些配置表放在中间进行加载。小型项目、demo可以使用此加载方式。 代码使用Resources.load<资源类型>(“资源路径”);进行加载 使用unity

qq_37461425的博客 1791

【PG高可用】一 PostgreSQL高可用方案repmgr部署(非常详细)

repmgr安装部署

DBA之路的博客 7054

Unity3D加载外部资源

Unity 3D里有两种动态加载机制:      一是Resources.Load;      一是通过AssetBundle;      其实两者本质上没有什么区别。Resources.Load就是从一个缺省打进程序包里的AssetBundle里加载资源,而一般AssetBundle文件需要你自己创建,运行时动态加载,可以指定路径和来源的。其实场景里所有静态的对象也有这么一个加载过程,只是

张涵的博客 3502

Claude code 入门 安装和快速使用

Claude Code 可以理解为一个。你只需要用简单的语言告诉它要做什么,比如「帮我整理这些文件」、「改一下这个程序」、「分析一下这些数据」,它就能理解你的电脑项目,并自动完成很多操作。,比如整理文件、编程、数据分析…等等。使用终端、命令行还是挡住了非常多的朋友,这个时候,有个界面很重要!Claude code、Codex 官方也都推出了插件,安装即可使用。

2401_84052244的博客 1356

2026年复旦微电数字IC笔试试卷带答案解析

摘要: 本文为复旦微电子MCU/SOC岗位笔试模拟题,涵盖单片机架构、数字电路、存储技术等核心知识点。内容包括: 单选题(30分):考察Cortex-M中断机制、时序分析(建立/保持时间)、逻辑化简、跨时钟域设计(格雷码应用)、存储器特性(NAND Flash操作单元)等; 波形分析(15分):聚焦D触发器行为、时钟分频、建立时间违例判断及跨时钟域同步; 多选题(25分):涉及亚稳态成因与处理、异步FIFO设计要点、MCU低功耗策略、NAND Flash特性及复旦微电市场地位; 简答题(20分):解析建立/

Open 342

Unity 运行时资源加载

Unity提供了Resource Folders和AssetBundles两种按需加载资源方案。Resource Folders将资源存储在程序包内,通过Resources.Load()加载,适合中等大小常用资源,但会增加主包体积。AssetBundles是外部资源集合,支持本地或网络动态加载,适合大型或更新资源,需手动管理卸载。资源卸载方面:AssetBundles通过Unload()控制是否保留已加载对象,Resources需要通过Destroy()和UnloadUnusedAssets()释放内存。开

分享知识,拥抱变化 1052

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

asset文件夹路径 unity_Unity资源加载入门

引言Unity的资源加载及管理,基础且重要。此篇文章作为近期梳理项目内资源管理器的一个小总结,尝试尽量用人话将Unity对资源管理的关键点梳理清楚,个人觉得比较适合像我这样刚入门且对AssetBundle还不甚了解的家伙。我理解的资源管理举一个不恰当的例子来描述我所理解的资源管理(因为我实在想不出更合适的例子了),想象一个画面:一个表演者,站在一个台子后面,面向观众,按照规定的剧本,操作着台子后面...

weixin_33173924的博客 649

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

下一篇: Vuforia通过代码提高target识别率
appppppen
博客等级 码龄11年 13粉丝 7原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值