1. 程式人生 > >Unity資源載入路徑及載入方式小結

Unity資源載入路徑及載入方式小結

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.streamingAssetsPathjar: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.dataPathApplication/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/xxx.app/Data
Application.streamingAssetsPathApplication/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/xxx.app/Data/Raw
Application.persistentDataPathApplication/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/Documents
Application.temporaryCachePathApplication/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://協議實現載入。