반응형
string LINE_SPLIT_RE = @"\r\n|\n\r|\n|\r";
public List<T> ReadCSV<T>(string fileName) where T: CSVData, new()
{
List<T> list = new List<T>();
var data = Resources.Load(path + fileName) as TextAsset;
string[] lines = Regex.Split(data.text, LINE_SPLIT_RE);
for (int i = 1; i < lines.Length - 1; i++)
{
string[] values = lines[i].Split(',');
for (int j = 0; j < values.Length; j++)
{
string value = values[j];
value = Regex.Replace(value,"`", ",");
values[j] = value;
}
T t = new T();
t.csvToClass(values); // ,로 구분된 csv 데이터를 클래스의 형태에 맞게 변환
list.Add(t); // 리스트에 추가해준다
}
return list;
}
Assets/Resources 폴더 안에 있는 csv 파일을 읽는 코드이다.
List<T> 형태의 객체를 반환하며 이때 객체는 CSVData를 상속받은 객체여야 한다.
[예제 코드]
public class CSVData
{
public virtual void csvToClass(string[] csvArray)
{
}
}
public class Equipment : CSVData
{
public string type;
public int grade;
public string name;
public int HP;
public int ATK;
public int DEF;
public List<int> probs;
public override void csvToClass(string[] csvArray)
{
type = csvArray[0];
grade = int.Parse(csvArray[1]);
name = csvArray[2];
HP = int.Parse(csvArray[3]);
ATK = int.Parse(csvArray[4]);
DEF = int.Parse(csvArray[5]);
probs = new List<int>();
for (int i = 6; i < csvArray.Length; i++)
{
probs.Add(int.Parse(csvArray[i]));
}
}
}
Equipment는 드롭 확률이 정해져 있는 장비의 정보를 담기 위한 클래스이다.
표와 같은 형태의 csv 파일을 만들어 Equipment에 담았다.
반응형
'프로그래밍 > 유니티 및 C#' 카테고리의 다른 글
[유니티/C#] Content 크기에 맞춰 늘어나는 Scroll View 만들기(유동적인 Scroll View) (0) | 2024.01.22 |
---|---|
[유니티 2D/C#] 탑다운 뷰에서 아이템이 바닥에서 튕기는 연출 만들기 (0) | 2023.11.10 |
[유니티/C#] Scroll View에 유동적인 Text 넣기 (0) | 2023.11.07 |
[유니티/C#] Json을 원하는 타입으로 읽기/쓰기 (Generic 사용) (0) | 2023.11.03 |
[유니티/C#] Text 길이에 맞춰 늘어나는 패널 만들기 (0) | 2023.11.02 |