Как сохранить Texture / Texture2D или другой объект Unity в локальном хранилище пользователя? - PullRequest
0 голосов
/ 22 января 2019

Я хочу хранить некоторую информацию для приложения (кеш), которая будет загружена с сервера. Я знаю, что могу сериализовать примитивы и хранить их как JSON или двоичные файлы. Но что я могу сделать с Texture / Texture2D / AudioClip? Также может быть проблема, потому что я хочу хранить их как большой класс объектов (созданный мной). Большое спасибо за любой ответ. Извините за такой глупый вопрос, я новичок в Unity и C # и стараюсь изо всех сил.

Я пытался создать двоичный файл из текстуры и сохранить его, но он не удался.

[Serializable]
public class Book
{
    public class Page
    {
        public class Size
        {
            public float X { get; set; }
            public float Y { get; set; }
        }

        public class CustomAnimation
        {
            public Texture[] Images { get; set; }
            public Size Size { get; set; }
        }

        public int Id { get; set; }
        public Texture Background { get; set; }
        public CustomAnimation[] Animations { get; set; }
        public AudioClip AudioClip { get; set; }
    }

    public Page[] Pages { get; set; }
}

Это пример моей структуры. Хотелось бы узнать, возможно ли это как-то хранить на устройстве или нет

Ответы [ 2 ]

0 голосов
/ 22 января 2019

При загрузке текстуры используйте объект WWW для загрузки текстуры. Он кеширует файл, который вы можете загрузить, используя следующий метод.

https://docs.unity3d.com/ScriptReference/WWW.LoadFromCacheOrDownload.html

Как только файл загружен, вы можете использовать Application.persistentDataPath метод для извлечения файлов текстуры. Они будут загружены в полном разрешении.

https://docs.unity3d.com/ScriptReference/Application-persistentDataPath.html

Я использовал этот метод для загрузки 360 фотографий с разрешением 4K, и он прекрасно работает!

Надеюсь, это поможет.

0 голосов
/ 22 января 2019

Есть два метода Texture2D.EncodeToPNG и Texture2D.EncodeToJPG, которые дают вам байтовый массив с двоичным представлением текстуры (Texture2D.LoadImage выполняет противоположный процесс).

Вы можете просто сохранить эти байты [] на диске.Если вы хотите встроить их в jsons, я бы предложил использовать схему, подобную кодированию BASE64, чтобы избавиться от непечатаемых символов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...