EerieVillage/Assets/Scripts/MyUI/SkillSelectionUI.cs

124 lines
4.9 KiB
C#
Raw Normal View History

using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using TMPro;
feat(BT12-Dev Phase 2-D): BT12-MVP-A 통합 정정 (placeholder → 정식 ActiveSkillData) + Phase 2-B .meta 보충 C49 Phase 2-D — Sonnet 위임 (코드 Write·검증만·git 본 PM 처리 정합·feedback_pm_sonnet_subagent_unauthorized_push 정합). 수정 6 파일: - LevelUpManager.cs (Phase 2-D 정정·_pool 제거·SkillRuntimeFactory.RandomDraw3·HandleCardConfirmed(ActiveSkillData)·PlayerSkillInventory.AddSkillByCardId) - SkillSelectionUI.cs (Show(List<ActiveSkillData>)·_selected·BindSlot·OnCardSelected ActiveSkillData 전환) - SkillCardSlot.cs (Bind(ActiveSkillData)·DisplayName/Description/Icon PascalCase·rarity 배너 갈색 고정) - PlayerController.cs (PlayerSkillInventory 자동 부착·line 100) - Projectile.cs (Layer Enemy 미등재 fallback — EnemyController 컴포넌트 검사·proxy) - SkillRuntimeFactory.cs (RandomDraw3 메서드·Active 카테고리 무작위 3장) 신규 9 .meta (Phase 2-B Sonnet 자율 push 영역 영역 영역 영역 X·Unity Editor Refresh 후 자동 생성·본 commit 보충): - Skills.meta + Effectors.meta + 7 Effectors/*.cs.meta Layer Enemy 영역 = proxy 개선 신호 (C2-2): - 현 시점 = Projectile.OnTriggerEnter2D 영역 EnemyController 컴포넌트 fallback (proxy) - 근본 해결안 = Layer "Enemy" 정식 등재 (별도 PD 안건·후속) 기능: - 적 처치 → EXP +1 → 즉시 레벨업 → 카드 3장 노출 → 선택 → PlayerSkillInventory 등록 → ActiveSkillRuntime Tick → 1.5s 영역 자동 발사 + 부가 효과 (DoT·Stun·Slow·DebuffStack) 기존 영역 변경 X (BT5-Dev·BT7-Dev·Phase 2-A·2-B·2-C·BT12-MVP-A asset 5장·Scene·SkillCardPlaceholder·SkillCardPlaceholderPool·deprecate 차후) Compile error 0건 (read_console·도메인 리로드 정합) C49 — Phase 2-D Sonnet 위임 + Phase 3 본 PM 직접 (단순 반복 카탈로그 v1) C50 — ~95K (PD 사전 승인 70~95K 영역 상한 정합) C19-2 — Sonnet 자율 git X·본 PM 직접 commit·push (feedback 정합) pm-auditor 사전 감사 = Pass + Minor 1 (Layer fallback proxy 명시·본 commit + 대화로그 영역 정정 적용) 후속: - Phase 2-A·2-B·2-C·2-D 영역 PD Play 검증 (자동 발동·레벨업·카드 선택·등록·Tick) - Layer "Enemy" 정식 등재 (별도 PD 안건·근본 해결안) - Phase 2-E EditMode 테스트 - 다른 카테고리 (B·C·D·E·F) 영역 - BT12-MVP-A asset 5장 deprecate (차기) - Screenshots·_Recovery .gitignore (별도)
2026-05-09 11:57:28 +00:00
using EerieVillage.Skills;
namespace EerieVillage.MyUI
{
/// <summary>
/// BT12-MVP-A 영역 스킬 선택 UI — PD 첨부 예시 ("기술 선택" 화면) 정합.
/// LevelUpManager 영역 호출 — Show(cards, level, onConfirm).
///
feat(BT12-Dev Phase 2-D): BT12-MVP-A 통합 정정 (placeholder → 정식 ActiveSkillData) + Phase 2-B .meta 보충 C49 Phase 2-D — Sonnet 위임 (코드 Write·검증만·git 본 PM 처리 정합·feedback_pm_sonnet_subagent_unauthorized_push 정합). 수정 6 파일: - LevelUpManager.cs (Phase 2-D 정정·_pool 제거·SkillRuntimeFactory.RandomDraw3·HandleCardConfirmed(ActiveSkillData)·PlayerSkillInventory.AddSkillByCardId) - SkillSelectionUI.cs (Show(List<ActiveSkillData>)·_selected·BindSlot·OnCardSelected ActiveSkillData 전환) - SkillCardSlot.cs (Bind(ActiveSkillData)·DisplayName/Description/Icon PascalCase·rarity 배너 갈색 고정) - PlayerController.cs (PlayerSkillInventory 자동 부착·line 100) - Projectile.cs (Layer Enemy 미등재 fallback — EnemyController 컴포넌트 검사·proxy) - SkillRuntimeFactory.cs (RandomDraw3 메서드·Active 카테고리 무작위 3장) 신규 9 .meta (Phase 2-B Sonnet 자율 push 영역 영역 영역 영역 X·Unity Editor Refresh 후 자동 생성·본 commit 보충): - Skills.meta + Effectors.meta + 7 Effectors/*.cs.meta Layer Enemy 영역 = proxy 개선 신호 (C2-2): - 현 시점 = Projectile.OnTriggerEnter2D 영역 EnemyController 컴포넌트 fallback (proxy) - 근본 해결안 = Layer "Enemy" 정식 등재 (별도 PD 안건·후속) 기능: - 적 처치 → EXP +1 → 즉시 레벨업 → 카드 3장 노출 → 선택 → PlayerSkillInventory 등록 → ActiveSkillRuntime Tick → 1.5s 영역 자동 발사 + 부가 효과 (DoT·Stun·Slow·DebuffStack) 기존 영역 변경 X (BT5-Dev·BT7-Dev·Phase 2-A·2-B·2-C·BT12-MVP-A asset 5장·Scene·SkillCardPlaceholder·SkillCardPlaceholderPool·deprecate 차후) Compile error 0건 (read_console·도메인 리로드 정합) C49 — Phase 2-D Sonnet 위임 + Phase 3 본 PM 직접 (단순 반복 카탈로그 v1) C50 — ~95K (PD 사전 승인 70~95K 영역 상한 정합) C19-2 — Sonnet 자율 git X·본 PM 직접 commit·push (feedback 정합) pm-auditor 사전 감사 = Pass + Minor 1 (Layer fallback proxy 명시·본 commit + 대화로그 영역 정정 적용) 후속: - Phase 2-A·2-B·2-C·2-D 영역 PD Play 검증 (자동 발동·레벨업·카드 선택·등록·Tick) - Layer "Enemy" 정식 등재 (별도 PD 안건·근본 해결안) - Phase 2-E EditMode 테스트 - 다른 카테고리 (B·C·D·E·F) 영역 - BT12-MVP-A asset 5장 deprecate (차기) - Screenshots·_Recovery .gitignore (별도)
2026-05-09 11:57:28 +00:00
/// Phase 2-D 정정 (2026-05-09) — SkillCardPlaceholder → ActiveSkillData 전환.
///
/// 화면 구조:
/// [Header] "기술 선택" 타이틀 + X 닫기 버튼
/// [Body] 카드 3장 가로 배치 (SkillCardSlot ×3)
/// [Footer] "남은 포인트: N" + "확인" 버튼
///
/// 인터랙션:
/// - 카드 클릭 → 선택 (highlight)
/// - 확인 버튼 → onConfirm 콜백 + UI 닫기
/// - X 버튼 → 첫 카드 자동 선택 + 콜백 (취소 영역 placeholder)
/// </summary>
public class SkillSelectionUI : MonoBehaviour
{
[Header("Root")]
[SerializeField] GameObject _rootPanel; // 일시정지 시 활성·복귀 시 비활성
[Header("Header")]
[SerializeField] TMP_Text _titleText; // "기술 선택"
[SerializeField] Button _closeButton; // X 버튼 (우측 상단)
[Header("Card Slots (3개 가로 배치)")]
[SerializeField] SkillCardSlot _slot1;
[SerializeField] SkillCardSlot _slot2;
[SerializeField] SkillCardSlot _slot3;
[Header("Footer")]
[SerializeField] TMP_Text _pointText; // "남은 포인트: N"
[SerializeField] Button _confirmButton; // "확인"
feat(BT12-Dev Phase 2-D): BT12-MVP-A 통합 정정 (placeholder → 정식 ActiveSkillData) + Phase 2-B .meta 보충 C49 Phase 2-D — Sonnet 위임 (코드 Write·검증만·git 본 PM 처리 정합·feedback_pm_sonnet_subagent_unauthorized_push 정합). 수정 6 파일: - LevelUpManager.cs (Phase 2-D 정정·_pool 제거·SkillRuntimeFactory.RandomDraw3·HandleCardConfirmed(ActiveSkillData)·PlayerSkillInventory.AddSkillByCardId) - SkillSelectionUI.cs (Show(List<ActiveSkillData>)·_selected·BindSlot·OnCardSelected ActiveSkillData 전환) - SkillCardSlot.cs (Bind(ActiveSkillData)·DisplayName/Description/Icon PascalCase·rarity 배너 갈색 고정) - PlayerController.cs (PlayerSkillInventory 자동 부착·line 100) - Projectile.cs (Layer Enemy 미등재 fallback — EnemyController 컴포넌트 검사·proxy) - SkillRuntimeFactory.cs (RandomDraw3 메서드·Active 카테고리 무작위 3장) 신규 9 .meta (Phase 2-B Sonnet 자율 push 영역 영역 영역 영역 X·Unity Editor Refresh 후 자동 생성·본 commit 보충): - Skills.meta + Effectors.meta + 7 Effectors/*.cs.meta Layer Enemy 영역 = proxy 개선 신호 (C2-2): - 현 시점 = Projectile.OnTriggerEnter2D 영역 EnemyController 컴포넌트 fallback (proxy) - 근본 해결안 = Layer "Enemy" 정식 등재 (별도 PD 안건·후속) 기능: - 적 처치 → EXP +1 → 즉시 레벨업 → 카드 3장 노출 → 선택 → PlayerSkillInventory 등록 → ActiveSkillRuntime Tick → 1.5s 영역 자동 발사 + 부가 효과 (DoT·Stun·Slow·DebuffStack) 기존 영역 변경 X (BT5-Dev·BT7-Dev·Phase 2-A·2-B·2-C·BT12-MVP-A asset 5장·Scene·SkillCardPlaceholder·SkillCardPlaceholderPool·deprecate 차후) Compile error 0건 (read_console·도메인 리로드 정합) C49 — Phase 2-D Sonnet 위임 + Phase 3 본 PM 직접 (단순 반복 카탈로그 v1) C50 — ~95K (PD 사전 승인 70~95K 영역 상한 정합) C19-2 — Sonnet 자율 git X·본 PM 직접 commit·push (feedback 정합) pm-auditor 사전 감사 = Pass + Minor 1 (Layer fallback proxy 명시·본 commit + 대화로그 영역 정정 적용) 후속: - Phase 2-A·2-B·2-C·2-D 영역 PD Play 검증 (자동 발동·레벨업·카드 선택·등록·Tick) - Layer "Enemy" 정식 등재 (별도 PD 안건·근본 해결안) - Phase 2-E EditMode 테스트 - 다른 카테고리 (B·C·D·E·F) 영역 - BT12-MVP-A asset 5장 deprecate (차기) - Screenshots·_Recovery .gitignore (별도)
2026-05-09 11:57:28 +00:00
ActiveSkillData _selected;
System.Action<ActiveSkillData> _onConfirm;
void Awake()
{
docs(BT12-MVP-A Phase 2-B B+C·2-1·2-2 통합 완료): SkillSelectionCanvas Prefab + Scene 통합 + 한글 폰트 + 디자인 정정 산출물 (D안 — 기능 우선·그래픽 디테일 차후): Prefab (신규): - Assets/Prefabs/UI/SkillSelectionCanvas.prefab — 28 GameObject·Canvas Screen Space-Overlay·Sort Order 200 - SkillSelectionPanel (anchor stretch·반투명 검정 RGBA(0,0,0,0.78)) - Header (top stretch 120·베이지 9-slice·"기술 선택" 한글) - CardArea (center 1000x700·HorizontalLayoutGroup·SkillCardSlot ×3) - Footer (bottom stretch 200·"남은 포인트"·"확인" 노랑 버튼) - SkillCardSlot 자식 (TopBanner 갈색·NameText 흰색·IconArea·LevelText/DescriptionText 갈색·ClickArea·HighlightFrame) 한글 폰트: - Assets/Fonts/NotoSansKR-Regular.ttf (Apache 2.0·Google Noto Sans CJK KR) - Assets/Fonts/NotoSansKR-Regular SDF.asset (Multi Atlas·Dynamic mode·atlas 2x 2048) - Assets/TextMesh Pro/Resources/TMP Settings.asset (fallback NotoSansKR 등록) Scene 영역: - [LevelUpManager] GameObject + LevelUpManager·SkillCardPlaceholderPool 영역 - Pool _allCards 5 asset 매핑 (A01·A05·P01·P12·AW01) - LevelUpManager _pool/_ui 영역 매핑 - SkillSelectionCanvas Prefab 인스턴스 영역 SkillSelectionUI 8 field (_rootPanel·_titleText·_slot1·2·3·_pointText·_confirmButton) 영역 매핑 스크립트 (Debug.Log 추가·차후 가드 처리 의무): - ExperienceSystem.cs (DEFAULT_XP_REWARD 5→1 임시·OnEnemyKilled 진단 Log) - PlayerProgression.cs (GainXP·LEVEL UP 진단 Log) - LevelUpManager.cs (HandleLevelUp·_ui.Show 호출 진단 Log) - LevelXPTableLoader.cs (GetXPToNextLevel return 1 임시·기능 테스트 영역) - SkillSelectionUI.cs (Awake·Show 진단 Log + gameObject.SetActive 영역) 회귀 영역 정리: - Phase 2-B B+C MCP 작업 시 SkillSelectionPanel 자식 영역 중복 (Header/CardArea/Footer × 2 + 빈 Panel2) 영역 발견·정리 - Canvas WorldSpace → ScreenSpaceOverlay 정정 (Phase 2-2 manage_components silent fail 영역) - Image color RGBA(1,1,1,1) → RGBA(0,0,0,0.78) 정정 (execute_code 영역 직접 변경) - Player·SpawnPoint 영역 BT5-Dev 영역 정상 (본 PM 임시 변경 영역 stash 보존) 본 PM 자성 (영구 등재 의무): 1. manage_components set_property silent fail (Color·RectTransform·Canvas) — execute_code 영역 직접 변경 + 호출 직후 검증 의무 2. manage_gameobject batch 결과 검증 X — ReadMcpResource 호출 후 자식 영역 정합 검증 의무 3. 본 BT 영역 외 영역 임의 변경 금지 (Player·SpawnPoint·Camera·Tilemap·BT5-Dev) 4. TMP_FontAsset 검증 = characterTable.Count만 단정 X·isMultiAtlasTexturesEnabled·atlasPopulationMode·TryAddCharacters 동작 확인 의무 5. "영역" 어휘 무차별 부착 자제 (feedback_pm_filler_word_overuse) 6. PD 명시 외 임의 추가 (한자) 금지 PD 결정 (D안): - 기능 검증 우선 (한글 표시·카드 UI·레벨업 흐름 정합) - 그래픽 디테일 (PD 첨부 SD UI 정합) = 차기 BT 영역 후속 (Asset Store sprite 영역 또는 디자이너 영역) C49 표준 — Phase 1 dev-team-lead 설계 + Phase 2 본 PM MCP 집행 + Phase 3 본 PM 직접 검증 (단순 반복 카탈로그 v1)
2026-05-09 09:00:27 +00:00
Debug.Log($"[SkillSelectionUI] Awake — _rootPanel={(_rootPanel == null ? "NULL" : _rootPanel.name)}");
// BT12-MVP-A 정정 (2026-05-08) — Canvas 자체 비활성 (SkillSelectionCanvas Sort Order 200 영역 화면 가림 차단)
if (_rootPanel != null) _rootPanel.SetActive(false);
docs(BT12-MVP-A Phase 2-B B+C·2-1·2-2 통합 완료): SkillSelectionCanvas Prefab + Scene 통합 + 한글 폰트 + 디자인 정정 산출물 (D안 — 기능 우선·그래픽 디테일 차후): Prefab (신규): - Assets/Prefabs/UI/SkillSelectionCanvas.prefab — 28 GameObject·Canvas Screen Space-Overlay·Sort Order 200 - SkillSelectionPanel (anchor stretch·반투명 검정 RGBA(0,0,0,0.78)) - Header (top stretch 120·베이지 9-slice·"기술 선택" 한글) - CardArea (center 1000x700·HorizontalLayoutGroup·SkillCardSlot ×3) - Footer (bottom stretch 200·"남은 포인트"·"확인" 노랑 버튼) - SkillCardSlot 자식 (TopBanner 갈색·NameText 흰색·IconArea·LevelText/DescriptionText 갈색·ClickArea·HighlightFrame) 한글 폰트: - Assets/Fonts/NotoSansKR-Regular.ttf (Apache 2.0·Google Noto Sans CJK KR) - Assets/Fonts/NotoSansKR-Regular SDF.asset (Multi Atlas·Dynamic mode·atlas 2x 2048) - Assets/TextMesh Pro/Resources/TMP Settings.asset (fallback NotoSansKR 등록) Scene 영역: - [LevelUpManager] GameObject + LevelUpManager·SkillCardPlaceholderPool 영역 - Pool _allCards 5 asset 매핑 (A01·A05·P01·P12·AW01) - LevelUpManager _pool/_ui 영역 매핑 - SkillSelectionCanvas Prefab 인스턴스 영역 SkillSelectionUI 8 field (_rootPanel·_titleText·_slot1·2·3·_pointText·_confirmButton) 영역 매핑 스크립트 (Debug.Log 추가·차후 가드 처리 의무): - ExperienceSystem.cs (DEFAULT_XP_REWARD 5→1 임시·OnEnemyKilled 진단 Log) - PlayerProgression.cs (GainXP·LEVEL UP 진단 Log) - LevelUpManager.cs (HandleLevelUp·_ui.Show 호출 진단 Log) - LevelXPTableLoader.cs (GetXPToNextLevel return 1 임시·기능 테스트 영역) - SkillSelectionUI.cs (Awake·Show 진단 Log + gameObject.SetActive 영역) 회귀 영역 정리: - Phase 2-B B+C MCP 작업 시 SkillSelectionPanel 자식 영역 중복 (Header/CardArea/Footer × 2 + 빈 Panel2) 영역 발견·정리 - Canvas WorldSpace → ScreenSpaceOverlay 정정 (Phase 2-2 manage_components silent fail 영역) - Image color RGBA(1,1,1,1) → RGBA(0,0,0,0.78) 정정 (execute_code 영역 직접 변경) - Player·SpawnPoint 영역 BT5-Dev 영역 정상 (본 PM 임시 변경 영역 stash 보존) 본 PM 자성 (영구 등재 의무): 1. manage_components set_property silent fail (Color·RectTransform·Canvas) — execute_code 영역 직접 변경 + 호출 직후 검증 의무 2. manage_gameobject batch 결과 검증 X — ReadMcpResource 호출 후 자식 영역 정합 검증 의무 3. 본 BT 영역 외 영역 임의 변경 금지 (Player·SpawnPoint·Camera·Tilemap·BT5-Dev) 4. TMP_FontAsset 검증 = characterTable.Count만 단정 X·isMultiAtlasTexturesEnabled·atlasPopulationMode·TryAddCharacters 동작 확인 의무 5. "영역" 어휘 무차별 부착 자제 (feedback_pm_filler_word_overuse) 6. PD 명시 외 임의 추가 (한자) 금지 PD 결정 (D안): - 기능 검증 우선 (한글 표시·카드 UI·레벨업 흐름 정합) - 그래픽 디테일 (PD 첨부 SD UI 정합) = 차기 BT 영역 후속 (Asset Store sprite 영역 또는 디자이너 영역) C49 표준 — Phase 1 dev-team-lead 설계 + Phase 2 본 PM MCP 집행 + Phase 3 본 PM 직접 검증 (단순 반복 카탈로그 v1)
2026-05-09 09:00:27 +00:00
gameObject.SetActive(false); // Canvas root 자체 비활성
}
/// <summary>레벨업 시점 호출 — 카드 3장 표시 + 사용자 선택 대기.</summary>
feat(BT12-Dev Phase 2-D): BT12-MVP-A 통합 정정 (placeholder → 정식 ActiveSkillData) + Phase 2-B .meta 보충 C49 Phase 2-D — Sonnet 위임 (코드 Write·검증만·git 본 PM 처리 정합·feedback_pm_sonnet_subagent_unauthorized_push 정합). 수정 6 파일: - LevelUpManager.cs (Phase 2-D 정정·_pool 제거·SkillRuntimeFactory.RandomDraw3·HandleCardConfirmed(ActiveSkillData)·PlayerSkillInventory.AddSkillByCardId) - SkillSelectionUI.cs (Show(List<ActiveSkillData>)·_selected·BindSlot·OnCardSelected ActiveSkillData 전환) - SkillCardSlot.cs (Bind(ActiveSkillData)·DisplayName/Description/Icon PascalCase·rarity 배너 갈색 고정) - PlayerController.cs (PlayerSkillInventory 자동 부착·line 100) - Projectile.cs (Layer Enemy 미등재 fallback — EnemyController 컴포넌트 검사·proxy) - SkillRuntimeFactory.cs (RandomDraw3 메서드·Active 카테고리 무작위 3장) 신규 9 .meta (Phase 2-B Sonnet 자율 push 영역 영역 영역 영역 X·Unity Editor Refresh 후 자동 생성·본 commit 보충): - Skills.meta + Effectors.meta + 7 Effectors/*.cs.meta Layer Enemy 영역 = proxy 개선 신호 (C2-2): - 현 시점 = Projectile.OnTriggerEnter2D 영역 EnemyController 컴포넌트 fallback (proxy) - 근본 해결안 = Layer "Enemy" 정식 등재 (별도 PD 안건·후속) 기능: - 적 처치 → EXP +1 → 즉시 레벨업 → 카드 3장 노출 → 선택 → PlayerSkillInventory 등록 → ActiveSkillRuntime Tick → 1.5s 영역 자동 발사 + 부가 효과 (DoT·Stun·Slow·DebuffStack) 기존 영역 변경 X (BT5-Dev·BT7-Dev·Phase 2-A·2-B·2-C·BT12-MVP-A asset 5장·Scene·SkillCardPlaceholder·SkillCardPlaceholderPool·deprecate 차후) Compile error 0건 (read_console·도메인 리로드 정합) C49 — Phase 2-D Sonnet 위임 + Phase 3 본 PM 직접 (단순 반복 카탈로그 v1) C50 — ~95K (PD 사전 승인 70~95K 영역 상한 정합) C19-2 — Sonnet 자율 git X·본 PM 직접 commit·push (feedback 정합) pm-auditor 사전 감사 = Pass + Minor 1 (Layer fallback proxy 명시·본 commit + 대화로그 영역 정정 적용) 후속: - Phase 2-A·2-B·2-C·2-D 영역 PD Play 검증 (자동 발동·레벨업·카드 선택·등록·Tick) - Layer "Enemy" 정식 등재 (별도 PD 안건·근본 해결안) - Phase 2-E EditMode 테스트 - 다른 카테고리 (B·C·D·E·F) 영역 - BT12-MVP-A asset 5장 deprecate (차기) - Screenshots·_Recovery .gitignore (별도)
2026-05-09 11:57:28 +00:00
public void Show(List<ActiveSkillData> cards, int level, System.Action<ActiveSkillData> onConfirm)
{
docs(BT12-MVP-A Phase 2-B B+C·2-1·2-2 통합 완료): SkillSelectionCanvas Prefab + Scene 통합 + 한글 폰트 + 디자인 정정 산출물 (D안 — 기능 우선·그래픽 디테일 차후): Prefab (신규): - Assets/Prefabs/UI/SkillSelectionCanvas.prefab — 28 GameObject·Canvas Screen Space-Overlay·Sort Order 200 - SkillSelectionPanel (anchor stretch·반투명 검정 RGBA(0,0,0,0.78)) - Header (top stretch 120·베이지 9-slice·"기술 선택" 한글) - CardArea (center 1000x700·HorizontalLayoutGroup·SkillCardSlot ×3) - Footer (bottom stretch 200·"남은 포인트"·"확인" 노랑 버튼) - SkillCardSlot 자식 (TopBanner 갈색·NameText 흰색·IconArea·LevelText/DescriptionText 갈색·ClickArea·HighlightFrame) 한글 폰트: - Assets/Fonts/NotoSansKR-Regular.ttf (Apache 2.0·Google Noto Sans CJK KR) - Assets/Fonts/NotoSansKR-Regular SDF.asset (Multi Atlas·Dynamic mode·atlas 2x 2048) - Assets/TextMesh Pro/Resources/TMP Settings.asset (fallback NotoSansKR 등록) Scene 영역: - [LevelUpManager] GameObject + LevelUpManager·SkillCardPlaceholderPool 영역 - Pool _allCards 5 asset 매핑 (A01·A05·P01·P12·AW01) - LevelUpManager _pool/_ui 영역 매핑 - SkillSelectionCanvas Prefab 인스턴스 영역 SkillSelectionUI 8 field (_rootPanel·_titleText·_slot1·2·3·_pointText·_confirmButton) 영역 매핑 스크립트 (Debug.Log 추가·차후 가드 처리 의무): - ExperienceSystem.cs (DEFAULT_XP_REWARD 5→1 임시·OnEnemyKilled 진단 Log) - PlayerProgression.cs (GainXP·LEVEL UP 진단 Log) - LevelUpManager.cs (HandleLevelUp·_ui.Show 호출 진단 Log) - LevelXPTableLoader.cs (GetXPToNextLevel return 1 임시·기능 테스트 영역) - SkillSelectionUI.cs (Awake·Show 진단 Log + gameObject.SetActive 영역) 회귀 영역 정리: - Phase 2-B B+C MCP 작업 시 SkillSelectionPanel 자식 영역 중복 (Header/CardArea/Footer × 2 + 빈 Panel2) 영역 발견·정리 - Canvas WorldSpace → ScreenSpaceOverlay 정정 (Phase 2-2 manage_components silent fail 영역) - Image color RGBA(1,1,1,1) → RGBA(0,0,0,0.78) 정정 (execute_code 영역 직접 변경) - Player·SpawnPoint 영역 BT5-Dev 영역 정상 (본 PM 임시 변경 영역 stash 보존) 본 PM 자성 (영구 등재 의무): 1. manage_components set_property silent fail (Color·RectTransform·Canvas) — execute_code 영역 직접 변경 + 호출 직후 검증 의무 2. manage_gameobject batch 결과 검증 X — ReadMcpResource 호출 후 자식 영역 정합 검증 의무 3. 본 BT 영역 외 영역 임의 변경 금지 (Player·SpawnPoint·Camera·Tilemap·BT5-Dev) 4. TMP_FontAsset 검증 = characterTable.Count만 단정 X·isMultiAtlasTexturesEnabled·atlasPopulationMode·TryAddCharacters 동작 확인 의무 5. "영역" 어휘 무차별 부착 자제 (feedback_pm_filler_word_overuse) 6. PD 명시 외 임의 추가 (한자) 금지 PD 결정 (D안): - 기능 검증 우선 (한글 표시·카드 UI·레벨업 흐름 정합) - 그래픽 디테일 (PD 첨부 SD UI 정합) = 차기 BT 영역 후속 (Asset Store sprite 영역 또는 디자이너 영역) C49 표준 — Phase 1 dev-team-lead 설계 + Phase 2 본 PM MCP 집행 + Phase 3 본 PM 직접 검증 (단순 반복 카탈로그 v1)
2026-05-09 09:00:27 +00:00
Debug.Log($"[SkillSelectionUI] Show 호출 cards={cards.Count} level={level}");
_onConfirm = onConfirm;
_selected = null;
docs(BT12-MVP-A Phase 2-B B+C·2-1·2-2 통합 완료): SkillSelectionCanvas Prefab + Scene 통합 + 한글 폰트 + 디자인 정정 산출물 (D안 — 기능 우선·그래픽 디테일 차후): Prefab (신규): - Assets/Prefabs/UI/SkillSelectionCanvas.prefab — 28 GameObject·Canvas Screen Space-Overlay·Sort Order 200 - SkillSelectionPanel (anchor stretch·반투명 검정 RGBA(0,0,0,0.78)) - Header (top stretch 120·베이지 9-slice·"기술 선택" 한글) - CardArea (center 1000x700·HorizontalLayoutGroup·SkillCardSlot ×3) - Footer (bottom stretch 200·"남은 포인트"·"확인" 노랑 버튼) - SkillCardSlot 자식 (TopBanner 갈색·NameText 흰색·IconArea·LevelText/DescriptionText 갈색·ClickArea·HighlightFrame) 한글 폰트: - Assets/Fonts/NotoSansKR-Regular.ttf (Apache 2.0·Google Noto Sans CJK KR) - Assets/Fonts/NotoSansKR-Regular SDF.asset (Multi Atlas·Dynamic mode·atlas 2x 2048) - Assets/TextMesh Pro/Resources/TMP Settings.asset (fallback NotoSansKR 등록) Scene 영역: - [LevelUpManager] GameObject + LevelUpManager·SkillCardPlaceholderPool 영역 - Pool _allCards 5 asset 매핑 (A01·A05·P01·P12·AW01) - LevelUpManager _pool/_ui 영역 매핑 - SkillSelectionCanvas Prefab 인스턴스 영역 SkillSelectionUI 8 field (_rootPanel·_titleText·_slot1·2·3·_pointText·_confirmButton) 영역 매핑 스크립트 (Debug.Log 추가·차후 가드 처리 의무): - ExperienceSystem.cs (DEFAULT_XP_REWARD 5→1 임시·OnEnemyKilled 진단 Log) - PlayerProgression.cs (GainXP·LEVEL UP 진단 Log) - LevelUpManager.cs (HandleLevelUp·_ui.Show 호출 진단 Log) - LevelXPTableLoader.cs (GetXPToNextLevel return 1 임시·기능 테스트 영역) - SkillSelectionUI.cs (Awake·Show 진단 Log + gameObject.SetActive 영역) 회귀 영역 정리: - Phase 2-B B+C MCP 작업 시 SkillSelectionPanel 자식 영역 중복 (Header/CardArea/Footer × 2 + 빈 Panel2) 영역 발견·정리 - Canvas WorldSpace → ScreenSpaceOverlay 정정 (Phase 2-2 manage_components silent fail 영역) - Image color RGBA(1,1,1,1) → RGBA(0,0,0,0.78) 정정 (execute_code 영역 직접 변경) - Player·SpawnPoint 영역 BT5-Dev 영역 정상 (본 PM 임시 변경 영역 stash 보존) 본 PM 자성 (영구 등재 의무): 1. manage_components set_property silent fail (Color·RectTransform·Canvas) — execute_code 영역 직접 변경 + 호출 직후 검증 의무 2. manage_gameobject batch 결과 검증 X — ReadMcpResource 호출 후 자식 영역 정합 검증 의무 3. 본 BT 영역 외 영역 임의 변경 금지 (Player·SpawnPoint·Camera·Tilemap·BT5-Dev) 4. TMP_FontAsset 검증 = characterTable.Count만 단정 X·isMultiAtlasTexturesEnabled·atlasPopulationMode·TryAddCharacters 동작 확인 의무 5. "영역" 어휘 무차별 부착 자제 (feedback_pm_filler_word_overuse) 6. PD 명시 외 임의 추가 (한자) 금지 PD 결정 (D안): - 기능 검증 우선 (한글 표시·카드 UI·레벨업 흐름 정합) - 그래픽 디테일 (PD 첨부 SD UI 정합) = 차기 BT 영역 후속 (Asset Store sprite 영역 또는 디자이너 영역) C49 표준 — Phase 1 dev-team-lead 설계 + Phase 2 본 PM MCP 집행 + Phase 3 본 PM 직접 검증 (단순 반복 카탈로그 v1)
2026-05-09 09:00:27 +00:00
gameObject.SetActive(true); // BT12-MVP-A 정정 — Canvas root 활성
if (_rootPanel != null) _rootPanel.SetActive(true);
if (_titleText != null) _titleText.text = "기술 선택";
if (_pointText != null) _pointText.text = "남은 포인트: 1";
if (_confirmButton != null) _confirmButton.interactable = false;
// 카드 3장 영역 바인딩 (부족 영역 = 슬롯 hide)
BindSlot(_slot1, cards.Count > 0 ? cards[0] : null);
BindSlot(_slot2, cards.Count > 1 ? cards[1] : null);
BindSlot(_slot3, cards.Count > 2 ? cards[2] : null);
// 버튼 영역 리스너
if (_confirmButton != null)
{
_confirmButton.onClick.RemoveAllListeners();
_confirmButton.onClick.AddListener(OnConfirmClicked);
}
if (_closeButton != null)
{
_closeButton.onClick.RemoveAllListeners();
_closeButton.onClick.AddListener(OnCloseClicked);
}
}
public void Hide()
{
if (_rootPanel != null) _rootPanel.SetActive(false);
docs(BT12-MVP-A Phase 2-B B+C·2-1·2-2 통합 완료): SkillSelectionCanvas Prefab + Scene 통합 + 한글 폰트 + 디자인 정정 산출물 (D안 — 기능 우선·그래픽 디테일 차후): Prefab (신규): - Assets/Prefabs/UI/SkillSelectionCanvas.prefab — 28 GameObject·Canvas Screen Space-Overlay·Sort Order 200 - SkillSelectionPanel (anchor stretch·반투명 검정 RGBA(0,0,0,0.78)) - Header (top stretch 120·베이지 9-slice·"기술 선택" 한글) - CardArea (center 1000x700·HorizontalLayoutGroup·SkillCardSlot ×3) - Footer (bottom stretch 200·"남은 포인트"·"확인" 노랑 버튼) - SkillCardSlot 자식 (TopBanner 갈색·NameText 흰색·IconArea·LevelText/DescriptionText 갈색·ClickArea·HighlightFrame) 한글 폰트: - Assets/Fonts/NotoSansKR-Regular.ttf (Apache 2.0·Google Noto Sans CJK KR) - Assets/Fonts/NotoSansKR-Regular SDF.asset (Multi Atlas·Dynamic mode·atlas 2x 2048) - Assets/TextMesh Pro/Resources/TMP Settings.asset (fallback NotoSansKR 등록) Scene 영역: - [LevelUpManager] GameObject + LevelUpManager·SkillCardPlaceholderPool 영역 - Pool _allCards 5 asset 매핑 (A01·A05·P01·P12·AW01) - LevelUpManager _pool/_ui 영역 매핑 - SkillSelectionCanvas Prefab 인스턴스 영역 SkillSelectionUI 8 field (_rootPanel·_titleText·_slot1·2·3·_pointText·_confirmButton) 영역 매핑 스크립트 (Debug.Log 추가·차후 가드 처리 의무): - ExperienceSystem.cs (DEFAULT_XP_REWARD 5→1 임시·OnEnemyKilled 진단 Log) - PlayerProgression.cs (GainXP·LEVEL UP 진단 Log) - LevelUpManager.cs (HandleLevelUp·_ui.Show 호출 진단 Log) - LevelXPTableLoader.cs (GetXPToNextLevel return 1 임시·기능 테스트 영역) - SkillSelectionUI.cs (Awake·Show 진단 Log + gameObject.SetActive 영역) 회귀 영역 정리: - Phase 2-B B+C MCP 작업 시 SkillSelectionPanel 자식 영역 중복 (Header/CardArea/Footer × 2 + 빈 Panel2) 영역 발견·정리 - Canvas WorldSpace → ScreenSpaceOverlay 정정 (Phase 2-2 manage_components silent fail 영역) - Image color RGBA(1,1,1,1) → RGBA(0,0,0,0.78) 정정 (execute_code 영역 직접 변경) - Player·SpawnPoint 영역 BT5-Dev 영역 정상 (본 PM 임시 변경 영역 stash 보존) 본 PM 자성 (영구 등재 의무): 1. manage_components set_property silent fail (Color·RectTransform·Canvas) — execute_code 영역 직접 변경 + 호출 직후 검증 의무 2. manage_gameobject batch 결과 검증 X — ReadMcpResource 호출 후 자식 영역 정합 검증 의무 3. 본 BT 영역 외 영역 임의 변경 금지 (Player·SpawnPoint·Camera·Tilemap·BT5-Dev) 4. TMP_FontAsset 검증 = characterTable.Count만 단정 X·isMultiAtlasTexturesEnabled·atlasPopulationMode·TryAddCharacters 동작 확인 의무 5. "영역" 어휘 무차별 부착 자제 (feedback_pm_filler_word_overuse) 6. PD 명시 외 임의 추가 (한자) 금지 PD 결정 (D안): - 기능 검증 우선 (한글 표시·카드 UI·레벨업 흐름 정합) - 그래픽 디테일 (PD 첨부 SD UI 정합) = 차기 BT 영역 후속 (Asset Store sprite 영역 또는 디자이너 영역) C49 표준 — Phase 1 dev-team-lead 설계 + Phase 2 본 PM MCP 집행 + Phase 3 본 PM 직접 검증 (단순 반복 카탈로그 v1)
2026-05-09 09:00:27 +00:00
gameObject.SetActive(false); // BT12-MVP-A 정정 — Canvas root 비활성
}
feat(BT12-Dev Phase 2-D): BT12-MVP-A 통합 정정 (placeholder → 정식 ActiveSkillData) + Phase 2-B .meta 보충 C49 Phase 2-D — Sonnet 위임 (코드 Write·검증만·git 본 PM 처리 정합·feedback_pm_sonnet_subagent_unauthorized_push 정합). 수정 6 파일: - LevelUpManager.cs (Phase 2-D 정정·_pool 제거·SkillRuntimeFactory.RandomDraw3·HandleCardConfirmed(ActiveSkillData)·PlayerSkillInventory.AddSkillByCardId) - SkillSelectionUI.cs (Show(List<ActiveSkillData>)·_selected·BindSlot·OnCardSelected ActiveSkillData 전환) - SkillCardSlot.cs (Bind(ActiveSkillData)·DisplayName/Description/Icon PascalCase·rarity 배너 갈색 고정) - PlayerController.cs (PlayerSkillInventory 자동 부착·line 100) - Projectile.cs (Layer Enemy 미등재 fallback — EnemyController 컴포넌트 검사·proxy) - SkillRuntimeFactory.cs (RandomDraw3 메서드·Active 카테고리 무작위 3장) 신규 9 .meta (Phase 2-B Sonnet 자율 push 영역 영역 영역 영역 X·Unity Editor Refresh 후 자동 생성·본 commit 보충): - Skills.meta + Effectors.meta + 7 Effectors/*.cs.meta Layer Enemy 영역 = proxy 개선 신호 (C2-2): - 현 시점 = Projectile.OnTriggerEnter2D 영역 EnemyController 컴포넌트 fallback (proxy) - 근본 해결안 = Layer "Enemy" 정식 등재 (별도 PD 안건·후속) 기능: - 적 처치 → EXP +1 → 즉시 레벨업 → 카드 3장 노출 → 선택 → PlayerSkillInventory 등록 → ActiveSkillRuntime Tick → 1.5s 영역 자동 발사 + 부가 효과 (DoT·Stun·Slow·DebuffStack) 기존 영역 변경 X (BT5-Dev·BT7-Dev·Phase 2-A·2-B·2-C·BT12-MVP-A asset 5장·Scene·SkillCardPlaceholder·SkillCardPlaceholderPool·deprecate 차후) Compile error 0건 (read_console·도메인 리로드 정합) C49 — Phase 2-D Sonnet 위임 + Phase 3 본 PM 직접 (단순 반복 카탈로그 v1) C50 — ~95K (PD 사전 승인 70~95K 영역 상한 정합) C19-2 — Sonnet 자율 git X·본 PM 직접 commit·push (feedback 정합) pm-auditor 사전 감사 = Pass + Minor 1 (Layer fallback proxy 명시·본 commit + 대화로그 영역 정정 적용) 후속: - Phase 2-A·2-B·2-C·2-D 영역 PD Play 검증 (자동 발동·레벨업·카드 선택·등록·Tick) - Layer "Enemy" 정식 등재 (별도 PD 안건·근본 해결안) - Phase 2-E EditMode 테스트 - 다른 카테고리 (B·C·D·E·F) 영역 - BT12-MVP-A asset 5장 deprecate (차기) - Screenshots·_Recovery .gitignore (별도)
2026-05-09 11:57:28 +00:00
void BindSlot(SkillCardSlot slot, ActiveSkillData card)
{
if (slot == null) return;
slot.Bind(card, () => OnCardSelected(slot, card));
}
feat(BT12-Dev Phase 2-D): BT12-MVP-A 통합 정정 (placeholder → 정식 ActiveSkillData) + Phase 2-B .meta 보충 C49 Phase 2-D — Sonnet 위임 (코드 Write·검증만·git 본 PM 처리 정합·feedback_pm_sonnet_subagent_unauthorized_push 정합). 수정 6 파일: - LevelUpManager.cs (Phase 2-D 정정·_pool 제거·SkillRuntimeFactory.RandomDraw3·HandleCardConfirmed(ActiveSkillData)·PlayerSkillInventory.AddSkillByCardId) - SkillSelectionUI.cs (Show(List<ActiveSkillData>)·_selected·BindSlot·OnCardSelected ActiveSkillData 전환) - SkillCardSlot.cs (Bind(ActiveSkillData)·DisplayName/Description/Icon PascalCase·rarity 배너 갈색 고정) - PlayerController.cs (PlayerSkillInventory 자동 부착·line 100) - Projectile.cs (Layer Enemy 미등재 fallback — EnemyController 컴포넌트 검사·proxy) - SkillRuntimeFactory.cs (RandomDraw3 메서드·Active 카테고리 무작위 3장) 신규 9 .meta (Phase 2-B Sonnet 자율 push 영역 영역 영역 영역 X·Unity Editor Refresh 후 자동 생성·본 commit 보충): - Skills.meta + Effectors.meta + 7 Effectors/*.cs.meta Layer Enemy 영역 = proxy 개선 신호 (C2-2): - 현 시점 = Projectile.OnTriggerEnter2D 영역 EnemyController 컴포넌트 fallback (proxy) - 근본 해결안 = Layer "Enemy" 정식 등재 (별도 PD 안건·후속) 기능: - 적 처치 → EXP +1 → 즉시 레벨업 → 카드 3장 노출 → 선택 → PlayerSkillInventory 등록 → ActiveSkillRuntime Tick → 1.5s 영역 자동 발사 + 부가 효과 (DoT·Stun·Slow·DebuffStack) 기존 영역 변경 X (BT5-Dev·BT7-Dev·Phase 2-A·2-B·2-C·BT12-MVP-A asset 5장·Scene·SkillCardPlaceholder·SkillCardPlaceholderPool·deprecate 차후) Compile error 0건 (read_console·도메인 리로드 정합) C49 — Phase 2-D Sonnet 위임 + Phase 3 본 PM 직접 (단순 반복 카탈로그 v1) C50 — ~95K (PD 사전 승인 70~95K 영역 상한 정합) C19-2 — Sonnet 자율 git X·본 PM 직접 commit·push (feedback 정합) pm-auditor 사전 감사 = Pass + Minor 1 (Layer fallback proxy 명시·본 commit + 대화로그 영역 정정 적용) 후속: - Phase 2-A·2-B·2-C·2-D 영역 PD Play 검증 (자동 발동·레벨업·카드 선택·등록·Tick) - Layer "Enemy" 정식 등재 (별도 PD 안건·근본 해결안) - Phase 2-E EditMode 테스트 - 다른 카테고리 (B·C·D·E·F) 영역 - BT12-MVP-A asset 5장 deprecate (차기) - Screenshots·_Recovery .gitignore (별도)
2026-05-09 11:57:28 +00:00
void OnCardSelected(SkillCardSlot clickedSlot, ActiveSkillData card)
{
if (card == null) return;
_selected = card;
if (_confirmButton != null) _confirmButton.interactable = true;
// 다른 슬롯 영역 highlight 해제 + 선택 슬롯만 활성
if (_slot1 != null) _slot1.SetHighlight(_slot1 == clickedSlot);
if (_slot2 != null) _slot2.SetHighlight(_slot2 == clickedSlot);
if (_slot3 != null) _slot3.SetHighlight(_slot3 == clickedSlot);
}
void OnConfirmClicked()
{
if (_selected == null) return;
var sel = _selected;
_onConfirm?.Invoke(sel);
}
void OnCloseClicked()
{
// 취소 영역 = 첫 카드 자동 확정 (BT12-MVP-A 영역 placeholder · 차기 영역 PD 결정 영역)
var fallback = _slot1 != null ? _slot1.Card : null;
_onConfirm?.Invoke(fallback);
}
}
}