К сожалению, достаточно заезженный вопрос, который у меня не работает. Делаю для своей игры переводчик по оффициальному тутору юнити, но раз у меня игра на андроид, то пришлось добавить несколько строк, тк файлы без WWW не прочесть. На всякий случай прилагаю не отрезок, а весь код:
using System.Collections.Generic;
using UnityEngine;
using System.IO;
public class LocalizationManager : MonoBehaviour {
public static LocalizationManager instance;
private Dictionary<string, string> localizedText;
private bool isReady = false;
private string missingTextString = "Localized Text not found";
// Use this for initialization
void Awake () {
if (instance == null)
{
instance = this;
}
else if (instance != this)
{
Destroy(gameObject);
}
DontDestroyOnLoad(gameObject);
}
public void LoadLocalizedText(string fileName)
{
localizedText = new Dictionary<string, string>();
string filePath = Path.Combine(Application.streamingAssetsPath, "Languages/" + fileName + ".json");
if (File.Exists(filePath))
{
#if UNITY_ANDROID && !UNITY_EDITOR
WWW reader = new WWW(filePath);
while (!reader.isDone) { }
string dataAsJson = reader.text;
LocalizationData loadedData = JsonUtility.FromJson<LocalizationData>(dataAsJson);
Debug.Log("Translate is done on Android");
#endif
#if UNITY_EDITOR
string dataAsJson = File.ReadAllText(filePath);
LocalizationData loadedData = JsonUtility.FromJson<LocalizationData>(dataAsJson);
Debug.Log("Translate is done on Editor");
#endif
for (int i = 0; i < loadedData.items.Length; i++)
{
localizedText.Add(loadedData.items[i].key, loadedData.items[i].value);
}
Debug.Log("Data loaded, dictionary contains: " + localizedText.Count + " entries");
}
else
{
Debug.LogError("Can not find file!");
}
isReady = true;
}
public string GetLocalizedValue(string key)
{
string result = missingTextString;
if (localizedText.ContainsKey(key))
{
result = localizedText[key];
}
return result;
}
public bool GetIsReady()
{
return isReady;
}
}
При запуске через юнити эдитор, все работает, а при запуске с телефона-андроид пишет на всех текстовых полях "Localized Text not found". Подскажите, что не так?
Спустя несколько дней, как я начал сходить с ума по этой проблеме, нашлось решение. Все дело в цикле while (!reader.isDone) { }
. Видимо, он криво выполнялся и вел к тому, что файл не читался. Прилагаю свой рабочий код:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
public class LocalizationManager : MonoBehaviour {
public static LocalizationManager instance;
private Dictionary<string, string> localizedText;
private bool isReady = false;
private string missingTextString = "Localized Text not found";
// Use this for initialization
void Awake () {
if (instance == null)
{
instance = this;
}
else if (instance != this)
{
Destroy(gameObject);
}
DontDestroyOnLoad(gameObject);
}
public void LoadLocalizedText(string fileName)
{
localizedText = new Dictionary<string, string>();
string filePath = Path.Combine(Application.streamingAssetsPath, "Languages/" + fileName + ".json");
Debug.Log(filePath);
if (File.Exists(filePath))
{
string dataAsJson = File.ReadAllText(filePath);
LocalizationData loadedData = JsonUtility.FromJson<LocalizationData>(dataAsJson);
Debug.Log("Translate is done on Editor");
for (int i = 0; i < loadedData.items.Length; i++)
{
localizedText.Add(loadedData.items[i].key, loadedData.items[i].value);
}
Debug.Log("Data loaded, dictionary contains: " + localizedText.Count + " entries");
}
else
{
Debug.LogError("Can not find file!");
}
isReady = true;
}
IEnumerator LoadLocalizedTextOnAndroid(string fileName)
{
localizedText = new Dictionary<string, string>();
string filePath = Path.Combine(Application.streamingAssetsPath, fileName + ".json");
WWW reader = new WWW(filePath);
yield return reader;
Debug.LogWarning(filePath);
if (reader.error != null)
{
Debug.LogWarning(reader.error);
yield break;
}
string dataAsJson = reader.text;
LocalizationData loadedData = JsonUtility.FromJson<LocalizationData>(dataAsJson);
Debug.Log("Translate is done on Android");
for (int i = 0; i < loadedData.items.Length; i++)
{
localizedText.Add(loadedData.items[i].key, loadedData.items[i].value);
Debug.Log("KEYS:" + loadedData.items[i].key);
}
isReady = true;
}
public void SetLanguage(string fileName)
{
if (Application.platform == RuntimePlatform.WindowsEditor)
LoadLocalizedText(fileName);
else if (Application.platform == RuntimePlatform.OSXEditor)
LoadLocalizedText(fileName);
else if (Application.platform == RuntimePlatform.Android)
StartCoroutine("LoadLocalizedTextOnAndroid", fileName);
}
public string GetLocalizedValue(string key)
{
string result = missingTextString;
if (localizedText.ContainsKey(key))
{
result = localizedText[key];
}
return result;
}
public bool GetIsReady()
{
return isReady;
}
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
этот код отображает фото из датабейз Nortwind из таблицы Categories
В триггерах, сеттерах и т д не очень силён, подскажите пожалуйста, как можно реализовать стиль, чтобы при наведении на кнопку, она постепенно...
Не видно ui обьектов в canvasУ меня 2 canvas, я не вижу обьектов на втором canvas они невидимые, почему так