Как скопировать файл Json из Assets / Resources / во внутреннее хранилище устройства Android (постоянные данные)? [Unity Android] - PullRequest
0 голосов
/ 29 мая 2020

Я хочу скопировать один файл json из каталога Unity's Assets/Resources/ во внутреннюю постоянную память устройства Android (INTERNAL STORAGE/Android/data/<packagename>/files/) только один раз в начале игры. Я просмотрел весь inte rnet с решениями, предлагающими использовать ресурсы Streaming и UnityWebRequests или WWW class, который сейчас устарел. Я пробовал все уже часами. И не нашел точных решений, но получил только нулевые ссылки и каталог не найден.

Я добавил свой файл json в <UnityProject>/Assets/Resources/StreamingAssets/, но он, похоже, не обнаруживает никаких потоковых ресурсов. Я понимаю, что apk - это zip-файл, и поэтому я могу только читать содержимое потоковых ресурсов, но я не могу найти решение для этого.

Как только я получу свой json из потокового ресурса, я наконец могу добавить его в Application.persistentDataPath.

ОБНОВЛЕНИЕ Я действительно понял это,

     public void LoadFromResources() {
 {mobilePath = "StreamingAssets/"; mobilePath = mobilePath + "stickerJson" + ".json";
 string newPath = mobilePath.Replace(".json", "");
 TextAsset ta = Resources.Load<TextAsset>(newPath);
 string json = ta.text; Debug.Log(json); System.IO.File.WriteAllText(Application.persistentDataPath + "/stickers.json", json);
 }
}

1 Ответ

2 голосов
/ 29 мая 2020

Чтобы скопировать файл, вам нужно только иметь информацию о файле, а затем создать новый в другом месте.

Итак, если вы поместили свой json файл в каталог ресурсов, вы можете восстановить его, например документация говорит:

//Load text from a JSON file (Assets/Resources/Text/jsonFile01.json)
var jsonTextFile = Resources.Load<TextAsset>("Text/jsonFile01");
//Then use JsonUtility.FromJson<T>() to deserialize jsonTextFile into an object

Затем вам нужно только создать свой файл android в вашем persistentDataPath, как @Iggy говорит в комментариях, делая:

System.IO.File.WriteAllText(Path.Combine(Application.persistentDataPath, "file.txt"), jsonTextFile);

Примечание: не совсем уверен, но в других случаях я думаю, что папка StreamingAssets должна находиться внутри Assets, а не внутри ресурсов.

...