Hello, I have a script that saves & loads a list of strings with playerprefs, but if elements is removed from the list & I press a button to save the new list, & I reload the scene again it comes back with the same list of strings including the ones that were removed. I don’t know what to do about solving this issue.
public List<string> Names = new List<string>();
void Start()
{
for (int i = 0; PlayerPrefs.HasKey("SaveName" + i); i++)
{
Names.Add(PlayerPrefs.GetString("SaveName" + i));
}
}
public void Save()
{
for (int i = 0; i < Names.Count; i++)
{
PlayerPrefs.SetString("SaveName" + i, Names*);*
Debug.Log(Names*.ToString());*
}
}
Solution 1
public List<string> Names = new List<string>();
void Start()
{
Load();
}
public void AddName(string name)
{
Names.Add(name);
int index = listofelements.IndexOf(name);
PlayerPrefs.SetString("SaveName" + index, Names*);*
}
public void RemoveName(string name)
{
int index = listofelements.IndexOf(name);
if(index != -1)
{
Names.Remove(name);
PlayerPrefs.DeleteKey(“SaveName” + index, name);
}
}
public void ModifyName(string name, string newname)
{
int index = listofelements.IndexOf(name);
if(index != -1)
{
listofelements[index] = newname;
PlayerPrefs.SetString(“SaveName” + index, newname);
}
}
public void ModifyName(int index, string newname)
{
listofelements[index] = newname;
PlayerPrefs.SetString(“SaveName” + index, newname);
}
//save each time something change in the list
public void SaveAll()
{
for (int i = 0; i < Names.Count; i++)
{
PlayerPrefs.SetString(“SaveName” + i, Names*);*
Debug.Log(Names*.ToString());*
}
}
//call each time you want to load all names from player prefs (will //replace your list
public void LoadAll()
{
Names = new List();
for (int i = 0; PlayerPrefs.HasKey(“SaveName” + i); i++)
{
Names.Add(PlayerPrefs.GetString(“SaveName” + i));
}
}
//call each time you want to load without adding new one
public void Load()
{
for (int i = 0; PlayerPrefs.HasKey(“SaveName” + i); i++)
{
if(Names.contains(PlayerPrefs.GetString(“SaveName” + i)))
Names = PlayerPrefs.GetString(“SaveName” + i);
else
Names.Add(PlayerPrefs.GetString(“SaveName” + i));
}
}
Solution 2
public List Names = new List();
void Start()
{
Load();
}
//save each time something change in the list
public void Save()
{
for (int i = 0; i < Names.Count; i++)
{
PlayerPrefs.SetString(“SaveName” + i, Names*);*
Debug.Log(Names*.ToString());*
}
}
//call each time you want to load
public void Load()
{
Names = new List();
for (int i = 0; PlayerPrefs.HasKey(“SaveName” + i); i++)
{
Names.Add(PlayerPrefs.GetString(“SaveName” + i));
}
}