[Unity] 유니티에서 CSV파일 저장 및 불러오기
CSV 파일이란?
CSV(Comma Separated Values) 파일은 쉼표(,)로 구분된 값들을 가진 텍스트 파일입니다.
간단한 형식으로 데이터를 저장하고 불러올 수 있어 데이터베이스나 스프레드시트와의 호환성이 좋습니다.
CSV 장단점
CSV 장점
- 간단하고 가벼워 처리 속도가 빠름
- 엑셀 등 다른 프로그램과 호환성이 좋음
- 데이터 구조가 단순하여 이해하기 쉬움
CSV 단점
- 복잡한 데이터 구조를 표현하기 어려움
- 데이터 유효성 검사가 어려움
- 중첩된 데이터 구조를 표현하기 불편함
JSON과 비교
JSON과 비교하여 상황별 CSV와 JSON사용
- 간단한 데이터 저장:
CSV
- 복잡한 데이터 구조:
JSON
- 대용량 데이터:
CSV (성능 고려)
- 데이터 유효성 검사:
JSON
- 다양한 언어와의 호환성:
JSON
사용법
- 파일 읽기 ```c# using UnityEngine; using System.IO;
public class CSVReader : MonoBehaviour { public string filePath;
public void ReadCSV()
{
StreamReader reader = new StreamReader(filePath);
string line;
while ((line = reader.ReadLine()) != null)
{
string[] values = line.Split(',');
// 각 값 처리
Debug.Log(values[0] + ", " + values[1]);
}
reader.Close();
} } ``` <br>
- 파일 쓰기 ```c# using UnityEngine; using System.IO;
public class CSVWriter : MonoBehaviour { public string filePath; public string[] data;
public void WriteCSV()
{
StreamWriter writer = new StreamWriter(filePath);
foreach (string line in data)
{
writer.WriteLine(line);
}
writer.Close();
} } ``` <br>
- 특정 열의 데이터 읽기 ```c# using UnityEngine; using System.IO;
public class CSVReader : MonoBehaviour { public string filePath; public int targetColumn = 2; // 읽고 싶은 열의 인덱스 (0부터 시작)
public void ReadSpecificColumn()
{
StreamReader reader = new StreamReader(filePath);
string line;
while ((line = reader.ReadLine()) != null)
{
string[] values = line.Split(',');
if (values.Length > targetColumn)
{
string targetValue = values[targetColumn];
Debug.Log(targetValue);
}
}
reader.Close();
} } ``` <br>
- 특정 열의 데이터 쓰기 ```c# using UnityEngine; using System.IO;
public class CSVWriter : MonoBehaviour { public string filePath; public string[] data; public int targetColumn = 2; // 수정할 열의 인덱스
public void WriteToSpecificColumn()
{
StreamWriter writer = new StreamWriter(filePath);
foreach (string line in data)
{
string[] values = line.Split(',');
if (values.Length > targetColumn)
{
values[targetColumn] = "new value"; // 값 변경
string newLine = string.Join(",", values);
writer.WriteLine(newLine);
}
}
writer.Close();
} } ``` <br>
JSON과 CSV를 같이 사용하기
유니티에서 CSV와 JSON을 함께 사용할 수 있습니다. 병행해서 사용할 경우, 각 파일 형식의 장점을 살려 효율적으로 데이터를 관리할 수 있다는 장점이 있습니다.
CSV와 JSON을 함께 사용하는 예시
- 기본 정보는 CSV, 상세 정보는 JSON:
- 아이템 목록은 CSV로 저장하고, 각 아이템의 상세 정보(효과, 설명 등)는 JSON 파일로 저장하여 관리합니다.
- 게임 설정:
- 게임의 기본 설정은 CSV로 저장하고, 사용자별 설정은 JSON으로 저장하여 유저 데이터를 관리합니다.
- 레벨 디자인:
- 레벨의 기본 정보(맵 크기, 오브젝트 배치 등)는 CSV로 저장하고, 각 오브젝트의 상세 정보(이름, 속성 등)는 JSON으로 저장합니다.
- 레벨의 기본 정보(맵 크기, 오브젝트 배치 등)는 CSV로 저장하고, 각 오브젝트의 상세 정보(이름, 속성 등)는 JSON으로 저장합니다.
유니티에서 CSV와 JSON을 병행 사용시 주의할 점
- 데이터 일관성: 두 파일 형식 간의 데이터 일관성을 유지해야 합니다.
- 파일 경로: 파일 경로를 정확하게 관리해야 합니다.
- 데이터 형 변환: CSV에서 읽어온 데이터를 JSON 형식으로 변환하거나, 그 반대의 작업을 수행해야 할 수 있습니다.
using UnityEngine;
using System.Collections.Generic;
public class DataManager : MonoBehaviour
{
public TextAsset csvData;
public TextAsset jsonItemData;
public void LoadData()
{
// CSV 파일에서 아이템 목록 읽어오기
string[] lines = csvData.text.Split('\n');
List<Item> items = new List<Item>();
foreach (string line in lines)
{
string[] values = line.Split(',');
Item item = new Item();
item.id = int.Parse(values[0]);
item.name = values[1];
// ...
// JSON 파일에서 아이템 상세 정보 읽어오기
string jsonPath = "Items/" + item.id + ".json";
TextAsset jsonData = Resources.Load<TextAsset>(jsonPath);
ItemData itemData = JsonUtility.FromJson<ItemData>(jsonData.text);
item.description = itemData.description;
item.effects = itemData.effects;
// ...
items.Add(item);
}
}
}