2012年1月14日 星期六

“手機”讀取XML!! Ver 1.5



Dear All:
我們都知道如果將檔案或Prefab放到Resources的資料夾,就可以透過Resources這個class讀取資料夾中的檔案或Prefab。我們也知道在UNITY裡頭,可以使用.NET Framework的XmlReader來讀取XML檔案。我們更清楚,使用Application.dataPath可以取得Assert資料夾的位置。所以...
問題:當你把XML檔案放置於Resources資料夾中,你要怎麼讀取這個檔案?
以我這個蠢才來說,會使用XmlReader這個Class,然後檔案讀取路徑為:Application.dataPath + "Resources/expTable.xml"。接著用MS給的範例讀取我要的資料,如下所示:
while( reader.Read() ) {
switch( reader.NodeType ) {
case XmlNodeType.Element:
break;
}
}

OK!GOOD,一切就緒!!啟動Editor,資料正常!打完收工...
...
....
.....
......(慢著~~怎麼放上Android手機後不正常??)
對!你中招了,因為Application.dataPath在手機上所表示的路徑根本不是Asset資料夾所在的位置,而是:
/mnt/asec/com.xxx.projectx/pkg.apk  (以Android為例)
這是"三小"?? (錯愕)...#@$@$...
所以在PC可以Loading的檔案,現在變成找不到!!解法的辦法是:
//一樣利用Resources class讀取xml,只是先暫時轉換成TextAsset
TextAsset t = Resources.Load("expTable") as TextAsset ; 
//接著再轉換成XmlReader
XmlReader reader = XmlReader.Create( new StringReader( t.text ) );
OK!這才叫“打完收工”

補充:
TextAsset可以支援UTF-8的編碼,如果有使用中文的朋友,記得把XML檔案存成UTF-8格式。在Windows底下,你可以使用PSPad,到"格式" -> "UTF-8" 後存檔即可。


作者:Bric Lin, Email: ericlin09@gmail.com
曾任職台灣某遊戲公司研發Game Engine,為書籍“OGRE 入門指南”的譯者之一,專攻Rendering技術與遊戲開發,目前為獨立開發團隊CocosPlay主程式



3 則留言:

  1. 版大,如果用這個當作絕對路徑名呢?

    Application.persistentDataPath

    在Android是不是就可以直接抓了,不用轉TextAsset

    回覆刪除
  2. 你好版大, 請問如果我有些資料寫進xml/txt 檔案應怎麼解決(android)?
    謝謝

    回覆刪除
    回覆
    1. 這邊有現成的Code,應該可以秒殺你的問題,試試看吧!

      http://www.previewlabs.com/file-io-in-unity3d/

      刪除