Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Почему не работает метод DeletePrefs?

Shnuk Ученик (182), закрыт 1 неделю назад
В Update сделано, что при нажатии на K должно удаляться сохранение, но при заходе в игру все на месте, почему?

public float X, Y, Z;
public Transform player;

private void Start()
{
player = GetComponent<Transform>();
LoadGame();
}

private void Update()
{
X = player.transform.position.x;
Y = player.transform.position.y;
Z = player.transform.position.z;
SaveGame();
Debug.Log("Save Position");

if (Input.GetKeyDown(KeyCode.K))
{
DeletePrefs();
}
}

public void SaveGame()
{
PlayerPrefs.SetFloat("X", X);
PlayerPrefs.SetFloat("Y", Y);
PlayerPrefs.SetFloat("Z", Z);
PlayerPrefs.Save();
}

public void LoadGame()
{
if (PlayerPrefs.HasKey("X") && PlayerPrefs.HasKey("Y") && PlayerPrefs.HasKey("Z"))

{
X = PlayerPrefs.GetFloat("X");

Y = PlayerPrefs.GetFloat("Y");

Z = PlayerPrefs.GetFloat("Z");
}

else

{
// Текущие координаты игрока, если значения не были сохранены

X = player.transform.position.x;

Y = player.transform.position.y;

Z = player.transform.position.z;
}
player.transform.position = new Vector3(X, Y, Z);

}

public void DeletePrefs()
{
PlayerPrefs.DeleteAll();
Debug.Log("delete");
}
Лучший ответ
⭐Человек с Земли Оракул (56095) 1 месяц назад
Есть несколько потенциальных причин, почему метод DeletePrefs не работает ожидаемым образом:

1. Проблема с обнаружением нажатия клавиши: Убедитесь, что вы фактически нажимаете клавишу K, и что нет проблем с вводом. Проверьте, отображается ли в консоли сообщение "delete" после нажатия.

2. Автоматическое сохранение после удаления: В методе Update() после проверки нажатия клавиши и выполнения DeletePrefs(), следует вызов SaveGame(). Если вы быстро нажимаете клавишу K и затем закрываете игру, может оказаться, что есть не сохранённые данные, которые автоматически сохраняются в PlayerPrefs перед выходом. Попробуйте отключить автосохранение, переместив SaveGame() в другую часть кода, которая не вызывается каждый кадр.

3. Неправильное применение PlayerPrefs: Если вы удаляете всё с помощью PlayerPrefs.DeleteAll(), это действительно должно удалять все сохраненные данные. Убедитесь, что вы не вызываете LoadGame() после DeletePrefs() в каком-либо другом месте кода.

Чтобы решить эту проблему, попробуйте следующее:
- Не вызывайте SaveGame() каждый кадр. Это непроизводительно и может приводить к конфликтам. Сохраняйте игру только тогда, когда это действительно необходимо, например, при достижении определённой точки в игре или при выходе из игры.
- Убедитесь, что после нажатия на клавишу K и вызова DeletePrefs() нигде больше не вызывается LoadGame() до того, как игра будет закрыта или перезапущена.
- Проверьте работоспособность обработчика ввода для клавиши K. Может быть полезно добавить отладочный вывод в блок if, чтобы увидеть, реагирует ли приложение на нажатие клавиши.

Обновите Update() следующим образом, чтобы проблема была решена:

 private void Update()  
{
if (Input.GetKeyDown(KeyCode.K))
{
DeletePrefs();
// Добавьте команду для выхода из игры или перезагрузки уровня, чтобы перестать видеть старые данные.
}
else
{
// Избегайте сохранения каждый кадр, сделайте это по определенному событию или условию.
X = player.transform.position.x;
Y = player.transform.position.y;
Z = player.transform.position.z;
SaveGame();
Debug.Log("Save Position");
}
}
Такой подход поможет удостовериться, что сохранение происходит только тогда, когда это действительно необходимо, и что удаление данных будет работать корректно.
Остальные ответы
Похожие вопросы