유니티

유니티 - CSV는 뭘까?

머슬머슬가이 2025. 4. 16. 22:43

CSV는 무엇일까?

게임 개발에서 CSV(Comma-Separated Values) 포맷은 주로 디자이너와 협업을 위해 많이 사용되는 데이터 형식이다. 기본적으로 엑셀과 유사한 표 형식으로 데이터를 관리할 수 있기 때문에, 게임 초기 데이터나 번역 텍스트, 아이템 목록 등 여러 종류의 데이터를 쉽게 수정하고 관리할 수 있다.

CSV와 JSON의 차이점

CSV

CSV는 단순한 텍스트 기반 포맷으로, 표 형식으로 데이터를 저장한다. 각 행은 데이터 항목을 의미하고, 각 열은 항목 속성을 나타낸다. CSV는 단순한 데이터에 적합하며, 수정이 쉽고 직관적이다. 특히 엑셀이나 구글 시트와 같은 도구를 사용하면 데이터를 쉽게 편집하고, 기획자나 디자이너가 데이터 관리에 참여하기 매우 유리하다.

장점:

  • 편리한 데이터 관리: 기획자나 디자이너가 쉽게 다룰 수 있다.
  • 엑셀 호환: 데이터를 시각적으로 편집하고 관리할 수 있어, 기획 단계에서 활용도가 높다.
  • 단순한 데이터에 적합: 중첩 구조가 필요하지 않거나 복잡한 데이터가 없을 때 유용하다.

단점:

  • 중첩 데이터 표현의 한계: 복잡한 계층 구조나 중첩된 데이터(예: 배열, 딕셔너리) 표현이 어려운 단점이 있다.
  • 파싱 필요: Unity에서 직접 데이터를 파싱해야 하므로 커스텀 파서를 작성하거나 TextAsset으로 로드한 뒤 데이터를 처리해야 한다.

JSON

JSON은 구조화된 데이터를 표현하기에 훨씬 유연하고 강력하다. 중첩된 데이터 구조를 잘 처리할 수 있기 때문에, 복잡한 데이터를 표현할 때 매우 유용하다. 주로 서버 연동, 세이브 파일, 사용자 설정 데이터와 같은 데이터 저장에 사용된다.

장점:

  • 구조화된 데이터 표현: 중첩된 구조와 배열을 표현하기 용이하다.
  • 유연성: 다양한 데이터 유형을 다룰 수 있어 복잡한 데이터 구조가 필요할 때 적합하다.
  • 직렬화 도구 지원: JsonUtility나 Newtonsoft.Json 등 다양한 라이브러리를 사용하여 직렬화/역직렬화가 쉽다.

단점:

  • 편집이 불편: CSV와 달리 표 형식으로 쉽게 편집할 수 없어서, 툴이나 JSON 에디터 없이 직접 수정하기 어렵다.
  • 가독성: 사람이 직접 읽기에는 CSV보다 복잡할 수 있다.

CSV와 ScriptableObject: 비슷하지만 다른 이유

ScriptableObject와 CSV의 관계

ScriptableObject는 Unity 에디터 내에서 데이터 에셋을 관리하는 데 사용되는 객체다. 상태를 저장하는 객체로, Unity의 인스펙터에서 직접 수정 가능한 형태로 데이터를 관리할 수 있다. 하지만 ScriptableObject는 주로 에디터 내에서 사용되며, 기획자나 디자이너가 직접 수정하는 데에는 제약이 있을 수 있다. 또한, 대량의 데이터 수정이 필요할 경우 효율적이지 않다.

왜 CSV를 사용하나?

CSV는 데이터의 직관적인 관리와 기획자/디자이너와의 협업을 위해 가장 적합한 형식이다. ScriptableObject가 에디터에서 수정 가능하지만, 그 직접 편집이 어려운 점이 있다. 대량의 데이터 수정이 필요할 때 CSV를 사용하면 엑셀을 통해 빠르고 편리하게 데이터를 수정할 수 있다. 또한, 디자이너와 개발자 간의 역할을 명확하게 구분하고, 기획자가 CSV 파일을 편집하고, 개발자가 이를 SO로 변환하여 사용하면 협업 효율이 높아진다.

CSV는 표 형식으로 데이터를 다룰 수 있기 때문에, 엑셀과 같은 도구로 직관적인 편집이 가능하다. 특히 기획자나 디자이너가 엑셀로 수정할 수 있는 점에서 매우 유리하다. 반면 ScriptableObject는 Unity 에디터에서 사용되지만, 배경 데이터를 수정하기에는 불편하다. 그래서 초기 데이터는 CSV로 관리하고, 게임 빌드 시 ScriptableObject로 변환하여 사용하면 효율적이다.

혼합 구조: CSV → ScriptableObject → JSON

최근 스파르타 게임잼에서 기획자로 참여한 경험을 예로 들면, 팀원으로 현업 개발자가 있었는데, 그 개발자분이 CSV 데이터를 ScriptableObject로 변환시켜서 사용하는 작업을 했다.

그 후, 런타임 데이터를 직접 저장할 수 있는 JSON으로 변환까지 진행할 경우, 유연하게 데이터 관리가 가능하다.

흐름

  1. CSV: 기획자가 엑셀로 데이터를 작성
  2. ScriptableObject: Unity에서 CSV 데이터를 SO로 변환하여 에디터에서 관리
  3. JSON: 런타임에 데이터를 JSON 형식으로 저장하여 게임에 적용

이렇게 하면 기획자는 CSV로 데이터를 쉽게 수정하고, 개발자는 Unity 에디터에서 데이터를 변환해 빌드에 포함시킬 수 있다. 또한, 런타임에서 JSON으로 데이터를 저장하고 불러오는 방식으로 유연하게 관리할 수 있다.