Как реализовать систему сохранений и загрузки в Unity для сцен и позиции игрока
Работаем над рпг игрой с товарищем. Столкнулись с проблемой загрузки игры.
Наша логика:
- Класс для хранения данных
- При сохранении заполнять класс нужными данными и создать JSON (знаем, что есть другие способы, пока просто работаем с этим)
- При загрузке доставать данные из JSON и выполнить нужные функции для настройки нужных вещей.
Сохраняем мы пока только позицию игрока и сцену (локацию), на которой было нажато сохранение. Сохранение и загрузка работают нормально с позицией игрока.
Код:
public class SaveGame: MonoBehaviour
{
private SaveData saveData = new SaveData();
public void SaveParameters()
{
saveData.sceneName = SceneManager.GetActiveScene().name;
GameObject playerObject = GameObject.FindWithTag("Player");
saveData.playerPosition = playerObject.transform.position;
Debug.Log("Save sceneName: " + saveData.sceneName + "\nSave playerPosition: " + saveData.playerPosition);
string json = JsonUtility.ToJson(saveData);
File.WriteAllText(Application.persistentDataPath + "/save.json", json);
}
public void LoadParametrs()
{
string path = Application.persistentDataPath + "/save.json";
string json = File.ReadAllText(path);
saveData = JsonUtility.FromJson<SaveData>(json);
Debug.Log("Load sceneName: " + saveData.sceneName + "\nLoad playerPosition: " + saveData.playerPosition);
SceneManager.LoadScene(saveData.sceneName);
GameObject playerObject = GameObject.FindWithTag("Player");
playerObject.transform.position = new Vector3(saveData.playerPosition.x, saveData.playerPosition.y, saveData.playerPosition.z);
return;
}
}
[System.Serializable]
public class SaveData
{
public string sceneName;
public Vector3 playerPosition;
}
Теперь о том, что происходит при загрузке. Персонаж на кадр перемещается в нужную позицию, но потом сразу перемещается в начальные координаты (на каждой сцене свой Player
), плюсом он не может ходить, хотя все нужные скрипты привязаны и значения правильные. Нашли подобную проблему здесь, но ничего полезного выяснить не удалось: https://gamedev.stackexchange.com/questions/120256/what-would-be-a-perfect-manner-to-load-a-scene-then-the-players-position-in-uni
В туториалах никто не затрагивает подобную тему. Как реализовать нашу задумку? Возможно наша концепция не верна либо нужно по другому работать со сценами. Любая помощью будет ценна.