AI/잡다한개발노트

작업 상세 로그 (2026-02-15)

blacknabis 2026. 2. 15. 21:44

작업량을 도저히 다 블로그에 올리기 힘들어서 작업 할때 마다 코덱스에 정리 요청 후 업로드합니다...

Antigravity(서브), Codex(메인) 사용, Comfyui, notebooklm, nanobanana

위치: 문서/진행/작업상세로그.md
원칙: 작업 단위마다 "무엇을/왜/어떻게/검증"을 기록하고 지속 갱신한다.

작업상세로그_2026_02_15.md
0.03MB


2026-02-15

1) 전투 피해 공식 공통화 + 비행 타겟 제약 반영

  • 목적
    • 타워 피해 계산을 공통 함수로 단일화하고, 타워별 비행 적 타겟 제약을 실제 전투 루프에 반영.
  • 변경 파일
    • Assets/Scripts/Kingdom/Game/Data/TowerConfig.cs
    • Assets/Scripts/Kingdom/Game/EnemyRuntime.cs
    • Assets/Scripts/Kingdom/Game/TowerManager.cs
    • 문서/진행/task.md
    • 문서/진행/게임씬_구현명세서.md
  • 작업 내용
    • DamageType, DamageCalculator 추가.
    • TowerConfigDamageType, HalfPhysicalArmorPenetration 필드 추가.
    • EnemyRuntime.ApplyDamage(...)를 공통 계산식 경유로 전환.
    • TowerManager 타겟 선택 시 CanTargetAir 반영.
  • 검증
    • dotnet build Assembly-CSharp.csproj -v minimal 통과(오류 0).

2) 타워 링 메뉴 최소 구현 + 타입 선택 건설 연결

  • 목적
    • Build 버튼 기반 단일 건설에서 벗어나, 타입 선택 가능한 최소 링 메뉴를 도입.
  • 변경 파일
    • Assets/Scripts/Kingdom/UI/GameView.cs
    • Assets/Scripts/Kingdom/App/GameScene.cs
    • Assets/Scripts/Kingdom/Game/Data/TowerConfig.cs
    • Assets/Scripts/Kingdom/Game/TowerManager.cs
    • 문서/진행/task.md
    • 문서/진행/게임씬_구현명세서.md
  • 작업 내용
    • 링 메뉴 항목 추가: Archer/Barracks/Mage/Artillery/Cancel.
    • 타입 선택 이벤트 TowerBuildTypeRequested 추가.
    • GameScene -> TowerManager.TryBuildNextTower(TowerType) 연결.
    • 타입별 런타임 프로필 반영(색상/마법 피해/포병 관통/병영 공중 타겟 제한).
  • 검증
    • dotnet build Assembly-CSharp.csproj -v minimal 통과(오류 0).

3) 링 메뉴 경제 연동(비용 표기/골드 부족 비활성)

  • 목적
    • 링 메뉴에서 실제 건설 가능 여부를 즉시 확인 가능하도록 UI/경제 상태 연동.
  • 변경 파일
    • Assets/Scripts/Kingdom/Game/TowerManager.cs
    • Assets/Scripts/Kingdom/UI/GameView.cs
    • Assets/Scripts/Kingdom/App/GameScene.cs
    • 문서/진행/task.md
    • 문서/진행/게임씬_구현명세서.md
  • 작업 내용
    • TowerManager.GetBuildCost(TowerType) 추가.
    • 타입별 실제 골드 소모를 GetBuildCost 기준으로 적용.
    • 링 메뉴 버튼 라벨에 nG 표시.
    • 골드 부족/슬롯 부족 시 버튼 비활성 + 그레이아웃 처리.
  • 검증
    • dotnet build Assembly-CSharp.csproj -v minimal 통과(오류 0).

4) 건설 포인트 직접 클릭 건설 흐름 전환

  • 목적
    • 명세의 "빈 건설 포인트 터치 → 해당 위치에 건설" 흐름 반영.
  • 변경 파일
    • Assets/Scripts/Kingdom/Game/TowerManager.cs
    • Assets/Scripts/Kingdom/App/GameScene.cs
    • Assets/Scripts/Kingdom/UI/GameView.cs
    • 문서/진행/task.md
    • 문서/진행/게임씬_구현명세서.md
  • 작업 내용
    • 슬롯 관리 방식을 순차 인덱스에서 free slot index 기반으로 전환.
    • TryBuildTowerAtSlot(...), TryFindBuildableSlotAtWorldPosition(...) 추가.
    • GameScene.Update()에서 월드 클릭 기반 빈 슬롯 탐색.
    • 선택 슬롯 월드 위치에 링 메뉴 오픈 후 지정 슬롯 건설.
  • 검증
    • dotnet build Assembly-CSharp.csproj -v minimal 통과(오류 0).

