Поэтому, я создал тестовый пример, код которого привел ниже.
Глюк заключается в том, что
в режиме запуска сцены (ну когда тестируем сцену - кнопка плей вверху) текст на сцене изменяется только при переключении экрана юнити (alt+tab), на любое другое приложение - блокнот, браузер, что угодно
в режиме билда или запуска игры текст вообще не изменяется
Вот видео, где я показываю как переключаюсь с экрана юнити на блокнот и только тогда текст на сцене изменяется.
Очень странный глюк. Как его исправить?
https://youtu.be/MCLSbT-cj1k
[youtube]https://youtu.be/MCLSbT-cj1k[/youtube]
Файлы
XMLReader - читает настройки из xml
Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Xml;
public static class XMLReader
{
public static string GetXMLValue(string pathToXMLFile, string NodeName1, string NodeName2)
{
// Загрузить xml файл из папки Resources (передаем путь и название файла без расширения xml).
TextAsset textAsset = Resources.Load<TextAsset>(pathToXMLFile);
// Загрузить XML-документ из текстового файла.
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(textAsset.text);
// Найти узел.
XmlNode node = xmlDoc.SelectSingleNode(NodeName1+"/"+NodeName2);
string nodeValue = node.InnerText;
return nodeValue;
}
}
using System.Collections.Generic;
using UnityEngine;
using System.Xml;
public static class XMLReader
{
public static string GetXMLValue(string pathToXMLFile, string NodeName1, string NodeName2)
{
// Загрузить xml файл из папки Resources (передаем путь и название файла без расширения xml).
TextAsset textAsset = Resources.Load<TextAsset>(pathToXMLFile);
// Загрузить XML-документ из текстового файла.
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(textAsset.text);
// Найти узел.
XmlNode node = xmlDoc.SelectSingleNode(NodeName1+"/"+NodeName2);
string nodeValue = node.InnerText;
return nodeValue;
}
}
XMLWriter пишет настройки в xml
Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Xml;
using System.IO;
public static class XMLWriter
{
public static void SetXMLValue(string pathToXMLFile, string nodeName1, string nodeName2, string nodeName2Value)
{
// Загрузить xml файл из папки Resources (передаем путь и название файла без расширения xml).
TextAsset textAsset = Resources.Load<TextAsset>(pathToXMLFile);
// Загрузить XML-документ из текстового файла.
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(textAsset.text);
// Найти узел.
XmlNode node = xmlDoc.SelectSingleNode("/"+nodeName1+"/"+nodeName2);
node.InnerText = nodeName2Value;
File.WriteAllText(Application.dataPath + "/Resources/"+pathToXMLFile+".xml", xmlDoc.OuterXml);
}
}
using System.Collections.Generic;
using UnityEngine;
using System.Xml;
using System.IO;
public static class XMLWriter
{
public static void SetXMLValue(string pathToXMLFile, string nodeName1, string nodeName2, string nodeName2Value)
{
// Загрузить xml файл из папки Resources (передаем путь и название файла без расширения xml).
TextAsset textAsset = Resources.Load<TextAsset>(pathToXMLFile);
// Загрузить XML-документ из текстового файла.
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(textAsset.text);
// Найти узел.
XmlNode node = xmlDoc.SelectSingleNode("/"+nodeName1+"/"+nodeName2);
node.InnerText = nodeName2Value;
File.WriteAllText(Application.dataPath + "/Resources/"+pathToXMLFile+".xml", xmlDoc.OuterXml);
}
}
DataHolder - вызывает XMLReader, читает настройки из xml и хранит их в своих полях.
Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public static class DataHolder
{
public static string gameLanguage;
public static void UpdateData()
{
try
{
gameLanguage=XMLReader.GetXMLValue("GameSettings", "GameSettings", "game_language");
}
catch
{
Debug.LogError("Возникло исключение!");
}
Debug.Log("Вызов метода UpdateData в DataHolder. Поле gameLanguage="+gameLanguage);
}
}
using System.Collections.Generic;
using UnityEngine;
public static class DataHolder
{
public static string gameLanguage;
public static void UpdateData()
{
try
{
gameLanguage=XMLReader.GetXMLValue("GameSettings", "GameSettings", "game_language");
}
catch
{
Debug.LogError("Возникло исключение!");
}
Debug.Log("Вызов метода UpdateData в DataHolder. Поле gameLanguage="+gameLanguage);
}
}
Скрипт на сцене - обрабатывающий клик по кнопке, для чтения/записи в xml
Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class SetGameLanguageScript : MonoBehaviour
{
private GameObject gameLanguageTextObject;
private Text gameLanguageText;
private void Start()
{
DataHolder.UpdateData();
gameLanguageTextObject = GameObject.Find("GameLanguageText");
gameLanguageText = gameLanguageTextObject.GetComponent<Text>();
Debug.Log("Старт сцены DataHolder.gameLanguage="+DataHolder.gameLanguage);
}
private void Update()
{
//DataHolder.UpdateData();
gameLanguageText.text =DataHolder.gameLanguage;
//Debug.Log(DataHolder.gameLanguage);
}
public void ReadXMLButtonButtonClick()
{
DataHolder.UpdateData();
gameLanguageText.text =DataHolder.gameLanguage;
Debug.Log("Клик по кнопке чтения из XML DataHolder.gameLanguage="+DataHolder.gameLanguage);
}
public void WriteRUXMLButtonButtonClick()
{
XMLWriter.SetXMLValue("GameSettings", "GameSettings", "game_language","RU");
Debug.Log("Клик по кнопке записи значения RU в XML");
}
public void WriteENGMLButtonButtonClick()
{
XMLWriter.SetXMLValue("GameSettings", "GameSettings", "game_language","ENG");
Debug.Log("Клик по кнопке записи значения ENG в XML");
}
}
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class SetGameLanguageScript : MonoBehaviour
{
private GameObject gameLanguageTextObject;
private Text gameLanguageText;
private void Start()
{
DataHolder.UpdateData();
gameLanguageTextObject = GameObject.Find("GameLanguageText");
gameLanguageText = gameLanguageTextObject.GetComponent<Text>();
Debug.Log("Старт сцены DataHolder.gameLanguage="+DataHolder.gameLanguage);
}
private void Update()
{
//DataHolder.UpdateData();
gameLanguageText.text =DataHolder.gameLanguage;
//Debug.Log(DataHolder.gameLanguage);
}
public void ReadXMLButtonButtonClick()
{
DataHolder.UpdateData();
gameLanguageText.text =DataHolder.gameLanguage;
Debug.Log("Клик по кнопке чтения из XML DataHolder.gameLanguage="+DataHolder.gameLanguage);
}
public void WriteRUXMLButtonButtonClick()
{
XMLWriter.SetXMLValue("GameSettings", "GameSettings", "game_language","RU");
Debug.Log("Клик по кнопке записи значения RU в XML");
}
public void WriteENGMLButtonButtonClick()
{
XMLWriter.SetXMLValue("GameSettings", "GameSettings", "game_language","ENG");
Debug.Log("Клик по кнопке записи значения ENG в XML");
}
}