2013-09-26 74 views
1

我使用XML文件來存儲一些數據,所以它會更容易本地化到其他語言,因爲Unity有問題,我必須使用XML。Unity3d在生成後看不到項目文件夾中的XML文件

在UnityEditor中一切正常,但是什麼時候構建它,在第一次使用XML時停止工作。

我猜Unity因爲某些原因無法到達XML文件,因爲當我嘗試手動將XML文件放到My Documents文件夾中,並使用對它們的引用時,它就起作用了。

這是當前路徑到XML文件:

Assets/Scripts/Core/Localization/lang.eng.xml 

在UnityEditor偉大工程,沒有工作時所建。

這是另一個(但必須手動將它們放到這兒):

Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + 
      "\\testFolder\\lang.eng.xml" 

但我不喜歡這樣,也許有某種方法,使工作?

我知道我可以自動化這個,但我仍然不喜歡這個。我認爲它默認情況下會像遊戲文件夾中的resx(.resources)一樣是二進制文件。

在這種情況下最好的解決方案是什麼?如果我沒有選擇,我必須使用「我的文檔」文件夾?

在此先感謝。

---------------------如果有必要,這裏有一些代碼。 -----

爲Open XML文件我用這個:

using System; 
using System.ComponentModel; 
using System.IO; 
using System.Linq; 
using System.Reflection; 
using System.Xml.Linq; 

private static readonly XDocument Document = new XDocument; 

private static void OpenDocument() { 
    try { 
     string filename = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + 
      "\\testFolder\\lang.eng.xml"; 
     Document = XDocument.Load(filename); 
    } 
    catch (FileNotFoundException exception) { 
     UnityEngine.Debug.Log(exception); 
    } 
} 

一起工作:

public static string GetEnumStringQ(Enum e, KindOfItemData kindOf) { 
    string key = @"name=""" + e + @""""; 
    string enumType = e.GetType().ToString(); 
    string kindOfValue = kindOf.ToString(); 
    if (Document == null) { 
     OpenDocument(); 
    } 

    if (Document.Root == null) return e.ToString(); 
    foreach (XElement el in Document.Root.Elements().Where(el => el.Name == enumType)) { 
     foreach (XAttribute attr in el.Attributes().Where(attr => attr.ToString() == key)) { 
      foreach (XElement element in el.Elements().Where(element => element.Name == kindOfValue)) { 
       return element.Value; 
      } 
     } 
    } 
    return e.ToString(); 
    } 

這是一塊XML文件:

<PassiveArmorSpecial name="StaminaRegenerationLow"> <value>Stamina Regeneration (low)</value></PassiveArmorSpecial> 
<PassiveArmorSpecial name="StaminaRegenerationMed"> <value>Stamina Regeneration (med)</value></PassiveArmorSpecial> 
<PassiveArmorSpecial name="StaminaRegenerationHigh"> <value>Stamina Regeneration (high)</value></PassiveArmorSpecial> 
<PassiveArmorSpecial name="VampirismLow">    <value>Vampirism (low)</value></PassiveArmorSpecial> 
<PassiveArmorSpecial name="VampirismMed">    <value>Vampirism (med)</value></PassiveArmorSpecial> 
<PassiveArmorSpecial name="VampirismHigh">   <value>Vampirism (high)</value></PassiveArmorSpecial> 


<TypeOfDefence name="Flesh">    <value>Flesh</value></TypeOfDefence> 
<TypeOfDefence name="Bone">    <value>Bone</value></TypeOfDefence> 
<TypeOfDefence name="Metal">    <value>Metal</value></TypeOfDefence> 
<TypeOfDefence name="Rock">    <value>Rock</value></TypeOfDefence> 
+1

您是否將visual studio中的文件標記爲部署?選擇該文件,然後在屬性窗格中查看與其關聯的部署操作。 – Gonzix

+0

是的,它被標記,但沒有任何反應。無論如何感謝 –

回答

3

您必須將文件放入資源/資源以使其在運行時可用。您可以通過Resources.Load方法得到它們方法

然後將XML文件作爲TextAssets加載。

+0

非常感謝!它確實有幫助。 –

相關問題