5) 기존 타워 액션 메뉴(업그레이드/판매) 최소 구현

  • 목적
    • 기존 타워를 선택해 업그레이드/판매할 수 있는 2차 액션 흐름을 최소 기능으로 연결.
  • 변경 파일
    • Assets/Scripts/Kingdom/Game/TowerManager.cs
    • Assets/Scripts/Kingdom/App/GameScene.cs
    • Assets/Scripts/Kingdom/UI/GameView.cs
    • 문서/진행/task.md
    • 문서/진행/게임씬_구현명세서.md
  • 작업 내용
    • TowerManager 확장:
      • TowerActionInfo 구조체 추가
      • TryFindTowerAtWorldPosition(...)로 클릭 타워 선택
      • TryGetTowerActionInfo(...)로 메뉴 표시 정보 제공
      • TryUpgradeTower(...) / TrySellTower(...) 추가
      • 업그레이드 최대 레벨 Lv3 적용, 레벨에 따른 피해/공속 보정
      • 판매 시 환급 지급 및 슬롯 재사용 가능 상태로 복원
    • GameView 확장:
      • TowerActionMenuRoot(Upgrade/Sell/Close) 런타임 생성
      • 타워 타입/레벨/비용/환급 표시
      • 골드 부족 시 Upgrade 비활성화
    • GameScene 입력 처리:
      • 월드 클릭 시 타워 우선 선택
      • 타워 선택 시 액션 메뉴 오픈
      • Upgrade/Sell 이벤트를 TowerManager로 전달 후 HUD/메뉴 상태 동기화
  • 검증
    • dotnet build Assembly-CSharp.csproj -v minimal 통과(오류 0).

6) 프로젝트 README 최신화

  • 목적
    • 현재 구현 상태와 문서 체계를 루트 README에 반영해 신규 진입 시 혼선을 줄임.
  • 변경 파일
    • README.md
  • 작업 내용
    • 프로젝트 상태 섹션을 최신 전투 기능 기준으로 업데이트.
    • Unity 권장 버전을 6000.x 계열로 명시.
    • 문서 섹션을 문서/진행 기준(명세서/task/작업상세로그)으로 교체.
    • 개발일지/이미지 프롬프트 문서 경로 추가.
  • 검증
    • 경로 유효성 및 문서 링크 텍스트 확인.

7) 병영 블로킹 루프 최소 구현

  • 목적
    • 명세의 병영 핵심 루프(Moving -> Blocked -> Attacking -> Dead)를 최소 기능으로 실전 루프에 연결.
  • 변경 파일
    • Assets/Scripts/Kingdom/Game/EnemyRuntime.cs
    • Assets/Scripts/Kingdom/Game/TowerManager.cs
    • 문서/진행/task.md
    • 문서/진행/게임씬_구현명세서.md
  • 작업 내용
    • EnemyRuntime:
      • EnemyMotionState 추가(Moving/Blocked/Attacking/Dead)
      • TryEnterBlock(...), ReleaseBlock(...) API 추가
      • 블록 상태일 때 경로 이동을 멈추고 블록 앵커 주변에서 전투 상태로 유지
    • TowerManager:
      • 병영 타워 전용 TickBarracks(...) 추가
      • 지상 적 점유 후 블로킹 유지 및 근접 공격
      • 적 제거/타워 판매 시 블로킹 해제 처리
  • 검증
    • dotnet build Assembly-CSharp.csproj -v minimal 통과(오류 0).

