Сергей Шиманский
Мудрец
(11867)
8 месяцев назад
Ты говоришь что на своего персонажа и вещаешь, но при этом у тебя в скрипте ссылка на player. Тебе надо либо в движке указывать правильно ссылку на player, либо использовать this в скрипте, чтобы обращаться к собственному transform.
ShnukУченик (187)
8 месяцев назад
Это я все решил, все сохраняется, но только изначально персонаж стал спавнится в нулевых координатах, ну а после этого уже все сохраняется, как назначить спавн в нужных координатах?
Чёрный Император акчоТ
Ученик
(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
}
```
После внесения данного изменения сохраненная позиция игрока должна корректно загружаться при повторном запуске игры. Попробуйте внести эту правку и проверить, как работает ваше сохранение и загрузка позиции игрока. Если у вас остались вопросы, обращайтесь.
Вот код:
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);
}