My unity save system doesn't save integer array

Viewed 33

I don't get any errors but my script doesn't load or possibly save my array...

here's the first script

[System.Serializable]
public class PlayerData
{
    public float health;
    public float thirst;
    public float hunger;
    public float oxygen;
    public float[] position;
    public int[] inventoryIDs;

    public PlayerData (Health healthO, SaveLoad saveload)
    {
        //Save int items
        health = healthO.health;
        thirst = healthO.thirst;
        hunger = healthO.hunger;
        oxygen = healthO.oxygen;

        //set and save location array
        position = new float[3];

        position[0] = healthO.transform.position.x;
        position[1] = healthO.transform.position.y;
        position[2] = healthO.transform.position.z;

        //set and save inventory IDs
        inventoryIDs = new int[50];

        for(int i = 0; i < 50; i++)
        {
            inventoryIDs[i] = saveload.IDs[i];
        }
    }
}

here's the next

public class SaveLoad : MonoBehaviour
{
    public GameObject player;

    public int[] IDs;

    public GameObject[] objects;

    Inventory inventory;
    Health health;

    void Start()
    {
        IDs = new int[50];
        objects = new GameObject[50];

        inventory = player.GetComponent<Inventory>();
        health = player.GetComponent<Health>();
    }

    void Update()
    {
        //Add IDs
        for (int i = 0; i < 50; i++)
        {
            IDs[i] = inventory.slot[i].GetComponent<Slot>().ID;
        }

        //debug save load test
        if (Input.GetKeyDown(KeyCode.Z))
        {
            SaveP();
        }
        if (Input.GetKeyDown(KeyCode.X))
        {
            LoadP();
        }

    }

    public void SaveP()
    {
        SaveSystem.SavePlayer(health, this);
    }

    public void LoadP()
    {
        PlayerData data = SaveSystem.LoadPlayer();

        //load stats
        health.thirst = data.thirst;
        health.hunger = data.hunger;
        health.health = data.health;
        health.oxygen = data.oxygen;

        //Load position
        Vector3 position;
        position.x = data.position[0];
        position.y = data.position[1];
        position.z = data.position[2];
        player.transform.position = position;

        //load IDs
        for (int i = 0; i < 50; i++)
        {
            IDs[i] = data.inventoryIDs[i];
        }

        //Load Items
        for (int i = 0; i < 50; i++)
        {
            if(objects[IDs[i]] != null)
            {
                GameObject itemObject = (GameObject)Instantiate(objects[IDs[i]], new Vector3(0, 0, 0), Quaternion.identity);

                Item item = itemObject.GetComponent<Item>();

                inventory.AddItem(itemObject, item.ID, item.type, item.name, item.description, item.icon);
            } else
            {
                return;
            }
           
        }

    }

}

Here's the last script

public static class SaveSystem
{
    public static string fileName = "FileSave.bin";

    public static void SavePlayer(Health health, SaveLoad SL)
    {
        //Create formatter
        BinaryFormatter bf = new BinaryFormatter();

        // Create file stream
        FileStream file = File.Create(GetFullPath());

        //Save data
        PlayerData data = new PlayerData(health, SL);
        bf.Serialize(file, data);

        //Close stream
        file.Close();
    }

    public static PlayerData LoadPlayer()
    {
        if (SaveExists())
        {
            try
            {
                //Create formatter
                BinaryFormatter bf = new BinaryFormatter();

                //Create file stream
                FileStream file = File.Open(GetFullPath(), FileMode.Open);

                //Load data
                PlayerData pd = (PlayerData)bf.Deserialize(file);

                //close stream
                file.Close();

                //return data
                return pd;
            }

            catch (SerializationException)
            {
                Debug.Log("Failed to load file at: " + GetFullPath());
            }
        }

        return null;

    }

    private static bool SaveExists()
    {
        return File.Exists(GetFullPath());
    }

    private static string GetFullPath()
    {
        return Application.persistentDataPath + "/" + fileName;
    }

}

there are all connected with the save load script loading and saving the variables into the player and items to the inventory sots. the inventory IDs array isn't saving or loading

0 Answers
Related