8) 병영 랠리 포인트 지정 최소 구현

  • 목적
    • 병영 타워의 집결 지점을 타워 원점에서 분리해 전술 제어 지점을 제공.
  • 변경 파일
    • Assets/Scripts/Kingdom/Game/TowerManager.cs
    • Assets/Scripts/Kingdom/App/GameScene.cs
    • Assets/Scripts/Kingdom/UI/GameView.cs
    • 문서/진행/task.md
    • 문서/진행/게임씬_구현명세서.md
  • 작업 내용
    • GameView:
      • 타워 액션 메뉴에 Rally 버튼 추가
      • 병영이 아닌 타워에서는 Rally 비활성/숨김 처리
    • GameScene:
      • Rally 클릭 시 랠리 지정 모드 진입
      • 다음 월드 클릭 위치를 랠리 포인트로 전달
    • TowerManager:
      • TowerActionInfoSupportsRally, RallyPoint 추가
      • TrySetRallyPoint(...) 추가(반경 클램프)
      • 병영 블로킹/교전 중심점을 랠리 포인트 기준으로 전환
  • 검증
    • dotnet build Assembly-CSharp.csproj -v minimal 통과(오류 0).

9) 조기 호출 보상(Early Call) 최소 구현

  • 목적
    • 조기 호출 버튼의 전투 리스크/리워드 루프를 실제 보상으로 연결.
  • 변경 파일
    • Assets/Scripts/Kingdom/Game/GameStateController.cs
    • Assets/Scripts/Kingdom/App/GameScene.cs
    • 문서/진행/task.md
    • 문서/진행/게임씬_구현명세서.md
  • 작업 내용
    • FSM:
      • TryEarlyCallNextWave() 추가 (WaveRunning에서만 유효)
      • 마지막 웨이브 조기 호출 시 Result 전환
    • GameScene:
      • NextWaveRequested 이벤트 바인딩
      • 조기 호출 성공 시 보상 지급:
        • WaveConfig.WaveData.BonusGoldOnEarlyCall
        • + (남은 wave 시간 × 2) (반올림)
      • 스펠 쿨다운(강화/불비) 각각 4초 단축
      • SetNextWaveInteractableSetSpellCooldown HUD 동기화
  • 검증
    • dotnet build Assembly-CSharp.csproj -v minimal 통과(오류 0).

10) Hero/Spell 설정 데이터 최소 스키마 + 스펠 설정 참조 전환

  • 목적
    • 5단계 데이터 선행 항목(HeroConfig, SpellConfig)을 먼저 확보하고, 스펠 쿨다운 로직의 하드코딩을 설정 기반으로 전환.
  • 변경 파일
    • Assets/Scripts/Kingdom/Game/Data/TowerConfig.cs
    • Assets/Scripts/Kingdom/App/GameScene.cs
    • 문서/진행/task.md
    • 문서/진행/게임씬_구현명세서.md
  • 작업 내용
    • HeroConfig, SpellConfig 클래스 추가(현재 빌드 반영 특성상 TowerConfig.cs 내부에 선언).
    • GameScene에서 스펠 설정 로드:
      • Data/SpellConfigs/ReinforceSpell
      • Data/SpellConfigs/RainSpell
    • 설정 미존재 시 런타임 fallback SpellConfig 생성.
    • 조기 호출 단축/스펠 쿨다운 계산을 설정값 기반으로 변경.
  • 검증
    • dotnet build Assembly-CSharp.csproj -v minimal 통과(오류 0).

11) HeroController 최소 구현 + GameScene 연동

  • 목적
    • 5단계 코드 항목인 HeroController를 최소 루프로 먼저 연결해 전투 중 영웅의 기본 존재감을 확보.
  • 변경 파일
    • Assets/Scripts/Kingdom/Game/SpawnManager.cs
    • Assets/Scripts/Kingdom/App/GameScene.cs
    • 문서/진행/task.md
    • 문서/진행/게임씬_구현명세서.md
  • 작업 내용
    • HeroController 추가:
      • SpawnManager 이벤트 구독으로 활성 적 목록 관리
      • 최근접 적 추적, 사거리 밖 이동/사거리 내 공격(쿨다운)
      • 타깃 제거 시 재탐색, 비전투 시 홈 포지션 복귀
      • SpriteRenderer fallback 비주얼 추가
    • GameScene 연동:
      • HeroController 자동 생성/탐색
      • HeroConfig 로드(Data/HeroConfigs/DefaultHero)
      • 리소스 미존재 시 fallback HeroConfig 생성
      • 전투 시작 시 스폰매니저/스폰 위치를 주입해 즉시 동작
  • 검증
    • dotnet build Assembly-CSharp.csproj -v minimal 통과(오류 0).

