Сохранить / загрузить положение игрока и относительную сцену - PullRequest
0 голосов
/ 23 июня 2019

У меня проблема. Я сделал скрипт для сохранения плеера, но он сохраняет только позицию, а не сцену. Таким образом, если игрок сохраняет на сцене A и перезагружает игру, когда он находится в той же сцене A, проблем не возникает. Однако, когда игрок сохраняет в сцене A и затем загружает игру в другую сцену B, сохраненная сцена (то есть A) не загружается, а только позиция сцены A, примененная к текущей сцене B. Как бы это сохранить положение и связанную сцену, включая прогресс в самой сцене?

public class Player : MonoBehaviour { 
    public int level; 
    public int collected; 
    public float health; 
    public Image healthBar;
    public float currentHealth; 
    public bool win;

    private void Start()
    {
        currentHealth = health;
        Clue2.objectsCollected = collected;
    }

    private void Update()
    {
        collected = Clue2.objectsCollected;
        level = SceneManager.GetActiveScene().buildIndex;       
    }
    public void SavePlayer()
    {
        SaveSystem.SavePlayer(this);
        Debug.Log("Saved: " + this);
    }

    public void LoadPlayer()
    {
       PlayerData data = SaveSystem.LoadPlayer();   
       level = data.level;      
       health = data.health;
       collected = data.collected;
       Clue2.objectsCollected = collected;
       win = data.win;

       Vector3 position;
       position.x = data.position[0];
       position.y = data.position[1];
       position.z = data.position[2];
       transform.position = position;
    }

    public void TakeDamage(float damage)
    {
        currentHealth -= damage;
        healthBar.fillAmount = currentHealth / health;
    }
}

[System.Serializable]
public class PlayerData
{
    public int level;
    public int collected;
    public float health;        
    public float[] position;
    public bool win;

    public PlayerData(Player player)
    {
        level = player.level;
        health = player.level;      
        collected = player.collected;
        win = player.win;

        //x,y,z
        position = new float[3];
        position[0] = player.transform.position.x;
        position[1] = player.transform.position.y;
        position[2] = player.transform.position.z;
    }
}


public static class SaveSystem
{
    public static void SavePlayer(Player player)
    {
        BinaryFormatter formatter = new BinaryFormatter();
        string path = Application.persistentDataPath + "/playerData.dat";

        FileStream stream = new FileStream(path, FileMode.Create);

        PlayerData data = new PlayerData(player);

        formatter.Serialize(stream, data);
        stream.Close();
        Debug.Log(path);
    }

    public static PlayerData LoadPlayer()
    {
        string path = Application.persistentDataPath + "/playerData.dat";

        if (File.Exists(path))
        {
            BinaryFormatter formatter = new BinaryFormatter();
            FileStream stream = new FileStream(path, FileMode.Open);

            PlayerData data = formatter.Deserialize(stream) as PlayerData;
            stream.Close();

            return data;
        }
        else
        {
            Debug.LogError("not found " + path);
            return null;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...