2013-09-26 2 views
1

XML 파일을 사용하여 일부 데이터를 저장하므로 유니티에 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)와 같은 이진 파일이 될 것이라고 생각했다.

그 상황에서 가장 좋은 해결책은 무엇입니까? 선택의 여지가 없다면 "내 문서"폴더를 사용해야합니까?

미리 감사드립니다.

--------------------- 필요한 경우 여기에 몇 가지 코드가 있습니다.

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); 
    } 
} 

이 작업을하려면 : -----

는 XML 파일을 열려면 내가 이것을 사용

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

런타임에 파일을 사용할 수있게하려면 파일을 Assets/Resources에 넣어야합니다. Resources.Load 메소드를 통해 가져올 수 있습니다.

XML 파일이 TextAssets로로드됩니다.

+0

대단히 고마워요! 정말 도움이되었습니다. –

관련 문제