Unity WebGL остается localData после обновления приложения - PullRequest
0 голосов
/ 26 апреля 2018

Мы выпустили нашу игру на нескольких платформах, включая WebGL. Эта игра сохраняет некоторые локальные данные (язык приложения, локальные пользователи ...) в PlayerPrefs, используя API IndexedDB браузера. Хотя мы заметили, что после загрузки новой версии приложения на наш сервер, данные в PlayerPrefs исчезли. Есть ли способ сохранить эти данные после новой загрузки игры?

Я читал, что WebGL не может записать на диск, поэтому чтение / сохранение файла на диске невозможно. В некоторых темах об этой проблеме упоминается использование файлов cookie, но не удалось найти приличную документацию о том, как их использовать.

Есть ли достойное решение, чтобы это исправить? С уважением, Карстен

1 Ответ

0 голосов
/ 18 мая 2018

да Unity сохраняет все данные (включая PlayerPrefs) в IndexedDB. Вы можете увидеть эти файлы в Chrome DevTools в разделе «Приложение»: Storage-> IndexedDB -> /idbfs {{YOUR SERVER}} -> FILE_DATA

Если вы создаете новую сборку с другой версией Unity или с другой машиной, значение хеш-значения которой изменяется. Таким образом, сохраненные файлы из старой сборки не могут быть найдены Applicaton.persistentDataPath

Обходной путь можно использовать LocalStorage из вашего браузера, если вы сохраняете только строки или числа. Вы можете написать некоторые функции javascript (например, в тегах <script> в файле шаблона) для хранения там ваших текстовых данных - это очень похоже на PlayerPrefs:

var saveData = function(yourkey, yourdata){
    localStorage.setItem(yourkey, yourdata);
}

для сохранения значений. И

var loadData = function(yourkey){
    localStorage.getItem(yourkey);
}

чтобы получить их.

Создайте файл plugin.jslib в редакторе Unity и вызовите эти функции:

mergeInto(LibraryManager.library, {
    GetData: function(yourkey){
        if(typeof loadData  !== 'undefined'){
            loadData(Pointer_stringify(yourkey));
        } else {
            console.log("Javacript function not available...");
        }
    },
    SetData: function(yourkey, yourdata){
        if(typeof saveData !== 'undefined'){
            saveData(Pointer_stringify(yourkey), Pointer_stringify(yourdata));
        } else {
            console.log("Javacript function not available...");
        }
    }

});

Теперь вы можете вызывать их из скрипта, как указано здесь

...