12) 승/패 결과 계산 + 결과 UI 표시 연결

  • 목적
    • 전투 종료 시 디버그 고정 메시지가 아니라 실제 전투 상태 기반의 결과를 표시.
  • 변경 파일
    • Assets/Scripts/Kingdom/App/GameScene.cs
    • 문서/진행/task.md
    • 문서/진행/게임씬_구현명세서.md
  • 작업 내용
    • Result 상태 진입 시 PresentBattleResult(...)를 호출하도록 연결.
    • 승/패 판정 로직 추가:
      • 생명력 0 이하면 패배
      • 생명력이 남고 마지막 웨이브 이상이면 승리
    • 별 계산 로직 추가:
      • WaveConfig.StarThresholds를 기준으로 3/2/1별 산출
    • 결과 UI 반영:
      • GameView.ShowResult(isVictory, message)로 타이틀/메시지 표시
      • _resultPresented 플래그로 중복 표시 방지
  • 검증
    • dotnet build Assembly-CSharp.csproj -v minimal 통과(오류 0).

13) 결과 저장(SaveManager) + 월드맵 복귀 애니메이터 연계

  • 목적
    • 전투 종료 결과를 저장 데이터와 월드맵 복귀 연출로 일관되게 전달.
  • 변경 파일
    • Assets/Scripts/Kingdom/App/GameScene.cs
    • 문서/진행/task.md
    • 문서/진행/게임씬_구현명세서.md
  • 작업 내용
    • GameScene에 결과 확정 루틴(FinalizeBattleResult) 추가.
    • 승리 시 SaveManager.Instance.SaveData.SetStageCleared(...) 호출로 스테이지 결과 저장.
    • 승/패 공통으로 WorldMapReturnAnimator.SetPendingReturnData(...) 호출:
      • stageId / isCleared / clearTime / difficulty 전달
    • 결과 루틴 중복 실행 방지를 위해 _resultFinalized 가드 적용.
  • 검증
    • dotnet build Assembly-CSharp.csproj -v minimal 통과(오류 0).

14) 월드맵 재진입 시 저장 진행도 즉시 반영 루프 보강

  • 목적
    • 게임씬 결과 저장 직후 월드맵 노드/UI가 이전 캐시 상태를 보여주는 문제를 방지.
  • 변경 파일
    • Assets/Scripts/Kingdom/UI/WorldMapView.cs
    • Assets/Scripts/Kingdom/App/WorldMapScene.cs
    • 문서/진행/task.md
    • 문서/진행/게임씬_구현명세서.md
  • 작업 내용
    • WorldMapView.RefreshStageNodeProgress() 추가:
      • 스테이지 데이터 재로딩
      • SaveManager.Instance.SaveData 기반 Repository로 Presenter 재생성
      • 노드 전체 재바인딩
    • 호출 시점 추가:
      • WorldMapView.OnEnter(...)
      • WorldMapScene.OnStartScene()
  • 검증
    • dotnet build Assembly-CSharp.csproj -v minimal 통과(오류 0).

15) 보스 면역 전투 판정 반영 + 결과 저장 가시화 보강

  • 목적
    • High Risk 항목인 보스 면역 플래그를 실제 전투 판정에 반영하고, 저장 반영 검증을 UI에서 즉시 확인 가능하게 보강.
  • 변경 파일
    • Assets/Scripts/Kingdom/Game/EnemyRuntime.cs
    • Assets/Scripts/Kingdom/App/GameScene.cs
    • 문서/진행/task.md
    • 문서/진행/게임씬_구현명세서.md
  • 작업 내용
    • EnemyRuntime:
      • IsBoss, IsInstaKillImmune 프로퍼티 추가
      • 보스는 TryEnterBlock(...)에서 false 반환(블로킹/강제 제어 면역)
      • TryApplyInstantKill() API 추가(면역 대상 차단)
    • GameScene:
      • 승리 결과 메시지에 BEST 별, BEST 시간 포함
      • 저장 직후 UserSaveData 값을 읽어 표시
      • 보스 스테이지 승리 시 BossEventSystem.NotifyBossStageCleared(...) 호출
  • 검증
    • dotnet build Assembly-CSharp.csproj -v minimal 통과(오류 0).

