반응형
DataTable을 사용해서 csv파일을 읽어와 게임 내 데이터를 관리하려고 했다. 하지만 전체 테이블과 행을 읽어오는것은 되는데 string으로 열을 불러와도 "" 이런식으로 빈 값만 반환되었다.
DataManager 스크립트
// 리소스화 시킬 데이터테이블의 종류 열거형
public enum ECSVDatas
{
PlayerTable = 0,
MonsterTable,
End
}
public class DataManager
{
// 불러올 데이터테이블 딕셔너리
public Dictionary<ECSVDatas, DataTable> tableDic { get; private set; } = new Dictionary<ECSVDatas, DataTable>();
// 생성자 호출 시 자동으로 csv를 불러와 딕셔너리에 저장
public DataManager()
{
TableInit();
}
// Paht에 있는 csv를 불러와 딕셔너리에 저장
private void TableInit()
{
tableDic.Add(ECSVDatas.PlayerTable, CSVReader(Application.streamingAssetsPath + @"\DB\PlayerData.csv"));
tableDic.Add(ECSVDatas.MonsterTable, CSVReader(Application.streamingAssetsPath + @"\DB\MonsterDB.csv"));
}
// csv의 행과 열을 각각 읽어와 리턴
public DataTable CSVReader(string path)
{
DataTable dt = new DataTable();
StreamReader sr = new StreamReader(path);
string[] headers = sr.ReadLine().Split(',');
foreach (string header in headers)
{
dt.Columns.Add(header);
}
while (!sr.EndOfStream)
{
string line = sr.ReadLine();
string[] data = line.Split(',');
DataRow row = dt.NewRow();
for (int i = 0; i < headers.Length; i++)
{
row[i] = data[i];
}
dt.Rows.Add(row);
}
return dt;
}
}
해당 스크립트로 불러왔는데, 입력값이 string이라서 string으로 읽어오는 줄 알고있었다. 그런데 디버그를 찍어보니 string이 아니라 char로 데이터를 읽어오는 것이었다.
public float CSVDataLoad(int csvIndex, string csvDataName)
{
// 작동이 안되었던 기존 코드
// return (float)(GameManagers.DataManager.tableDic[ECSVDatas.MonsterTable].Rows[csvIndex][csvDataName]);
// 파싱을 다시 해주고, 불러온 char값을 string으로 변환해주니 해결
return float.Parse(GameManagers.DataManager.tableDic[ECSVDatas.MonsterTable].Rows[csvIndex][csvDataName].ToString());
}
char형을 명시적으로만 float으로 변환하려고 시도해서 실패한 것이었다.
읽어온 값을 ToStrig()으로 string으로 변환시켜주고, 다시 float.Parse로 다시 캐스팅 해줌으로써 해결하였다
진짜 별거 없는 문제였는데, 라이브러리 이해의 부족으로 2시간을 버렸다..
반응형
'[StarChaser] 로그라이크 게임 프로젝트' 카테고리의 다른 글
[유니티/C#] 퀘스트 시스템 만들기 (0) | 2023.06.09 |
---|---|
[유니티/C#] 데이터를 관리하는 클래스 만들기 (1) | 2023.06.06 |
[유니티/C#] 클래스에서 원하는 조건의 랜덤 항목 뽑아오기 (0) | 2023.05.29 |
[유니티/C#] DataTable의 모든 행 읽어오기 (0) | 2023.05.26 |
[유니티/C#] NavMeshAgent 와 NavMeshObstacle (0) | 2023.05.22 |