- Home /
Question by
Punkjim420 · Apr 09, 2014 at 06:55 PM ·
c#listsavingclasses
Argument out of range when checking at List[0], C#
Im creating a list of a class and trying to check the values and write over the values for saving/loading player stats and there are no errors until i enter play mode. it looks like im not finding anything at saveData[0] when i try to. and the debug doesnt go off. So im a little confused, is my script 'not' creating a new instance of a class and storing it in saveData[] or is there something wrong with my script?
here is the scripts(mostly--i trimmed them down too be clean and relevant):
PlayerProcessor.CS
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.Xml;
using System.Xml.Serialization;
using System.IO;
public class PlayerProcessor : MonoBehaviour {
public Player player = new Player();
public PlayerData playerData = new PlayerData();
public string path = "";
public string playerPass = "arandompass";
public bool modded = false;
public string location = "whereiam";
void Start(){
if (player.saveData == null){
player.saveData = new List<PlayerData>();
}
playerData.MakePlayerData(playerPass, modded, location);
player.saveData[0] = playerData;
//Debug.Log (player.saveData[0].pass);
if(Network.isServer){
renderer.material.color = new Color(255, 0, 0);
}
if(!Network.isServer){
renderer.material.color = new Color(0, 0, 255);
}
Save();
}
}
PlayerData.CS
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.Xml;
using System.Xml.Serialization;
public class PlayerData {
[XmlAttribute("name")]
public string pass = "";
public bool isMod = false;
public string area = "";
public void MakePlayerData(string a, bool b, string c){
pass = a;
isMod = b;
area = c;
}
}
Player.CS
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.Xml;
using System.Xml.Serialization;
public class Player {
[XmlArray("PlayerData")]
[XmlArrayItem("Players")]
public List<PlayerData> saveData;
}
Comment
Best Answer
Answer by Key_Less · Apr 09, 2014 at 07:06 PM
You create a new list of type PlayerData with an unspecified size, then try to assign to it. Use the Add method to populate your list. So on line 20 of PlayerProcessor.cs:
player.saveData.Add(playerData);