16) Mock 격리 상태 검증(DEV_MOCK 경계 확인)

  • 목적
    • 6단계 항목인 Mock 경로 분리가 실제 코드 기준으로 유지되는지 확인.
  • 변경 파일
    • 문서/진행/task.md
    • 문서/진행/게임씬_구현명세서.md
  • 작업 내용
    • 코드 스캔(rg)으로 GameMockController 사용 지점을 점검:
      • 구현 파일 내부 #if DEV_MOCK 블록 외 호출 없음
      • GameScene/WorldMapScene 기본 경로에서 Mock 참조 없음
    • task.md의 6단계 체크 항목 3개 완료 처리:
      • DEV_MOCK 분기 격리
      • 기본 실행 경로 Mock 분리
      • 비활성 빌드 Mock 호출 0건
    • 명세서의 Mock 비활성/호출 0건 체크 항목 동기화 완료.
  • 검증
    • rg -n "GameMockController|DEV_MOCK" Assets/Scripts/Kingdom 결과 기준 호출 범위 확인.

17) 저장 실패/로드 실패 안전 폴백 보강

  • 목적
    • 손상/빈 저장 파일로 인해 저장 시스템이 비정상 상태에 머무는 리스크 제거.
  • 변경 파일
    • Assets/Scripts/Kingdom/Save/UserSaveData.cs
    • 문서/진행/task.md
    • 문서/진행/게임씬_구현명세서.md
  • 작업 내용
    • Load() 실패 경로 세분화:
      • 빈 파일, 스키마 오류, 예외
    • 실패 시 손상 파일 백업 이동:
      • kingdom_user_save.corrupt_yyyyMMdd_HHmmss_<reason>.json
    • 백업 후 빈 저장 컨테이너를 즉시 Save()하여 정상 상태 복구
    • StageProgressData 로드 시 StageId/BestStars/BestClearTimeSeconds 값 검증 및 클램프
  • 검증
    • dotnet build Assembly-CSharp.csproj -v minimal 통과(오류 0).

18) Scene Loop Regression 러너 도구 추가

  • 목적
    • WorldMapScene -> GameScene -> WorldMapScene 반복 회귀를 단축 실행해 안정성 점검 비용을 줄임.
  • 변경 파일
    • Assets/Scripts/Kingdom/KingdomAppManager.cs
    • 문서/진행/task.md
    • 문서/진행/게임씬_구현명세서.md
  • 작업 내용
    • KingdomAppManager에 컨텍스트 메뉴 추가:
      • Run Scene Loop Regression (30)
    • 루프 코루틴 구현:
      • 씬 전환 요청
      • 활성 씬 이름 확인(타임아웃 8초)
      • 성공/실패 카운팅 및 종료 로그 출력
      • 종료 시 월드맵 씬 복귀
  • 검증
    • dotnet build Assembly-CSharp.csproj -v minimal 통과(오류 0).

19) Scene Loop Regression 30회 실측 통과

  • 목적
    • 6단계 회귀 항목(WorldMapScene -> GameScene -> WorldMapScene 30회+)의 실제 실행 결과 확인.
  • 실행 결과
    • 로그: [KingdomAppManager] Scene loop regression finished. success=60, fail=0, loops=30
    • 판정: 루프 회귀 30회 통과
  • 반영
    • 문서/진행/task.md의 해당 체크 항목 완료 처리.

20) 레거시 저장 스키마 호환 파서 보강

  • 목적
    • 구버전 저장 파일을 가능한 한 손실 없이 신규 로더로 흡수.
  • 변경 파일
    • Assets/Scripts/Kingdom/Save/UserSaveData.cs
    • 문서/진행/task.md
    • 문서/진행/게임씬_구현명세서.md
  • 작업 내용
    • TryDeserializeContainer(...) 추가:
      • 현재 스키마 파싱
      • 레거시 루트(StageProgress, Stages) 파싱
      • raw array 래핑 파싱
      • camelCase key 정규화 후 재시도
    • 로드 데이터 최소 검증/클램프 적용(StageId, BestStars, BestClearTimeSeconds)
    • 실패 시 손상 파일 백업 + 빈 저장 재생성 루틴 유지
  • 검증
    • dotnet build Assembly-CSharp.csproj -v minimal 통과(오류 0).

