원시 프롬프트
다음 프롬프트를 짜줘.
현재는 유니티 엔진에서 다음 레벨업에 필요한 경험치를 Experience Manager에서 Xp For Next Level로 입력하고 있어.
하지만 레벨이 오르면 오를수록 필요경험치를 늘리기 위해서는 데이터 테이블 기반이 필요해.
다음 데이터 테이블을 설계하고 작동하게 해줘.
* Level (Integer) : 현재 레벨
* RequiredXP (Integer) : 다음 레벨에 도달하기 위해 필요한 경험치
* 테이블 이름 = LevelXP
프롬프트
목표
현재 ExperienceManager에서 인스펙터로 입력하던 “Xp For Next Level”을 제거(또는 비활성)하고,
데이터테이블 기반으로 레벨별 필요 경험치를 관리·조회하도록 변경해줘.
데이터 스키마
- 테이블 이름: LevelXP
- 컬럼:
* Level (int): 현재 레벨 값 (예: 1, 2, 3...)
* RequiredXP (int): 해당 레벨에서 다음 레벨로 가기 위해 필요한 경험치
- 정의: 플레이어가 현재 Level=L일 때, L→L+1에 필요한 총 경험치량
- 레벨 범위: 최소 1부터 MaxLevel까지(설정 가능). 누락/중복 레벨이 없도록 검증.
연동 대상
- ExperienceManager(또는 등가 모듈)의 레벨업/경험치 누적 로직
- XP Bar(UI), Level 표시 UI, 레벨업 패널 호출부
동작 정의
1) 초기화
- 게임 시작 시 LevelXP 테이블을 로드하여 메모리에 캐싱한다.
- 현재 플레이어 레벨 L의 기준 필요량 = GetRequiredXP(L)로 조회해 ExperienceManager에 설정한다.
- 기존 인스펙터 필드 “Xp For Next Level”은 사용하지 않도록 하며(Deprecated), 마이그레이션 로그 출력.
2) 경험치 누적/레벨업
- 경험치가 누적될 때 현재 레벨 L의 필요량 RequiredXP(L)을 기준으로 진행률을 계산한다.
- 누적치가 RequiredXP(L)에 도달/초과하면 레벨을 +1 하고, 남은 초과분(오버 XP)은 다음 레벨에 이월한다.
- 레벨업 시 즉시 다음 필요량 RequiredXP(L+1)를 조회·반영한다.
- MaxLevel 도달 시 더 이상 레벨이 오르지 않도록 Clamp하고, XP 바는 만 상태로 유지(또는 ‘MAX’ 표시).
3) 누락/에러 핸들링
- LevelXP에 현재 레벨 또는 다음 레벨 행이 없으면:
* 옵션 A: 마지막 유효 레벨의 RequiredXP를 재사용(레벨업 정체 방지)
* 옵션 B: 기본 곡선(예: base * pow(growth, L-1))으로 즉시 산출하는 폴백 사용
- 음수/0/NaN 값 발견 시 경고 로그 후 합리적 기본값(이전 레벨 대비 최소 증가치) 적용.
설계/구현 요구사항
1) 데이터 제공자(Provider)
- ILevelXPProvider 인터페이스:
* int GetRequiredXP(int level)
* int GetMaxLevel()
* bool HasLevel(int level)
- 구현체 LevelXPProvider: LevelXP 테이블을 메모리로 올려 Dictionary<int,int>로 관리.
- 이 Provider를 ExperienceManager에 DI/참조로 연결.
2) 테이블 포맷/에디터 자산
- 기본 구현: ScriptableObject(LevelXPTable) + List<Row(Level, RequiredXP)>
* 메뉴: Create > GameBalance > LevelXP Table (프로젝트 내 에셋 생성)
* Import/Export CSV 지원(편집 편의): Assets/Balance/LevelXP.csv ↔ SO 동기화
- 빌드 포함 및 Addressables 대응 가능하게 설계(선택).
3) 에디터 툴(선택이지만 권장)
- “LevelXP Generator” 윈도우:
* 파라미터: MaxLevel, BaseXP, Growth(지수), Optional Curve(다항식/커스텀)
* Generate 버튼으로 1~MaxLevel 행 자동 생성
* 단일 레벨 수정/일괄 증가/보간 기능 제공
- 검증 버튼: 중복/누락/비단조 증가(필요 시 허용 여부 선택) 체크
4) ExperienceManager 리팩터
- Xp For Next Level 필드 삭제 또는 [Obsolete] 처리
- 현재 레벨 L 기준 필요량을 provider.GetRequiredXP(L)로 조회
- OnXPChanged, OnLevelChanged, OnXPThresholdChanged 이벤트를 통해 UI가 자동 갱신되도록 이벤트 기반으로 운용
- 레벨업 시: 남은 XP 이월 → 새 Threshold 재계산 → UI/사운드/레벨업 패널 호출
5) 퍼포먼스/안전성
- 테이블은 시작 시 1회 로드, 런타임 접근은 O(1) 조회
- 런타임 테이블 교체(디버그용) 시 재바인딩 이벤트 발행으로 UI/경험치 한도 재계산
- 범위 밖 레벨 조회 시 예외 대신 안전한 폴백 + 경고 로그
테스트 시나리오
- L=1, RequiredXP(1)=100일 때 XP를 100 누적 → L=2, 남은 XP 0, RequiredXP(2)로 갱신 확인
- 오버 XP: L=1에서 130 누적 → L=2로 오르면서 잔여 30이 다음 레벨 진행에 반영되는지 확인
- 누락 행: L=5가 테이블에 없을 때 폴백 동작 및 경고 로그 확인
- MaxLevel 도달 시 레벨 상승 차단 및 UI 표시 검증
- CSV Import/Export 왕복 후 값 변형 없이 동일성 유지 확인

