При загрузке моего массива значения точно такие же (Unity) - PullRequest
0 голосов
/ 29 сентября 2019

Я просто переделал свою систему сохранения для своей игры.Для этого я использую Directory.GetDirectories и массив для его хранения.Проблема заключается в том, что при загрузке код загрузки просто загружает те же значения для количества папок.Массив string[] profiles отличается, но не от того, что он загружает (ProfilesData).

Я также пытался его погуглить, но, похоже, что-то не так.Решение, скорее всего, ответили, но я не уверен, что искать.Я попытался отладить это сам.Я вижу, что при загрузке «значение» остается тем же, но я не знаю, почему.

Это первый скрипт, который получил массив и должен изменить путь, как и он.

 //Gets all Directories in the Profiles folder
        string[] profiles = Directory.GetDirectories(Application.persistentDataPath + "/Profiles/");

        for (int i = 0; i < profiles.Length; i++)
        {
            PlayerPrefs.SetString("Path", profiles.GetValue(i).ToString());
            AddProfiles();
            Debug.Log(PlayerPrefs.GetString("Path"));
        }

Это загрузочный, который выполняет пользовательский интерфейс.

 public void AddProfiles()
    {
        ProfilesData data = SaveProfiles.LoadProfiles();

        img = data.profileImage;

        ProfilesUIClone = Instantiate(ProfilesUI) as GameObject;
        ProfilesUIClone.transform.SetParent(wheretomaketheprofileUI.transform.parent);
        Profile = ProfilesUIClone.transform.Find("SelectProfile").transform.Find("Name").GetComponentInChildren<Text>();
        Company = ProfilesUIClone.transform.Find("SelectProfile").transform.Find("Company").GetComponentInChildren<Text>();
        Profile.text = data.profileName;
        Company.text = data.companyName;
        ProfilesUIClone.SetActive(true);
        if (img == 0)
        {
            Image = ProfilesUIClone.transform.Find("SelectProfile").transform.Find("ProfileImage1").GetComponent<Image>();
            Image.gameObject.SetActive(true);
        }
        else if (img == 1)
        {
            Image = ProfilesUIClone.transform.Find("SelectProfile").transform.Find("ProfileImage2").GetComponent<Image>();
            Image.gameObject.SetActive(true);
        }
        else if (img == 2)
        {
            Image = ProfilesUIClone.transform.Find("SelectProfile").transform.Find("ProfileImage3").GetComponent<Image>();
            Image.gameObject.SetActive(true);
        }
    }

И это сам скрипт загрузки.

 public static ProfilesData LoadProfiles()
    {
        string path = Application.persistentDataPath + "/Profiles/" + PlayerPrefs.GetString("ProfileName") + "/config.dat";
        string path2 = PlayerPrefs.GetString("Path");
        if (File.Exists(path))
        {
            BinaryFormatter formatter = new BinaryFormatter();
            FileStream stream = new FileStream(path, FileMode.Open);

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

            return data;
        }
        else if (File.Exists(path2))
        {
            BinaryFormatter formatter = new BinaryFormatter();
            FileStream stream = new FileStream(path2, FileMode.Open);

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

            return data;
        }
        else
        {
            Debug.LogError("Save file not found in " + path);
            return null;
        }
    }

Я ожидаю, что он загружает всеразные профили, как и должно, но он не просто загружает одно из значений и помещает его для всех профилей.

1 Ответ

0 голосов
/ 29 сентября 2019

Вы перезаписываете свои данные.Также (возможно) не используйте PlayerPrefs для этого.

PlayerPrefs.SetString("Path", profiles.GetValue(i).ToString());

Вы устанавливаете один и тот же ключ на новое значение каждый раз в цикле.Если бы вы сделали это вместо этого:

    for (int i = 0; i < profiles.Length; i++)
    {
        PlayerPrefs.SetString("Path", profiles.GetValue(i).ToString());
        AddProfiles();
    }
    Debug.Log(PlayerPrefs.GetString("Path"));

Вы бы заметили, что он всегда печатает одну вещь.Профиль last .

Если вы настаиваете на том, чтобы PlayerPrefs делал то, для чего он никогда не был предназначен, вам придется изменить либо имя ключа ("Path") начто-то более уникальное ("Path"+i) или иным образом определите, какой один профиль вы хотите сохранить там.Поскольку я неясен в вашем случае использования, вам придется выяснить это самостоятельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...