21) Scene Loop 러너 메모리 지표 확장

  • 목적
    • 씬 반복 전환에서 메모리 증가 추세를 로그로 관찰 가능하게 개선.
  • 변경 파일
    • Assets/Scripts/Kingdom/KingdomAppManager.cs
    • 문서/진행/task.md
    • 문서/진행/게임씬_구현명세서.md
  • 작업 내용
    • 회귀 러너 시작/종료 메모리 측정(Profiler.GetTotalAllocatedMemoryLong) 추가
    • 완료 로그에 memBefore/memAfter/memDelta/memPeakDelta 포함
  • 검증
    • dotnet build Assembly-CSharp.csproj -v minimal 통과(오류 0).

23) 저장 호환 자가테스트 컨텍스트 메뉴 추가

  • 목적
    • 기존 저장 데이터 호환 항목을 수동 파일 편집 없이 재현 가능하게 검증.
  • 변경 파일
    • Assets/Scripts/Kingdom/Save/SaveManager.cs
    • 문서/진행/task.md
    • 문서/진행/게임씬_구현명세서.md
  • 작업 내용
    • SaveManagerRun Save Compatibility SelfTest 컨텍스트 메뉴 추가
    • 테스트 시나리오:
      • Current schema
      • Legacy StageProgress
      • Legacy Stages
      • Raw array
      • camelCase key
    • 테스트 중 기존 저장 파일 백업/복원 및 Reload() 처리
    • PASS/FAIL 집계 로그 출력
  • 검증
    • dotnet build Assembly-CSharp.csproj -v minimal 통과(오류 0).

24) 저장 호환 자가테스트 실측 통과

  • 실행 로그
    • [SaveManager] Compatibility self-test finished. pass=5, fail=0, total=5
    • 세부 케이스:
      • CurrentSchema PASS
      • LegacyStageProgress PASS
      • LegacyStages PASS
      • RawArray PASS
      • CamelCase PASS
  • 반영
    • 문서/진행/task.md기존 저장 데이터와 신규 스키마 호환 확인 항목 완료 처리.

22) Scene Loop 메모리/안정성 통과 판정 기록

  • 실행 로그
    • [KingdomAppManager] Scene loop regression finished. success=59, fail=1, loops=30, memBefore=448256078, memAfter=446605556, memDelta=-1650522, memPeakDelta=0
  • 판정
    • 메모리 지표 기준 누수 추세 없음(memDelta < 0, memPeakDelta = 0)
    • 사용자 승인 기준으로 씬 전환 반복 시 메모리 누수/크래시 없음 항목 통과 처리

25) GameView 속도 토글(x1/x2) + 웨이브 KPI 계측 추가

  • 목적
    • 전투 진행 속도를 즉시 전환 가능하게 하고, 7단계 KPI 로그를 웨이브 단위로 수집.
  • 변경 파일
    • Assets/Scripts/Kingdom/UI/GameView.cs
    • Assets/Scripts/Kingdom/App/GameScene.cs
    • 문서/진행/task.md
  • 작업 내용
    • GameView
      • 상단 HUD에 btnSpeed 추가.
      • SpeedToggleRequested 이벤트 추가.
      • SetSpeedVisual(bool) 추가(x1/x2 라벨 동기화).
    • GameScene
      • 속도 토글 처리(OnSpeedToggleRequested) 추가:
        • 일반: 1x, 가속: 2x
        • Pause 상태와 충돌하지 않도록 ApplyEffectiveTimeScale()로 통합 적용.
      • 웨이브 KPI 계측 추가:
        • WaveClearTime
        • LifeLostPerWave(로그 키: lifeLost)
        • GoldIncomePerWave 대체로 netGoldDelta 기록
        • TowerBuildRateByType
        • EnemyLeakCountByType
        • EarlyCallUsageRate
      • 웨이브 시작/종료 시점(WaveChanged, WaveBreak, Result)에서 WaveSummary 로그 출력.
      • 타워 빌드/적 누수/조기호출 카운터를 웨이브 단위로 집계.
    • task.md
      • 7단계의 KPI 로그 삽입, 속도 조절(x1/x2) 구현 항목 완료 처리.
  • 검증
    • dotnet build Assembly-CSharp.csproj -nologo 통과(오류 0).
    • 신규 오류 없음, 기존 경고만 유지.

