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

Вопрос про PlayerPrefs Unity C#

Shnuk Ученик (187), на голосовании 7 месяцев назад
Прописал сохранение позиции игрока через PlayerPrefs, но после перезахода в игру все сбивается, что не так?

Вот код:
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();
}

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

public void LoadGame()
{
if (PlayerPrefs.HasKey("X"))
{
x = PlayerPrefs.GetFloat("X");
}
if (PlayerPrefs.HasKey("Y"))
{
y = PlayerPrefs.GetFloat("Y");
}
if (PlayerPrefs.HasKey("Z"))
{
x = PlayerPrefs.GetFloat("Z");
}
player.transform.position = new Vector3(x, y, z);
}
Голосование за лучший ответ
Андрей Панарин Искусственный Интеллект (249382) 8 месяцев назад
На каком объекте висит этот скрипт?
В логе игры что-нибудь пишется?
ShnukУченик (187) 8 месяцев назад
На своего персонажа и вешаю
ShnukУченик (187) 8 месяцев назад
В логах ничего не пишет
ShnukУченик (187) 8 месяцев назад
Я заметил, что выставляются нулевые координаты по x,y,z, даже если спавн персонажа перемещу, то все равно заспавниться на нулевых координатах
Андрей Панарин Искусственный Интеллект (249382) А точно ли надо у объекта типа Transform брать еще один transform? Почему не просто player.position.x? Еще вот тут вижу x вместо z:
 x = PlayerPrefs.GetFloat("Z");  
Сергей Шиманский Мудрец (11867) 8 месяцев назад
Ты говоришь что на своего персонажа и вещаешь, но при этом у тебя в скрипте ссылка на player. Тебе надо либо в движке указывать правильно ссылку на player, либо использовать this в скрипте, чтобы обращаться к собственному transform.
ShnukУченик (187) 8 месяцев назад
Это я все решил, все сохраняется, но только изначально персонаж стал спавнится в нулевых координатах, ну а после этого уже все сохраняется, как назначить спавн в нужных координатах?
Сергей Шиманский Мудрец (11867) Shnuk, Задай в Start нужные координаты
Чёрный Император акчоТ Ученик (244) 7 месяцев назад
Проблема в вашем коде заключается в том, что при загрузке позиции игрока из PlayerPrefs вы неправильно присваиваете значение переменной z:

```csharp
if (PlayerPrefs.HasKey("Z"))
{
x = PlayerPrefs.GetFloat("Z"); // Здесь должно быть y, а не x
}
```

Исправьте эту ошибку, чтобы корректно загрузить значение координаты Z из PlayerPrefs:

```csharp
if (PlayerPrefs.HasKey("Z"))
{
z = PlayerPrefs.GetFloat("Z"); // Исправление: заменить x на z
}
```

После внесения данного изменения сохраненная позиция игрока должна корректно загружаться при повторном запуске игры. Попробуйте внести эту правку и проверить, как работает ваше сохранение и загрузка позиции игрока. Если у вас остались вопросы, обращайтесь.
Похожие вопросы