Unity3D中的資源路徑
路徑屬性 路徑說明
Application.dataPath 此屬性用於返回程序的數據文件所在文件夾的路徑。例如在Editor中就是Assets了。
Application.streamingAssetsPath 此屬性用於返回流數據的緩存目錄,返回路徑為相對路徑,適合設置一些外部數據文件的路徑。放在Unity工程StreamingAssets文件夾中的資源發布后都可以通過這個路徑讀取出來。
Application.persistentDataPath 此屬性用於返回一個持久化數據存儲目錄的路徑,可以在此路徑下存儲一些持久化的數據文件。
Application.temporaryCachePath 此屬性用於返回一個臨時數據的緩存目錄。
Unity3D中的資源的處理種類
Unity中的資源資源的處理種類大致分為:Resources、StreamingAssets、AssetBundle、PersistentDataPath 四類。
Resources
是作為一個Unity的保留文件夾出現的,也就是如果你新建的文件夾的名字叫Resources,那么里面的內容在打包時都會被無條件的打到發布包中。
特點:
只讀,即不能動態修改。所以想要動態更新的資源不要放在這里。
會將文件夾內的資源打包集成到.asset文件里面。因此建議可以放一些Prefab,因為Prefab在打包時會自動過濾掉不需要的資源,有利於減小資源包的大小。
資源讀取使用Resources.Load()。
StreamingAssets
StreamingAssets和Resources很像。同樣作為一個只讀的Unity3D的保留文件夾出現。不過兩者也有很大的區別,那就是Resources文件夾中的內容在打包時會被壓縮和加密。而StreamingAsset文件夾中的內容則會原封不動的打入包中,因此StreamingAssets主要用來存放一些二進制文件。
特點:
只讀不可寫。
主要用來存放二進制文件。
只能用過WWW類來讀取。
AssetBundle
AssetBundle就是把prefab或者二進制文件封裝成AssetBundle文件。
特點:
是Unity3D定義的一種二進制類型。
使用WWW類來下載。
PersistentDataPath
這個路徑下是可讀寫。而且在IOS上就是應用程序的沙盒,但是在Android可以是程序的沙盒,也可以是sdcard。並且在Android打包的時候,ProjectSetting頁面有一個選項Write Access,可以設置它的路徑是沙盒還是sdcard。
內容可讀寫,不過只能運行時才能寫入或者讀取。 提前將數據存入這個路徑是不可行的。
無內容限制。你可以從 StreamingAsset 中讀取二進制文件或者從 AssetBundle 讀取文件來寫入 PersistentDataPath 中。
寫下的文件,可以在電腦上查看。同樣也可以清掉。
需要使用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目錄,並且並將資源放在這目錄中。如圖:
示例:
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目錄,並且並將資源放在這目錄中。如圖:
示例:
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://協議實現加載。
————————————————
版權聲明:本文為CSDN博主「布爾君de二次方」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/hbysywl/article/details/80567289