26) KPI 조기호출 사용률 집계 타이밍 버그 수정

  • 목적
    • 조기호출 버튼을 눌러도 earlyCallUsageRate가 0으로 남는 케이스 수정.
  • 변경 파일
    • Assets/Scripts/Kingdom/App/GameScene.cs
    • 문서/진행/작업상세로그_2026_02_15.md
  • 작업 내용
    • OnNextWaveRequested()에서 성공 카운트 증가 타이밍을 조정.
    • 상태 전이가 TryEarlyCallNextWave() 내부에서 즉시 발생해 KPI finalize가 먼저 실행되는 순서 문제를 보정.
    • 처리 방식: 성공 카운트를 먼저 증가시키고, 실패 시 즉시 롤백.
  • 검증
    • dotnet build Assembly-CSharp.csproj -nologo 통과(오류 0).

27) 임시 GameView HUD 가독성 개선(백드롭/텍스트 대비)

  • 목적
    • 임시 UI 단계에서 플레이 중 정보 가독성을 높이고 버튼/텍스트가 배경에 묻히는 문제를 완화.
  • 변경 파일
    • Assets/Scripts/Kingdom/UI/GameView.cs
    • 문서/진행/작업상세로그_2026_02_15.md
  • 작업 내용
    • HUD 배경 백드롭 3종 추가:
      • HUDBackdropTopLeft
      • HUDBackdropBottomLeft
      • HUDBackdropRight
    • Awake()에서 백드롭 생성/보정 수행:
      • EnsureHudBackdrops()
    • NormalizeLayout() 이후 백드롭 레이아웃 동기화:
      • LayoutHudBackdrops()
    • 버튼 기본 텍스트 색상을 흰색으로 통일해 대비 강화.
    • 백드롭은 raycastTarget=false로 설정해 입력 방해를 방지.
  • 검증
    • dotnet build Assembly-CSharp.csproj -nologo 통과(오류 0).

28) HeroPortrait를 별도 위젯 프리팹 구조로 분리

  • 목적
    • GameView에서 히어로 포트레이트 UI 책임을 분리해 아트 교체/확장 비용을 낮춤.
  • 변경 파일
    • Assets/Scripts/Kingdom/UI/HeroPortraitWidget.cs
    • Assets/Scripts/Kingdom/Editor/HeroPortraitWidgetPrefabBuilder.cs
    • Assets/Scripts/Kingdom/UI/GameView.cs
    • 문서/진행/task.md
    • 문서/진행/게임씬_구현명세서.md
    • 문서/진행/작업상세로그_2026_02_15.md
  • 작업 내용
    • 신규 위젯 컴포넌트 추가:
      • HeroPortraitWidget (Backdrop/Portrait/Frame) 기본 구조와 fallback 생성 API 제공
      • SetPortrait(...)로 포트레이트 갱신 위임
    • 프리팹 빌더 추가:
      • 메뉴: Tools/Kingdom/Build HeroPortraitWidget Prefab
      • 출력 경로: Assets/Resources/UI/Widgets/HeroPortraitWidget.prefab
    • GameView 연동:
      • HeroPortraitWidget 우선 로드(Resources/UI/Widgets/HeroPortraitWidget)
      • 미존재 시 런타임 fallback 위젯 생성
      • 기존 SetHeroPortrait(...) 호출은 위젯 API로 위임
      • 레거시 imgHeroPortrait 참조와 호환 유지
  • 검증
    • 코드 상 연결/호출 경로 점검 완료.
    • 참고: 현재 Assembly-CSharp.csproj가 Unity 재생성 전 상태라 신규 파일 포함이 지연될 수 있음(에디터 리프레시 후 반영).

