Есть несколько потенциальных причин, почему метод 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");
}
}
Такой подход поможет удостовериться, что сохранение происходит только тогда, когда это действительно необходимо, и что удаление данных будет работать корректно.
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");
}