(아래는 코덱스의 구현 방식에 따라 다를 수 있음)
LevelXPTable 에셋 생성 방법
- 에셋 생성 메뉴 열기
Unity 프로젝트 뷰에서 Create > GameBalance > LevelXP Table 메뉴를 선택하면 LevelXPTable ScriptableObject 에셋을 바로 만들 수 있습니다. - 기본 설정 확인
새로 생성된 에셋을 선택하면 Max Level(최대 레벨)과 각 레벨별 Level/Required XP 리스트가 인스펙터에 표시됩니다. 필요에 따라 직접 값을 입력하거나 아래의 CSV 동기화 기능을 사용하세요.
LevelXP CSV 데이터를 에셋에 넣는 방법
- CSV 파일 준비
Assets/Balance/LevelXP.csv 위치에 Level,RequiredXP 헤더를 포함한 CSV 파일을 준비합니다. 경로가 없으면 자동으로 생성되므로, 프로젝트 내에서 해당 파일만 수정하면 됩니다. - 인스펙터에서 Import 실행
LevelXPTable 에셋을 선택하고 인스펙터 하단의 CSV Sync 섹션에서 Import CSV 버튼을 눌러 CSV 내용을 테이블에 불러옵니다. 성공하면 행 수가 갱신되고 에셋이 저장됩니다. - 필요 시 검증
같은 섹션의 Validate Table 버튼을 사용하면 누락 레벨이나 중복 레벨이 있는지 로그로 확인할 수 있습니다. - CSV로 다시 내보내기
에셋에서 수정한 값을 CSV로 저장하려면 Export CSV 버튼을 사용하면 됩니다. 현재 테이블 내용을 정렬 후 Assets/Balance/LevelXP.csv 파일로 기록합니다.
이 과정을 통해 LevelXPTable 에셋을 생성하고, CSV 데이터를 손쉽게 가져오거나 내보낼 수 있습니다.

마지막으로 ExperienceManager에 테이블 연결. (이것도 코덱스가 말 안해줘서 직접 찾음...)
'AI 게임 제작 > AI 코딩' 카테고리의 다른 글
| 스테이지 개념 구현 (0) | 2025.09.27 |
|---|---|
| 투사체 방향 전환 반응성 개선 및 구현 현황 점검 (0) | 2025.09.27 |
| 스킬 강화 - 공격력 강화 효과 구현 (0) | 2025.09.27 |
| 스킬 강화 - 아이템 획득 범위 증가 효과 구현 (0) | 2025.09.27 |
| 스킬 강화 - 투사체 증가 효과 구현 (0) | 2025.09.27 |