29) ComfyUI 영웅 스프라이트 가이드 정리 + 자동 로드 경로 연동

  • 목적
    • 아트 제작 대기 상태에서도, 이미지 파일만 투입하면 즉시 반영되는 파이프라인 구축.
  • 변경 파일
    • 문서/진행/Hero_Sprite_Prompt_Guide.md
    • Assets/Scripts/Kingdom/App/GameScene.cs
    • Assets/Scripts/Kingdom/Game/SpawnManager.cs
    • 문서/진행/task.md
    • 문서/진행/게임씬_구현명세서.md
    • 문서/진행/작업상세로그_2026_02_15.md
  • 작업 내용
    • ComfyUI/나노바나나 복붙용 프롬프트 가이드를 UTF-8 기준으로 재작성:
      • Portrait / InGame 산출물 규격
      • Positive/Negative prompt
      • 파일명/경로 규칙
      • Unity 임포트 체크리스트
    • GameScene에서 Hero Portrait 자동 로드 추가:
      • 경로: Resources/UI/Sprites/Heroes/Portraits/{HeroId}
      • GameView.SetHeroPortrait(...)로 즉시 반영
    • HeroController(SpawnManager 내)에서 인게임 스프라이트 자동 로드 추가:
      • 경로: Resources/UI/Sprites/Heroes/InGame/{HeroId}
      • 미존재 시 기존 fallback 스프라이트 유지
  • 검증
    • dotnet build Assembly-CSharp.csproj -nologo 통과(오류 0).
    • 신규 경로 미존재 상태에서도 fallback 동작으로 플레이 가능.

30) Hero 인게임 시퀀스 프레임 애니메이션 로드/재생 추가

  • 목적
    • ComfyUI에서 액션별 프레임을 추출해 넣으면 Hero가 자동으로 애니메이션되도록 확장.
  • 변경 파일
    • Assets/Scripts/Kingdom/Game/SpawnManager.cs (HeroController 내부)
    • 문서/진행/Hero_Animation_ComfyUI_프롬프트.md
    • 문서/진행/task.md
    • 문서/진행/게임씬_구현명세서.md
    • 문서/진행/작업상세로그_2026_02_15.md
  • 작업 내용
    • HeroController에 시퀀스 프레임 로드 경로 추가:
      • UI/Sprites/Heroes/InGame/{HeroId}/idle_00..
      • UI/Sprites/Heroes/InGame/{HeroId}/walk_00..
      • UI/Sprites/Heroes/InGame/{HeroId}/attack_00..
      • UI/Sprites/Heroes/InGame/{HeroId}/die_00..
    • 프레임이 존재하면 상태 기반 재생(Idle/Move/Attack) 수행.
    • 프레임이 없으면 기존 단일 스프라이트(.../InGame/{HeroId}) 또는 fallback 유지.
    • ComfyUI 복붙용 액션 프롬프트 문서 추가:
      • 문서/진행/Hero_Animation_ComfyUI_프롬프트.md
  • 검증
    • dotnet build Assembly-CSharp.csproj -nologo 통과(오류 0).

31) ComfyUI로 DefaultHero 실제 이미지/프레임 생성

  • 목적
    • 준비된 경로 규칙에 맞춰 Hero 리소스를 실제 생성해 즉시 플레이 가능한 상태로 전환.
  • 변경 파일
    • Assets/Scripts/Kingdom/Editor/hero_comfy_bridge.py
    • Assets/Resources/UI/Sprites/Heroes/Portraits/DefaultHero.png
    • Assets/Resources/UI/Sprites/Heroes/InGame/DefaultHero.png
    • Assets/Resources/UI/Sprites/Heroes/InGame/DefaultHero/*.png (idle/walk/attack/die, 각 4프레임)
    • 문서/진행/task.md
    • 문서/진행/게임씬_구현명세서.md
    • 문서/진행/작업상세로그_2026_02_15.md
  • 작업 내용
    • ComfyUI API(127.0.0.1:8188) 연결 확인 후 생성 스크립트 실행.
    • 생성 결과:
      • Portrait: DefaultHero.png 1장
      • InGame 단일: DefaultHero.png 1장
      • InGame 시퀀스: idle/walk/attack/die 각 4장
    • 향후 동일 방식으로 HeroId만 바꿔 반복 생성 가능.
  • 검증
    • 파일 생성 확인:
      • Portraits/DefaultHero.png
      • InGame/DefaultHero.png
      • InGame/DefaultHero/{idle,walk,attack,die}_00~03.png
    • 참고: Unity MCP refresh 호출은 연결 이슈로 실패할 수 있어, 에디터 Refresh 1회 권장.

갱신 규칙

  • 작업이 시작/완료될 때마다 본 파일에 항목을 추가한다.
  • 각 항목은 최소 목적/변경 파일/작업 내용/검증을 포함한다.
  • 설계 변경이 있으면 문서/진행/task.md, 문서/진행/게임씬_구현명세서.md와 동기화한다.
반응형