Задать вопрос
@ArtemCheck

Unity Файл Json не загружается на Android. Специфичный путь файла?

Всем привет!
Помогите, уже голова кружится.
Проблема вот в чем, сделал мультиязычность в игре на unity с помощью json файлов в папке StreamingAssets. В редакторе (editor) все работает круто, а при установке на телефон json Файлы не подгружают текст. После целого дня гугления появилась мысль, что это из-за того, что необходимо как то специфично загружать файлы.
Перепробовал кучу вариантов, ноль результата.
Помогите, прикладываю код:

using System;
using System.IO;
using System.Collections.Generic;
using UnityEngine;

public class LocalizationManager : MonoBehaviour
{
    private string currentLanguage;
    private Dictionary<string, string> localizedText;
    public static bool isReady = false;

    public delegate void ChangeLangText();
    public event ChangeLangText OnLanguageChanged;

    private void Awake()
    {
        if (!PlayerPrefs.HasKey("Language"))
        {
            if (Application.systemLanguage == SystemLanguage.Russian || Application.systemLanguage == SystemLanguage.Belarusian)
            {
                PlayerPrefs.SetString("Language", "ru_RU");
            }else if (Application.systemLanguage == SystemLanguage.English)
            {
                PlayerPrefs.SetString("Language", "en_US");
            }
            else if (Application.systemLanguage == SystemLanguage.Ukrainian)
            {
                PlayerPrefs.SetString("Language", "uk_UA");
            }
            else if (Application.systemLanguage == SystemLanguage.Polish)
            {
                PlayerPrefs.SetString("Language", "pl_PL");
            }
            else if (Application.systemLanguage == SystemLanguage.German)
            {
                PlayerPrefs.SetString("Language", "de_DE");
            }
            else if (Application.systemLanguage == SystemLanguage.French)
            {
                PlayerPrefs.SetString("Language", "fr_FR");
            }
            else if (Application.systemLanguage == SystemLanguage.Portuguese)
            {
                PlayerPrefs.SetString("Language", "pt_PT");
            }
            else if (Application.systemLanguage == SystemLanguage.Spanish)
            {
                PlayerPrefs.SetString("Language", "es_ES");
            }else
            {
                PlayerPrefs.SetString("Language", "en_US");
            }
        }
        currentLanguage = PlayerPrefs.GetString("Language");
        LoadLocalizedText(currentLanguage);
    }

    public void LoadLocalizedText(string langName)
    {
        //string path = Application.streamingAssetsPath + "/Languages/" + langName + ".json";
        string dataAsJson;

        if (Application.platform == RuntimePlatform.Android)
        {
            string path = "file://" + Application.streamingAssetsPath + "/Languages/" + langName + ".json";
#pragma warning disable 618
            WWW reader = new WWW(path);
            while (!reader.isDone) { }

            dataAsJson = reader.text;
        }
        else
        {
            string path = Application.streamingAssetsPath + "/Languages/" + langName + ".json";
            dataAsJson = File.ReadAllText(path);
        }

        LocalizationData loadedData = JsonUtility.FromJson<LocalizationData>(dataAsJson);
        localizedText = new Dictionary<string, string>();
        for (int i = 0; i < loadedData.items.Length; i++)
        {
            localizedText.Add(loadedData.items[i].key, loadedData.items[i].value);
        }

        PlayerPrefs.SetString("Language", langName);
        
        isReady = true;

        if (OnLanguageChanged != null)
        {
            OnLanguageChanged.Invoke();
        }
    }

    public string GetLocalizedValue(string key)
    {
        if (localizedText.ContainsKey(key))
        {
            return localizedText[key];
        }
        else
        {
            throw new Exception("Localized text with key \"" + key + "\" not found");
        }
    }

    public string CurrentLanguage
    {
        get
        {
            return currentLanguage;
        }set
        {
            PlayerPrefs.SetString("Language", value);
            currentLanguage = PlayerPrefs.GetString("Language");
            LoadLocalizedText(currentLanguage);
        }
    }

    public bool IsReady
    {
        get
        {
            return isReady;
        }
    }
}


Проблема, мне кажется, именно в этой части. Но если бы я точно знал, я бы не задал вам этот вопрос
string dataAsJson;

        if (Application.platform == RuntimePlatform.Android)
        {
            string path = "file://" + Application.streamingAssetsPath + "/Languages/" + langName + ".json";
#pragma warning disable 618
            WWW reader = new WWW(path);
            while (!reader.isDone) { }

            dataAsJson = reader.text;
        }
        else
        {
            string path = Application.streamingAssetsPath + "/Languages/" + langName + ".json";
            dataAsJson = File.ReadAllText(path);
        }


Спасибо
  • Вопрос задан
  • 402 просмотра
Подписаться 1 Простой 2 комментария
Решения вопроса 1
@ArtemCheck Автор вопроса
Удалось решить вопрос.
1. Переносим
string dataAsJson;
наверх к остальным переменным
public string dataAsJson;

2. Затем заменяем тот кусок кода на этот:
string path = System.IO.Path.Combine(Application.streamingAssetsPath, "Languages/" + langName + ".json");
        if (Application.platform == RuntimePlatform.Android)
        {
#pragma warning disable 618
            WWW reader = new WWW(path);
            while (!reader.isDone) { }
            dataAsJson = reader.text;
        }
        else
        {
            dataAsJson = System.IO.File.ReadAllText(path);
        }


ПРОФИТ!
Надеюсь для тех, кто столкнется с этой проблемой, мой ответ поможет
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы