2013-09-26 3 views
1

Я использую файлы XML для хранения некоторых данных, поэтому его легче будет локализовать на другом языке, поскольку у Unity есть проблемы с resx, я должен использовать XML.Unity3d не видит файлы XML в папке проекта после сборки

В UnityEditor все работает отлично, но когда я его построил, он перестает работать при первом использовании XML.

Я думаю, что Unity просто не может добраться до файлов XML по какой-либо причине, потому что, когда я пытаюсь вручную поместить файлы XML в папку «Мои документы» и использовать ссылку на них, это сработало.

это текущий путь к XML-файлу:

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

прекрасно работает в UnityEditor, не работает, если строить.

это еще один (Но нужно вручную поместить их здесь):

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

Но мне не нравится, что, может быть, есть какой-то способ заставить его работать?

Я знаю, что могу автоматизировать это, но мне все еще не нравится это. Я думал, что по умолчанию он будет бинарным, как resx (.resources).

Какое оптимальное решение в этой ситуации? Если у меня нет выбора, я должен использовать папку «мои документы»?

Заранее спасибо.

--------------------- При необходимости введите код .------------------- -----

Чтобы открыть 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

Вы отметили свои файлы в визуальной студии для развертывания? Выберите файл и в панели свойств посмотрите, какое действие развертывания связано с ним. – Gonzix

+0

Да, это было отмечено, но ничего не происходит. Спасибо в любом случае –

ответ

3

Вы должны поместить свои файлы в Assets/Resources, чтобы сделать их доступными во время выполнения. Вы можете получить их через метод Resources.Load

Файлы XML затем загружаются как TextAssets.

+0

Большое спасибо! Это действительно помогло. –

Смежные вопросы