Ваш вопрос

Нина Гаврилова
Нина Гаврилова

Датахакер

Решено 1 месяц назад

Датахакер

Как сделать сохранение unity?

Unity, одиночная учебная игра на компьютере, один числовой рекорд. Нужно сохранить лучший счёт после завершения раунда и прочитать его при следующем запуске приложения.

Лучший ответ

Вячеслав Петров

Датахакер

1 месяц назад

Датахакер

Как сделать сохранение unity?

Проверю именно закрытие и новый запуск сборки.

Посмотрите все ответы

+5

4.20

1 месяц назад

4.20

Запись

Для простого рекорда используйте PlayerPrefs.SetInt("BestScore", best) после сравнения нового счёта со старым. В конце раунда вызовите PlayerPrefs.Save(), чтобы записать изменения.

Чтение

При следующем запуске получите int best = PlayerPrefs.GetInt("BestScore", 0);. Ноль будет использован, если записи ещё нет. Имя BestScore должно точно совпадать в обоих местах.

Проверка

Закройте и снова запустите собранную игру. Проверяйте сохранённый рекорд, а не только число, оставшееся в памяти компонента. Save не нужно вызывать каждый кадр. PlayerPrefs хранит простые локальные значения без шифрования, поэтому подходит для учебного рекорда, но не для доверенного сетевого рейтинга или секретов.

Инна Данилова

Датахакер

1 месяц назад

Датахакер

Запись каждый кадр уберу, достаточно конца раунда.

v4-pro

1 месяц назад

v4-pro

Пример чтения: int best = PlayerPrefs.GetInt("BestScore", 0);. Когда score превысил best, запишите новый рекорд через PlayerPrefs.SetInt("BestScore", score) и вызовите PlayerPrefs.Save() в конце раунда. При следующем запуске читайте то же имя. Это локальное нешифрованное сохранение простого числа, поэтому доверенный сетевой рейтинг так не защищают.

ChatGPT

4o-mini

1 месяц назад

4o-mini

  • Для одного локального целого рекорда подойдёт PlayerPrefs. Он хранит простые значения между запусками приложения. Это удобное учебное решение, если от данных не требуется защита от редактирования пользователем.

  • При старте прочитайте значение с запасным нулём:

int best = PlayerPrefs.GetInt("BestScore", 0);

Строка BestScore является именем записи. Используйте одно и то же написание при чтении и сохранении, иначе получите две разные записи.

  • В конце раунда сравните набранный score с сохранённым рекордом. Если результат больше, запишите его и сохраните изменения:
if (score > best)
{
    best = score;
    PlayerPrefs.SetInt("BestScore", best);
    PlayerPrefs.Save();
}

Здесь score уже содержит результат вашего раунда. Фрагмент вставляется в обработчик завершения, а не выполняется постоянно в Update.

  • Не вызывайте Save каждый кадр. Запись на диск может давать задержку, поэтому завершение раунда является понятным моментом сохранения. Отдельно проверьте повторный запуск собранной игры, а не только обновление текста на экране.

  • Если число сбрасывается, проверьте одинаковое имя записи, отсутствие кода очистки и неизменность параметров приложения, от которых зависит место хранения. Редактор и готовая сборка могут использовать разные расположения данных.

  • PlayerPrefs не шифрует значения и не является защищённой таблицей результатов. Для сетевого рейтинга нельзя доверять присланному клиентом рекорду без проверки. Для большого сохранения мира с предметами и несколькими слотами потребуется другая структура хранения.

Ответить на вопрос

Добавить файлФайл

Добавить видеоВидео

Добавить ссылкуСсылка

Нажимая на кнопку, вы принимаете условия
пользовательского соглашения

Премиум вопросы

Пока нет премиум-вопросов в подборке

Не нашли то, что искали?

Задайте свой вопрос

Похожие вопросы участников