Я пытаюсь импортировать текст в свой скрипт 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;
}
}
Также я попытался изменить расположение папки на «Ресурсы» и все еще сталкиваюсь с той же проблемой.
Из 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);
}