为了账号安全,请及时绑定邮箱和手机立即绑定

加载我的数组时,值是相同的(Unity)

加载我的数组时,值是相同的(Unity)

PHP
扬帆大鱼 2024-01-20 21:11:28
我刚刚为我的游戏重新制作了保存系统。为此,我使用 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"));        }这是执行 UI 的加载操作。 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);        }    }我希望它会按应有的方式加载所有不同的配置文件,但事实并非如此,它只是加载其中一个值并将其应用于所有配置文件。
查看完整描述

1 回答

?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

您正在覆盖您的数据。另外,(也许)不要为此使用 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"));

您会注意到它总是打印一件事。最后的个人资料。


如果您坚持让 PlayerPrefs 做一些它从未设计过的事情,那么您必须将键名称 ( "Path") 更改为更独特的名称 ( "Path"+i) 或以其他方式确定您希望在那里存储哪个配置文件。由于我不清楚你的用例,所以你必须自己弄清楚。


查看完整回答
反对 回复 2024-01-20
  • 1 回答
  • 0 关注
  • 65 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信