Unity WebGL Простой JSON

Я пытаюсь импортировать текст в свой скрипт Unity с помощью WebGL, но похоже, что в WebGL он не может найти сам файл JSON. Я сохранил файл в StreamingAssets. Как это исправить?

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

public class ReadScene : MonoBehaviour {
    public string jsonFile;
    JSONNode itemsData;
    string path;

    public Text sceneText;

    // Start is called before the first frame update
    void Start () {

        path = Path.Combine (Application.streamingAssetsPath, "Settings.json");
        if (File.Exists (path)) {
            jsonFile = File.ReadAllText (path);
            DeserializePages ();
        } else {
            sceneText.gameObject.SetActive(false);
        }
    }


    public void DeserializePages () {
        itemsData = JSON.Parse (jsonFile);
        var parseJSON = JSON.Parse (jsonFile);

        sceneText.text = parseJSON["Scene01"].Value;

    }


}

Также я попытался изменить расположение папки на «Ресурсы» и все еще сталкиваюсь с той же проблемой.

Инструменты для веб-скрапинга с открытым исходным кодом: Python Developer Toolkit
Инструменты для веб-скрапинга с открытым исходным кодом: Python Developer Toolkit
Веб-скрейпинг, как мы все знаем, это дисциплина, которая развивается с течением времени. Появляются все более сложные средства борьбы с ботами, а...
Калькулятор CGPA 12 для семестра
Калькулятор CGPA 12 для семестра
Чтобы запустить этот код и рассчитать CGPA, необходимо сохранить код как HTML-файл, а затем открыть его в веб-браузере. Для этого выполните следующие...
ONLBest Online HTML CSS JAVASCRIPT Training In INDIA 2023
ONLBest Online HTML CSS JAVASCRIPT Training In INDIA 2023
О тренинге HTML JavaScript :HTML (язык гипертекстовой разметки) и CSS (каскадные таблицы стилей) - две основные технологии для создания веб-страниц....
Как собрать/развернуть часть вашего приложения Angular
Как собрать/развернуть часть вашего приложения Angular
Вам когда-нибудь требовалось собрать/развернуть только часть вашего приложения Angular или, возможно, скрыть некоторые маршруты в определенных средах?
Запуск PHP на IIS без использования программы установки веб-платформы
Запуск PHP на IIS без использования программы установки веб-платформы
Установщик веб-платформы, предлагаемый компанией Microsoft, перестанет работать 31 декабря 2022 года. Его закрытие привело к тому, что мы не можем...
Оптимизация React Context шаг за шагом в 4 примерах
Оптимизация React Context шаг за шагом в 4 примерах
При использовании компонентов React в сочетании с Context вы можете оптимизировать рендеринг, обернув ваш компонент React в React.memo сразу после...
1
0
76
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Из Application.streamingAssetsPath

Невозможно получить доступ к папке StreamingAssets на платформах WebGL и Android. В WebGL нет доступа к файлам. Android использует сжатый файл .apk. Эти платформы возвращают URL. Используйте класс UnityWebRequest для доступа к активам.

Tbh Я даже не знаю прямо сейчас, вводит ли это No file access is available on WebGL просто в заблуждение или действительно означает, что нет доступа к StreamingAssets. Я предполагаю, что это просто плохо сформулировано и просто означает, что вы не можете получить доступ к какому-либо файлу/каталогу напрямую, но вы все равно можете пройти через UnityWebRequest.Get как

IEnumerator Start () 
{
    sceneText.gameObject.SetActive(false);

    path = Path.Combine(Application.streamingAssetsPath, "Settings.json");

    using(var request = UnityWebRequest.Get(path))
    {
        yield return request.SendWebRequest();

        if (!request.result == UnityWebRequest.Result.Success)
        {
            Debug.LogError("Error: " + result.error);
            yield break;
        }
       
        jsonFile = webRequest.downloadHandler.text;
        DeserializePages();
    }
}

private void DeserializePages() 
{
    itemsData = JSON.Parse (jsonFile);

    sceneText.text = itemsData["Scene01"].Value;
    sceneText.gameObject.SetActive(true);
}

Другие вопросы по теме