Unity playerprefs что это
PlayerPrefs
class in UnityEngine
Success!
Thank you for helping us improve the quality of Unity Documentation. Although we cannot accept all submissions, we do read each suggested change from our users and will make updates where applicable.
Submission failed
For some reason your suggested change could not be submitted. Please try again in a few minutes. And thank you for taking the time to help us improve the quality of Unity Documentation.
Description
`PlayerPrefs` is a class that stores Player preferences between game sessions. It can store string, float and integer values into the user’s platform registry.
Unity stores `PlayerPrefs` data differently based on which operating system the application runs on. In the file paths given on this page, the company name and product name are the names you set in Unity’s Player Settings.
Standalone Player storage location
On macOS, PlayerPrefs are stored in
On Windows, PlayerPrefs are stored in HKCU\Software\ExampleCompanyName\ExampleProductName key.
On Linux, PlayerPrefs are stored in
On Windows Phone 8, Unity stores PlayerPrefs data in the application’s local folder. See Directory.localFolder for more information.
On WebGL, Unity stores PlayerPrefs data using the browser’s IndexedDB API. For more information, see IndexedDB.
In-Editor Play mode storage location
On Windows, PlayerPrefs are stored in HKCU\Software\Unity\UnityEditor\ExampleCompanyName\ExampleProductName key. Windows 10 uses the application’s PlayerPrefs names. For example, Unity adds a DeckBase string and converts it into DeckBase_h3232628825. The application ignores the extension.
Unity stores PlayerPrefs in a local registry, without encryption. Do not use PlayerPrefs data to store sensitive data.
Static Methods
DeleteAll | Removes all keys and values from the preferences. Use with caution. |
DeleteKey | Removes the given key from the PlayerPrefs. If the key does not exist, DeleteKey has no impact. |
GetFloat | Returns the value corresponding to key in the preference file if it exists. |
GetInt | Returns the value corresponding to key in the preference file if it exists. |
GetString | Returns the value corresponding to key in the preference file if it exists. |
HasKey | Returns true if the given key exists in PlayerPrefs, otherwise returns false. |
Save | Writes all modified preferences to disk. |
SetFloat | Sets the float value of the preference identified by the given key. You can use PlayerPrefs.GetFloat to retrieve this value. |
SetInt | Sets a single integer value for the preference identified by the given key. You can use PlayerPrefs.GetInt to retrieve this value. |
SetString | Sets a single string value for the preference identified by the given key. You can use PlayerPrefs.GetString to retrieve this value. |
Is something described here not working as you expect it to? It might be a Known Issue. Please check with the Issue Tracker at issuetracker.unity3d.com.
Copyright ©2021 Unity Technologies. Publication Date: 2021-12-03.
PlayerPrefs
class in UnityEngine
Успех!
Благодарим вас за то, что вы помогаете нам улучшить качество документации по Unity. Однако, мы не можем принять любой перевод. Мы проверяем каждый предложенный вами вариант перевода и принимаем его только если он соответствует оригиналу.
Ошибка внесения изменений
По определённым причинам предложенный вами перевод не может быть принят. Пожалуйста попробуйте снова через пару минут. И выражаем вам свою благодарность за то, что вы уделяете время, чтобы улучшить документацию по Unity.
Описание
Stores and accesses player preferences between game sessions.
Editor/Standalone
В Mac OS X параметры игрока (player prefs) хранятся в папке
В Mac OS X параметры игрока (player prefs) хранятся в папке
On Linux, PlayerPrefs can be found in
/.config/unity3d/[CompanyName]/[ProductName] again using the company and product names specified in the Project Settings.
On Windows Store Apps, Player Prefs can be found in %userprofile%\AppData\Local\Packages\[ProductPackageId]>\LocalState\playerprefs.dat
On Windows Phone 8, Player Prefs can be found in application’s local folder, See Also: Windows.Directory.localFolder
On Android data is stored (persisted) on the device. The data is saved in SharerPreferences. C#/JavaScript, Android Java and Native code can all access the PlayerPrefs data. The PlayerPrefs data is physically stored in /data/data/pkg-name/shared_prefs/pkg-name.xml.
WebPlayer
On Web players, PlayerPrefs are stored in binary files in the following locations:
Mac OS X:
Windows: %APPDATA%\Unity\WebPlayerPrefs
В Mac OS X параметры игрока (player prefs) хранятся в папке
There is one preference file per Web player URL and the file size is limited to 1 megabyte. If this limit is exceeded, SetInt, SetFloat and SetString will not store the value and throw a PlayerPrefsException.
Русские Блоги
Unity PlayerPrefs Хранилище данных Чтение PlayerPrefs
Хранение данных Playerprefs и чтение Unity Playerprefs. Unity3d предоставляет класс для локального постоянного сохранения и чтения PlayerPrefs. Принцип работы очень прост, сохраняйте данные в файле в виде пар ключ-значение, а затем программа может получить последнее сохраненное значение на основе этого имени. В этом разделе описывается, как использовать PlayerPrefs для хранения и чтения данных следующим образом.
1. Основные концепции
PlayerPrefs:
Stores and accesses player preferences between game sessions.
Сохраните и прочтите тип:
Класс PlayerPrefs поддерживает сохранение и чтение трех типов данных: с плавающей запятой, целых чисел и строк. Соответствующие функции:
1) SetInt (); сохранять целочисленные данные;
2) GetInt (); прочитать данные шейпинга;
3) SetFloat (); сохранить данные с плавающей запятой;
4) GetFlost (); чтение данных с плавающей запятой;
5) SetString (); сохранить строковые данные;
6) GetString (); чтение строковых данных;
Использование этих функций в основном одинаковое: используйте Set для сохранения и Get для чтения.
2. Считывание данных из хранилища данных PlayerPrefs из PlayerPrefs
Откройте Unity, создайте новый пустой проект, а затем интерфейс Unity, как показано ниже.
Создайте новый сценарий в проекте, сценарий может называться «PlayerprefsTest», как показано ниже.
Выберите сценарий «PlayerprefsTest», дважды щелкните сценарий или щелкните правой кнопкой мыши «Открыть проект C #», как показано ниже.
Отредактируйте код в открытом скрипте DictionaryTest. Сначала установите переменные хранения и чтения, затем введите и сохраните данные через OnGUI и, наконец, прочтите сохраненные данные. Конкретный код и описание кода следующие
Конкретный код скрипта выглядит следующим образом:
public class PlayerprefsTest : MonoBehaviour <
private string set_NAME = string.Empty;
private string get_NAME = string.Empty;
set_NAME = GUILayout.TextArea(set_NAME, 200, GUILayout.Width(50));
Если (GUILayout.Button («Данные хранилища»))
// Сохраняем введенное имя локально и назовем его _NAME;
Если (GUILayout.Button («Прочитать данные»))
// Считываем данные с именем _NAME в локальных данных;
GUILayout.Label («Имя, которое вы ввели:» + get_NAME);
После правильной компиляции сценария вернитесь в интерфейс Unity, создайте новый «GameObject» в сцене, а затем назначьте сценарий «PlayerprefsTest» для «GameObject», как показано на рисунке ниже.
Запустите сцену, вы увидите, что результат печати на консоли соответствует ожиданиям, как показано на рисунке ниже.
Как сохранять и загружать игры в Unity
В этом уроке вы узнаете, как сохранять и загружать игру в Unity, используя PlayerPrefs, Serialization и JSON.
Игры становятся все длиннее и интереснее, а некоторые из них занимают более 100 часов игрового времени. Практически невозможно представить, что игроки могут выполнить все то, что может предложить им игра, всего за один подход. Вот почему возможность для игрока сохранять свою игру — это одна из самых важных функций, которые должна иметь каждая большая игра, даже если это простой платформер.
Но как создать файл сохранения и что в нем должно быть? Нужно ли при этом использовать файл сохранения, чтобы отслеживать настройки плеера? Или может лучше использовать облачное хранилище для сохранений, чтобы в случае необходимости их можно было позже загрузить на другое устройство?
В этом уроке вы узнаете:
Предполагается, что у вас есть некоторые базовые практические знания о том, как работает Unity. Однако, если у вас возникнут какие-либо вопросы в ходе прохождения этого урока, то вы всегда можете освежить память воспользовавшись данным разделом. Кроме того, даже если вы новичок в C#, у вас не должно возникнуть никаких проблем, за исключением нескольких концепций, которые могут потребовать более детального изучения.
Примечание: Если вы новичок в Unity или хотите приобрести больше навыков, то вам следует ознакомиться с другими учебниками по Unity, где вы можете узнать много интересной и полезной информации.
Введение
Загрузите стартовый проект здесь. Вы будете использовать специальный код для сохранения и загрузки игры, а также изучите логику сохранения настроек игроков.
Важные концепции сохранения
Существует четыре ключевых понятия которыми можно охарактеризовать процесс сохранения в Unity:
PlayerPrefs: это специальная система кеширования для отслеживания простых настроек игрока между игровыми сессиями. Многие начинающие программисты ошибаются, думая, что они могут использовать этот инструмент в качестве системы сохранения игр. Его следует использовать только для отслеживания простых вещей, таких как графика, настройки звука, информация для входа в систему или другие основные данные, относящиеся к пользователю.
Сериализация: это своего рода магия, которая заставляет Unity корректно работать. Сериализация — это преобразование объекта в поток байтов. Чтобы лучше понимать, о чем идет речь посмотрите на этот рисунок:
Что такое «объект»? В этом случае «объект» — это любой скрипт или файл в Unity. Фактически, всякий раз, когда вы создаете сценарий MonoBehaviour, Unity использует сериализацию и десериализацию для преобразования этого файла в код C++, а затем обратно в код C#, который вы видите в окне inspector.
Примечание: Если вы являетесь Java-разработчиком или веб-разработчиком, возможно, вы знакомы с концепцией, известной как маршалинг. Сериализация и маршалинг являются синонимами, но в случае, однако между этими двумя понятиями существует большая разница. Сериализация подразумевает преобразование объекта из одной формы в другую (например, объект в байты), тогда как маршалинг — это получение параметров из одного места в другое.
Десериализация: Это процесс, противоположный сериализации, а именно преобразование потока байтов в объект.
JSON: Эта аббревиатура расшифровывается как JavaScript Object Notation, который является удобным форматом для отправки и получения данных, вне зависимости от языка. Например, у вас может быть веб-сервер, работающий на Java или PHP. Вы не можете просто отправить объект C#, но вы можете отправить JSON-версию этого объекта и позволить серверу воссоздать его локализованную версию. Вы узнаете больше об этом формате в последнем разделе, но сейчас важно просто понять, что это способ форматирования данных, чтобы сделать их мультиплатформенными для чтения (например, XML). При преобразовании в/и из JSON используются термины JSON-сериализация и JSON-десериализация соответственно.
Player Prefs
Проект, который вы скачали изначально настроен таким образом, что все, на чем вам нужно сосредоточится, — это логика сохранения и загрузки игр. Однако, если вам интересно, как все работает, то вы можете открыть все сценарии для более подробного изучения.
Откройте проект, который вы скачали, запустите сцену с именем Game и затем нажмите play.
Чтобы начать игру, нажмите кнопку «New Game». В этой игре вам необходимо использовать мышку для перемещения. Нажмите левую кнопку мыши, чтобы выстрелить и поразить цели (которые перемещаются вверх и вниз через различные промежутки времени), получать очки за каждое удачное попадание. Попробуйте и посмотрите, сколько очков вы сможете получить за 30 секунд. Чтобы вызвать меню в любое время, нажмите клавишу escape.
Эта игра довольна забавная и даже увлекательная, но без музыкального сопровождения немного скучновата. Возможно, вы заметили, что есть музыкальный переключатель, но он был выключен. Нажмите «Play», чтобы начать новую игру, но на этот раз нажмите «Music» и установите значение «On», чтобы вы могли услышать музыку, когда начнете игру. Убедитесь, что ваши колонки или наушники подключены!
Изменить настройки музыки было несложно, но если вы нажмете кнопку воспроизведения еще раз, то заметите проблему: музыка больше не воспроизводится. Чтобы исправить эту ошибку вам потребуется инструмент PlayerSettings.
Для начала создайте новый скрипт с именем PlayerSettings в папке Scripts. Поскольку вы будете использовать некоторые элементы пользовательского интерфейса, добавьте следующую строку вверху:
Именно они будут отслеживать объекты Toggle и AudioSource.
Далее добавьте следующую функцию:
Эти настройки означают:
Теперь сохраните изменения в вашем скрипте и вернитесь в Unity.
Добавьте скрипт PlayerSettings в GameObject и разверните пользовательский интерфейс GameObject. Далее вам нужно открыть меню GameObject, чтобы увидеть его дочерние элементы. Перетащите объект Music GameObject в поле Toggle сценария PlayerSettings, выберите GameObject Game и перетащите AudioSource в поле MyAudio.
Музыка настроена на работу во время игры (так как в функции «Awake» есть код), но вам все равно нужно добавить еще один код, если игрок меняет настройки во время игры. Для этого снова откройте скрипт PlayerSettings и добавьте следующую функцию:
Эти настройки означают почти то же самое, что и код, который вы написали ранее, за исключением того, что в этом случае есть одно важное отличие. Этот код сначала проверяет состояние переключателя музыки, а затем соответствующим образом обновляет сохраненную настройку. Для того, чтобы этот метод был вызван и, следовательно, чтобы он мог выполнять свою функцию, вам нужно установить метод обратного вызова в Toggle GameObject. Выберите MusicObject Music и перетащите GameObject Game поверх поля объекта в разделе OnValueChanged:
Теперь к раскрывающемуся списку, в котором в данный момент написано «No Function», и выберите PlayerSettings ⇒ ToggleMusic (). Таким образом, когда во время игры пользователь активирует кнопку переключения в меню, появится функция ToggleMusic.
Теперь у вас есть все необходимые настройки, которые нужны чтобы отслеживать опции звуков. Нажмите «Play» и попробуйте изменить настройки музыки, включив или выключив соответствующий переключатель в меню.
Сохранение игры
Согласитесь, возможности и настройка PlayerPrefs не вызывает больших затруднений в использовании. С его помощью вы сможете легко сохранять другие данные, такие как графические настройки проигрывателя или информацию для входа в систему (например, токены Facebook или Twitter), и любые другие параметры конфигурации, которые нужно отслеживать для проигрывателя. Однако PlayerPrefs не предназначен для отслеживания сохранений в игре. Для этого нужно использовать сериализацию.
Первым шагом к созданию файла сохранения игры является создание класса файла сохранения. Создайте новый скрипт с именем Save и удалите пункты MonoBehaviour, Start () и Update ().
Теперь вам необходимо добавить следующие переменные:
Чтобы сохранить игру, вам нужно отслеживать, где находятся существующие роботы и какого они типа. За это должны отвечать два списка с целыми данными о количестве попаданий и числе выстрелов.
Есть еще один очень важный фрагмент кода, который вам также нужно добавить:
Этот код дает команду Unity, что данный класс можно сериализовать, а это означает, что вы можете превратить его в поток байтов и сохранить как файл на диске.
Примечание: все эти атрибуты имеют широкий спектр применения и позволяют привязывать данные к классу, методу или определенной переменной. Вы даже можете определить свои собственные атрибуты для использования в вашем коде. Сериализация использует атрибуты [SerializeField] и [System.Serializable], которые определяют, что происходит при сериализации объекта.
Ваш скрипт Save должен выглядеть следующим образом:
Теперь откройте скрипт Game и добавьте еще один метод:
Этот код создаст новый экземпляр класса Save, который вы делали ранее, а затем установит значения исходя из количества существующих роботов. Кроме того, произойдет сохранение количества выстрелов игрока и попаданий.
Кнопка «Save» была подключена к методу SaveGame в скрипте Game, но в SaveGame все еще нет кода. Замените функцию SaveGame следующим кодом:
Рассмотрим все по пунктам:
Чтобы выполнить сохранение процесса, нажмите Escape в любой момент во время игры и используйте кнопку «Save». Обратите внимание, что при этом появляется сообщение о том, что игра была сохранена.
LoadGame в скрипте Game подключен к кнопке Load. Откройте скрипт Game, найдите функцию LoadGame и замените ее следующим значением:
Рассмотрим процесс более подробно:
Нажмите Play, немного поиграйте в игру и попробуйте сохранится. Нажмите кнопку «Load», и вы увидите, что она загружает врагов таким же образом, какими они были до того, как вы сохранили игру. Кроме того, должны отобразиться счет и количество выстрелов, которые вы сделали.
Сохранение данных с помощью JSON
Есть еще одна хитрость, которую вы можете использовать, когда хотите сохранить данные – это возможности JSON. Вы можете создать локальное JSON-представление сохранения вашей игры, отправить его на сервер, а затем переправить JSON в виде строки на другое устройство и преобразовать его из строки обратно в JSON.
Формат JSON может немного отличаться от того, который вы могли бы использовать с кодом C#, но он довольно прост. Вот один из примеров JSON:
Внешние скобки представляют собой родительскую сущность, которой является JSON. Если вы знакомы со структурой данных Dictionary, то JSON чем-то похож на это. Файл JSON представляет собой сопоставление пар ключ-значение. Обратите внимание — приведенный выше пример имеет 3 пары ключ-значение. В JSON ключи всегда являются строками, но значения могут быть объектами (то есть дочерними объектами JSON), массивами, числами или строками. Значение, установленное для ключа «message», равно «hi», значение ключа «age» — это число 22, а значение ключа «items» — это некий массив с двумя строками.
Сам объект JSON представлен типом String. Передав эти данные в виде строки, любой язык может легко воссоздать объект JSON из строки в качестве аргумента конструктора. Это действительно очень удобно и очень просто. У каждого языка есть свой способ создания объекта из этого формата. Начиная с Unity 5.3, существует собственный метод для создания объекта JSON из строки JSON.
В скрипте Game есть метод SaveAsJSON, который подключен к кнопке Save As JSON. Вам нужно заменить следующим кодом:
Это создает экземпляр Save и строку JSON с использованием метода ToJSON в классе JsonUtility.
Запустите игру и попробуйте уничтожить несколько целей, чтобы набрать очки. Теперь нажмите Escape, чтобы вызвать меню и используйте кнопку Save As JSON, чтобы увидеть созданную вами строку JSON:
Если вы захотите преобразовать этот JSON в экземпляр Save, то вам нужно будет использовать строку:
Таким образом вы сможете загрузить файл сохранения из Интернета, а затем добавить его в свою игру.
Что делать дальше?
Вы можете скачать законченный проект тут.
Вы узнали, как использовать довольно мощный инструмент для создания качественных игр, позволяя игрокам сохранять и загружать свои игры с помощью возможностей сериализации. Вы также узнали, что такое JSON и как его использовать для реализации облачного сохранения.
Если вы хотите узнать больше о возможностях Unity, то вам следует обратиться к другим урокам, посвященным этому движку. Если вы уверенно владеете Unity и хотите стать настоящим разработчиком, то советуем вам прочитать книгу Unity Games by Tutorials, с помощью которой вы сможете сделать 4 полноценных игры с нуля.
PlayerPrefs
class in UnityEngine
Success!
Thank you for helping us improve the quality of Unity Documentation. Although we cannot accept all submissions, we do read each suggested change from our users and will make updates where applicable.
Submission failed
For some reason your suggested change could not be submitted. Please try again in a few minutes. And thank you for taking the time to help us improve the quality of Unity Documentation.
Description
Stores and accesses player preferences between game sessions.
Editor/Standalone
On macOS PlayerPrefs are stored in
On Windows, PlayerPrefs are stored in the registry under HKCU\Software\[company name]\[product name] key, where company and product names are the names set up in Project Settings.
On Linux, PlayerPrefs can be found in
/.config/unity3d/[CompanyName]/[ProductName] again using the company and product names specified in the Project Settings.
On Windows Store Apps, Player Prefs can be found in %userprofile%\AppData\Local\Packages\[ProductPackageId]>\LocalState\playerprefs.dat
On Windows Phone 8, Player Prefs can be found in application’s local folder, See Also: Directory.localFolder
On Android data is stored (persisted) on the device. The data is saved in SharedPreferences. C#/JavaScript, Android Java and Native code can all access the PlayerPrefs data. The PlayerPrefs data is physically stored in /data/data/pkg-name/shared_prefs/pkg-name.xml.
On WebGL, PlayerPrefs are stored using the browser’s IndexedDB API.
On iOS, PlayerPrefs are stored in /Library/Preferences/[bundle identifier].plist.
Static Methods
DeleteAll | Removes all keys and values from the preferences. Use with caution. |
DeleteKey | Removes key and its corresponding value from the preferences. |
GetFloat | Returns the value corresponding to key in the preference file if it exists. |
GetInt | Returns the value corresponding to key in the preference file if it exists. |
GetString | Returns the value corresponding to key in the preference file if it exists. |
HasKey | Returns true if key exists in the preferences. |
Save | Writes all modified preferences to disk. |
SetFloat | Sets the value of the preference identified by key. |
SetInt | Sets the value of the preference identified by key. |
SetString | Sets the value of the preference identified by key. |
Did you find this page useful? Please give it a rating: