팀스파르타 내일배움캠프

[TIL]유니티 CSV 통합 파서 및 로컬라이제이션 구조 리팩토링

creator2041 2025. 7. 7. 21:30

[TIL]유니티 CSV 통합 파서 및 로컬라이제이션 구조 리팩토링


📌 오늘 한 일

  • 흩어진 CSV 파서들을 CSVConverter.cs 하나로 통합
  • 무기, 동료, 소재, 캐릭터 등 데이터를 하나의 구조에서 처리
  • DataManager, LanguageManager 도입하여 접근 방식 단순화
  • 로컬라이제이션 시스템을 완전히 별도 모듈로 분리

🔧 개발 내용

🔹 1. CSV 파서 통합

기존에는 무기, 동료, 캐릭터, 소재 등 각각에 대해 별도의 Converter.cs 파일이 존재했음.
→ 이를 CSVConverter.cs 하나로 통합하고, IGetCSVData 인터페이스를 기반으로 모든 데이터 모델이 공통 규약을 따르도록 리팩토링.

public class WeaponData : IGetCSVData
{
    public string ID { get; set; }
    public string Type;
    public string Rank;
    public int Atk;
    public int Spd;
    public string NameKey;
    public string DescKey;
    public string EffectKey;
}

🔹 2. 데이터 매니저 싱글턴화 (DataManager.cs)

  • 게임 시작 시 모든 CSV 파일을 Resources 폴더에서 읽어 파싱
  • 각 데이터를 Dictionary<string, T>로 저장
  • DataManager.Instance.WeaponDB["WEAPON_001"] 형태로 손쉽게 접근 가능

💡 DontDestroyOnLoad() 처리로 씬 이동에도 유지됨

🔹 3. 로컬라이제이션 시스템 분리 (LanguageManager.cs)

  • UILocalization.csv를 전용 매니저에서 관리
  • 키 기반 텍스트 반환: LanguageManager.Instance.GetText("KEY_NAME")
  • 언어 변경 함수까지 내장 → ChangeLanguage("en-US")

🐛 삽질 & 오류

❌ 에러 메시지

'WeaponData.Type'과(와) 'WeaponData.Type' 사이에 모호성이 있습니다.
'CompanionData.NameKey'과(와) 'CompanionData.NameKey' 사이에 모호성이 있습니다.

⚠️ 원인

동일한 클래스명(WeaponData, CompanionData)이 여러 파일에 중복 선언되어 있었기 때문
→ 기존 WeaponConverter.cs, CompanionConverter.cs 등이 남아 있었음

✅ 해결법

  • 이전의 모든 개별 컨버터/데이터 스크립트 삭제
  • CSVConverter.cs에만 데이터 정의가 있도록 정리
  • 이후 정상 작동 확인

📚 배운 점

  • "클래스는 프로젝트 내 한 번만 정의되어야 한다!"
  • 모듈을 기능별로 명확히 분리하고 일관된 방식으로 통합하면 유지보수성과 확장성이 모두 좋아진다
  • 언어 시스템은 로직과 완전히 분리해 둬야 UI, 다국어 대응 시 편하다

🧠 내일 할 일

  • 각 Companion/Weapon 등에 필요한 Skill/Effect 시스템 연동 시작
  • TextMeshPro에서 자동으로 키값에 맞는 텍스트를 불러오는 UITextLocalizer 구현 예정