好久沒有更新部落格啦!最近剛過完五一,又滿血復活啦!今天給大家總結一下unity中讀取配置檔案的問題。大家都知道我們的unity引擎是非常強大的,可以支援多平台的。但是我們的配置檔案在不同平台下讀取方式確是不一樣的。我們常用的移動端無非就是安卓和ios平台了。
首先我們來了解一下unity中各個平台下面的路徑。想要讀取乙個檔案,自然要找到這個檔案對吧!
ios平台
unity3d中的資源的處理種類
unity中的資源資源的處理種類大致分為:resources、streamingassets、assetbundle、persistentdatapath 四類。
resources
是作為乙個unity的保留資料夾出現的,也就是如果你新建的資料夾的名字叫resources,那麼裡面的內容在打包時都會被無條件的打到發布包中。
特點:唯讀,即不能動態修改。所以想要動態更新(熱更新)的資源不要放在這裡。會將資料夾內的資源打包整合到.asset檔案裡面。因此建議可以放一些prefab,因為prefab在打包時會自動過濾掉不需要的資源
有利於減小資源包的大小。資源讀取使用resources.load()。
streamingassets
streamingassets和resources很像。同樣作為乙個唯讀的unity3d的保留資料夾出現。不過兩者也有很大的區別,那就是resources資料夾中的內容在打包時會被壓縮和加密。而streamingasset資料夾中的內容則會原封不動的打入包中,因此streamingassets主要用來存放一些二進位制檔案。
特點:1.唯讀不可寫。
2.主要用來存放二進位制檔案。
3.只能用過www類來讀取。
assetbundle
assetbundle就是把prefab或者二進位制檔案封裝成assetbundle檔案。
特點:persistentdatapath
這個路徑下是可讀寫。而且在ios上就是應用程式的沙盒,但是在android可以是程式的沙盒,也可以是sdcard。並且在android打包的時候,projectsetting頁面有乙個選項write access,可以設定它的路徑是沙盒還是sdcard。
特點:1.內容可讀寫,不過只能執行時才能寫入或者讀取。 提前將資料存入這個路徑是不可行的。
2.無內容限制。你可以從 streamingasset 中讀取二進位制檔案或者從 assetbundle 讀取檔案來寫入 persistentdatapath 中。
寫下的檔案,可以在電腦上檢視。同樣也可以清掉。
3.需要使用www類來讀取。
xmldocument xmldoc = new xmldocument();
xmldoc.loadxml(www.text);//而且這種方式輸出到安卓端後,不能正確輸出中文
原因就是:是utf-8編碼的問題,如果是utf-8+bom那麼就會出現這種問題,如果是單純的utf-8就沒有這種問題(當然如果你把他完全變成ansi,那也行)
解決方法:改下編碼格式就行了。
方法二:無需管是不是utf-8編碼的問題,我們換一種解決方法。
使用stringreader讀取
stringreader stringreader = new stringreader(www.text);
stringreader.read(); // 使用這個就可以跳過bom了
xmlreader reader = xmlreader.create(stringreader);
xmldoc.loadxml(stringreader.readtoend());
至於什麼是utf8與utf8 without bom編碼之間的問題,大家可以參考這篇部落格:utf8與utf8 without bom之間的問題
在安卓平台下讀取配置檔案時,需要使用www類來讀取。
比如安卓環境下路徑(path):
private string path = null;
private string nodename = null;
public ienumerator loadxml(string xmlfile)
}
window平台下讀取時一般可以直接用
xmldocument xmldoc = new xmldocument();
xmldoc.load(path);//path為直接路徑,可以直接載入進來。
此時路徑可以為streamingassets資料夾下,也可以是自己自建的資料夾下面,如果是你自己建的資料夾下打包後需要手動新增一下,就是說比如你自己在assets檔案下新建了乙個config資料夾,那麼打包後你需要在data檔案裡面新建乙個config資料夾,然後把你的xml檔案放進去就可以了。
2:用www類去載入xml檔案:
比如此時你的xml檔案在streamingassets資料夾下有乙個test.xml檔案。此時路徑必須為:
www www = new www("file://" + url);
yield return www;
注意:必須要檔案路徑前面加上"file://"
關於Unity路徑(移動平台動態讀取外部檔案)
假如我想在editor裡動態讀取檔案 實際的遊戲開發中,其實有相當一部分靜態資料是可以放在客戶端的,所以勢必會產生要動態讀取這些檔案的需求,比如csv 其實就是文字檔案 xml等等。我相信大家不管是用win還是用mac來做unity3d的開發,都一定要先在editor中去實現基本的功能,在具體到各個...
unity讀取各移動平台路徑
iphone檔案目錄介紹 常用軟體的安裝目錄。private ar mobile media iphone video recorder iphone video recorder錄影檔案存放目錄。private ar mobile media dcim 相機拍攝的 檔案存放目錄。4 private...
Unity讀取Android平台檔案
無子路徑傳 參 path getstreamingassetspath return string.empty endif void ongui if gui.button new rect 50,300,200,50 clear gui.label new rect 50,500,300,80 p...