文件夾及路徑
昨天記了一篇AssetBundle學習筆記,那么游戲中的各種資源應該如何存放呢?
在網上一陣搜羅,把筆記記一下。
非特殊名稱文件夾
非Unity3D指定名稱的文件夾中的資源,如果游戲場景中有使用到,發布時會被一同打包,沒有使用到則不會被打包。
開發時可使用Application.dataPath來對根目錄下的文件進行任意操作,但是發布到移動端后App是沒有權限操作根目錄的。
Resources文件夾
存放到該文件夾下的所有文件,無論場景中是否使用到,都會被打包。
但是資源在打包后只能使用Resource.Load進行讀取,不能對資源進行修改和刪除等操作。
StreamingAssets文件夾
存放到該文件夾下的所有文件,無論場景中是否使用到,也都會被打包。
使用Application.streamingAssetsPath可以獲取到該目錄,在PC端可以對該文件夾進行讀寫操作,在移動端只能對該文件夾進行讀操作。
這個文件夾下的資源也會全都打包在.apk或者.ipa 它和Resources的區別是,Resources會壓縮文件,但是它不會壓縮原封不動的打包進去。並且它是一個只讀的文件夾,就是程序運行時只能讀 不能寫。它在各個平台下的路徑是不同的,不過你可以用Application.streamingAssetsPath 它會根據當前的平台選擇對應的路徑。
有些游戲為了讓所有的資源全部使用assetbundle,會把一些初始的assetbundle放在StreamingAssets目錄下,運行程序的時候在把這些assetbundle拷貝在Application.persistentDataPath目錄下,如果這些assetbundle有更新的話,那么下載到新的assetbundle在把Application.persistentDataPath目錄下原有的覆蓋掉。(終於知道手游第一次進入時解壓資源是在干什么了!)
StreamingAssets目錄下的資源都是不壓縮的,所以它比較大會占空間,比如你的應用裝在手機上會占用100M的容量,那么你又在StreamingAssets放了一個100M的assetbundle,那么此時在裝在手機上就會在200M的容量。
Application.persistentDataPath路徑
該路徑在Unity3D根目錄下沒有對應的文件夾,該路徑指向設備上的公共目錄。
因為Application.persistentDataPath目錄是應用程序的沙盒目錄,所以打包之前是沒有這個目錄的,直到應用程序在手機上安裝完畢才有這個目錄。
該文件存在手機沙盒中,因為不能直接存放文件:
- 通過服務器直接下載保存到該位置,也可以通過Md5碼比對下載更新新的資源
- 沒有服務器的,只有間接通過文件流的方式從本地讀取並寫入Application.persistentDataPath文件下,然后再通過Application.persistentDataPath來讀取操作。
注:在Pc/Mac電腦 以及Android跟Ipad、ipone都可對文件進行任意操作,另外在IOS上該目錄下的東西可以被iCloud自動備份。
Application.temporaryCachePath路徑
操作方式跟上面Application.persistentDataPath類似。除了在IOS上不能被iCloud自動備份。
一些記錄
Application.persistentDataPath沒有讀取文件的問題
//安卓上跟其他平台不一樣,安裝后,這些文件實際上是在一個Jar壓縮包里,所以不能直接用讀取文件的函數去讀,而要用WWW方式。具體做法如下:
//1.把你要讀取的文件放在Unity項目的Assets/StreamingAssets文件夾下面,沒有這個文件夾的話自己建一個。
//2.讀取的代碼(假設名為"文件.txt")
byte[] InBytes; //用來存儲讀入的數據
if (Application.platform == RuntimePlatform.Android) //判斷當前程序是否運行在安卓下
{
string FileName = "jar:file://" + Application.dataPath + "!/assets/" + "文件.txt";
WWW www = new WWW(FileName); //WWW會自動開始讀取文件
while(!www.isDone){} //WWW是異步讀取,所以要用循環來等待
InBytes = www.bytes; //存到字節數組里}
else
{
//其他平台的讀取代碼
}
Unity3D研究院之IOS Android支持中文與本地文件的讀取寫入
http://www.apkbus.com/android-429-1.html
unity 在移動平台中,文件操作路徑詳解
http://www.unitymanual.com/thread-23491-1-1.html
Unity中的Path對應各平台中的Path
http://www.unitymanual.com/thread-21404-1-1.html