- Home /
Saving a list of items
Hi all, I asked this same question a couple months ago and got a lot of help, but I still could not figure it out so I just went on to work on other things. I'm at a point now where I really need to figure this out so I can finish my project. I have a better understanding now so hopefully I can phrase a better question. So here we go..
I have a list of items (Inventory) and each item in the list inherits from a custom class called 'Item' which contains string, int, and enum values as well as a texture2d. What I am trying to do is save all of the items in the Inventory list by converting the data in the Item class to strings so I can store them in a temporary string array, and then convert everything back to its original data when loading. I'm getting an error at the line I marked that says 'Format Exception: Input string was not in the correct format.' I'll put my current code up so you can see where I'm at.
//GameSettings.js
var tempArray : String[];
var temp : String;
var Inventory;
var convertVariables : Item;
function SaveData() {
Inventory = GameObject.Find("GUIElements").GetComponent("Inventory").inventory;
for(i = 0; i < Inventory.Count; i++) {
if(i != Inventory.Count - 1){
convertVariables.ConvertVariables();
temp += Inventory[i].ToString() + "*";
}
else{
convertVariables.ConvertVariables();
temp += Inventory[i].ToString();
}
}
PlayerPrefs.SetString("InventoryItems",temp);
}
function LoadData() {
temp = PlayerPrefs.GetString("InventoryItems");
tempArray = temp.Split("*".ToCharArray());
for(i = 0; i < tempArray.Length; i++){
Inventory[i] = System.Int32.Parse(tempArray[i]); <<<ERROR OCCURS HERE
}
}
//Item.js
function ConvertVariables() {
//Ints to convert
price.ToString();
minDamage.ToString();
maxDamage.ToString();
defense.ToString();
healthAmount.ToString();
essenceAmount.ToString();
itemLevel.ToString();
itemFireDamage.ToString();
itemIceDamage.ToString();
itemLightningDamage.ToString();
itemElementDamage.ToString();
curDura.ToString();
maxDura.ToString();
//Enums to convert
rarity.ToString();
jewelSlot.ToString();
consumableType.ToString();
armorType.ToString();
armorSlot.ToString();
weaponSlot.ToString();
weaponSlot2.ToString();
weaponDamageType.ToString();
weaponType.ToString();
itemArchetype.ToString();
itemElementType.ToString();
Debug.Log("Variables Converted");
}
The 'ConvertVariables' function obviously is used to convert the ints and enums to strings. What I'm wondering is it possible or even necessary to convert the texture2d to a string? I'm curious because I'm not sure if that's what is causing the error or not. Anyways that's where I'm at right now, if anyone could give some insight it would be greatly appreciated. If you need any more info or code sample I'll be happy to provide it. Thank you!
Answer by bompi88 · Apr 28, 2012 at 08:50 PM
You have "saved" your data to PlayerPrefs? Try to substitute this:
for(i = 0; i < tempArray.Length; i++){
Inventory[i] = System.Int32.Parse(tempArray[i]);
}
with this:
for(i = 0; i < tempArray.Length; i++){
Debug.Log(tempArray[i]);
//Inventory[i] = System.Int32.Parse(tempArray[i]);
}
What does it print out? Maybe it`s about your enums? Try the Enum.Parse method for those.
Ok well its giving me a weird result. For every item in my inventory it just prints "Item". I'll have to look into the enum.parse method and see how it works. Give me a few $$anonymous$$utes and i'll report back.
EDIT: Not having any luck with enum.parse, any other suggestions?
Do I need to convert the texture2d variable somehow?
Texture2D.ToString() is only returning the name of the texture as string, but you can probably save the texture as png or save it as bytes in for example a string. Take a look at:
http://unity3d.com/support/documentation/ScriptReference/Texture2D.EncodeToPNG.html
You can encode it to png, and either save it to a file OR convert the array og bytes to string and then use PlayerPrefs to save it.
Your answer
Follow this Question
Related Questions
Saving lists 1 Answer
How to save an item as bought in player prefs? 0 Answers
How i can PlayerPrefs List<>? 0 Answers
Save and Load Function 2 Answers
Set int to object from list? 0 Answers