🗓️ 오늘 하루 일정
✅ 오전
- 09:00 ~ 09:30 : 레이어 순서 확정 + 미니맵은 +1 규칙 적용
- 09:30 ~ 10:10 : 경고 아이콘 상태 로직 정리(의심/경계 + minIconShowTime)
- 10:10 ~ 11:00 : “!” 아이콘 2초 뒤 Destroy 방식 설계·구현(프리팹/앵커 기준)
- 11:00 ~ 12:00 : Gunimage 슬라이드 리팩토링 설계(SlideWithData / ApplyOverlay / SetAllSprites) + CS0019 에러 수정
- 12:00 ~ 13:00 : 패널·아이콘 겹침 제거 → 패널 전용 모드 전환, raycastTarget=false 정리
🍽️ 점심시간
✅ 오후
- 14:00 ~ 14:20 : 팀 회의(간단 진행 사항 공유)
- 14:20 ~ 15:20 : 브로셔 작업(구성 확정, 캡처 수집)
- 15:20 ~ 16:40 : 무기방(Armory) 표기-데이터 매핑을 상점과 동일 규격으로 정렬
- 16:40 ~ 17:30 : ArmorySlotView 바인딩/포맷 적용, 1차 테스트
- 17:30 ~ 18:00 : 잔버그 픽스(텍스트 포맷·컬러 인덱스)
🍽️ 저녁시간
✅ 저녁
- 19:00 ~ 19:40 : 무기방 데이터 정리(상점 데이터와 완전 일치 확인)
- 19:40 ~ 20:20 : 슬라이드/패널 교체 엣지 케이스 테스트(첫/마지막 인덱스, 급연타)
- 20:20 ~ 21:00 : 브로셔 손보기 & TIL 정리
✅ 오늘 학습 키워드
Unity UI 레이어링, 미니맵 오프셋, 상태-뷰 분리, 프리팹 라이프사이클, DOTween 슬라이드, C# null-조건부 연산자, Armory·Shop 스펙 동기화, 패널 전용 썸네일 방식
✅ 오늘 학습 한 내용을 나만의 언어로 정리하기
- 상태와 표시를 분리하면 UI 수명이 단순해진다. Alert 상태는 유지하되, “!” 아이콘은 프리팹 인스턴스로 생성해서 2초 후 파괴하면 깔끔하다.
- 슬라이드는 애니메이션 완료 시점을 싱크 포인트로 삼아, 그때 아이콘/컬러/텍스트/패널 스프라이트를 한 번에 갱신한다.
- 썸네일은 패널 하나로 일원화하는 편이 겹침·정렬·입력 충돌을 줄인다. 필요하면 오버레이는 옵션으로 유지.
- C#에서는 참조형을 &&로 평가할 수 없다 → null-조건부(?.) 로 안전하게 스프라이트 접근.
🧩 학습하며 겪었던 문제점 & 에러
1) “!” 아이콘 수명 관리
- 문제정의: Alert 지속 중 아이콘 잔상/깜빡임 발생
- 시도: SetActive(false) 토글 → 다음 Alert 때 상태 꼬임
- 해결방법: 프리팹 인스턴스 생성 → 2초 뒤 Destroy
- var go = Instantiate(exclamationIconPrefab, iconAnchor ?? transform); go.transform.localPosition = Vector3.zero; Destroy(go, 2f);
- 새롭게 알게 된 점: 상태값과 시각 요소의 수명 분리가 안정적
- 다시 만나면: 빈번 생성이면 풀링으로 전환
2) CS0019: && 피연산자에 참조형 사용
- 문제정의: fromData && fromData.prefabInfo 방식의 널체크로 컴파일 에러
- 해결방법: null-조건부로 교체
- Sprite fromSprite = fromData?.prefabInfo?.weaponSprite; Sprite toSprite = toData?.prefabInfo?.weaponSprite;
- 새롭게 알게 된 점: 참조형은 bool로 평가되지 않는다
- 다시 만나면: 팀 코딩 규칙에 널체이닝 우선 명시
3) 패널 이미지와 아이콘 오버레이 겹침
- 문제정의: 캐러셀 패널과 아이콘이 중첩 렌더 + 입력 충돌
- 해결방법: 패널 전용 모드(overlay off)로 전환, 패널 raycastTarget=false
- useOverlayIcon = false; if (iconImage) iconImage.enabled = false; foreach (var rt in panels) rt.GetComponent<Image>().raycastTarget = false;
- 새롭게 알게 된 점: 썸네일 소스를 단일화하면 동기화 포인트가 줄어든다
- 다시 만나면: 오버레이는 퀵옵션으로만 유지
4) 슬라이드 후 새 데이터가 즉시 반영되지 않음
- 문제정의: 슬라이드 애니메이션은 정상이나 완료 직후 텍스트/컬러가 이전 상태
- 해결방법: SlideWithData 도입 → 완료 콜백에서 일괄 갱신
- public void SlideWithData(bool toRight, GunData fromData, GunData toData, System.Action onComplete = null) { var fromSprite = fromData?.prefabInfo?.weaponSprite; var toSprite = toData?.prefabInfo?.weaponSprite; SlideWithSprites(toRight, fromSprite, toSprite, () => { SetAllSprites(toData); // 패널 + 이름 + 등급색 동기화 onComplete?.Invoke(); }); }
- 새롭게 알게 된 점: 애니 완료 시점을 UI 동기화 트리거로 통일
- 다시 만나면: 시작 시점 선적용(미리보기) 옵션도 제공
🗂️ 무기방(Armory) 표기 규격 ― 상점과 동일
- 분류: prefabInfo.phaseTag(잠입/난전/공용) + subType(HG/SMG/AR/SG/SR)
- 데미지: damage / RPM: rpm / 소음: volume(0~100)
- 재장전 시간: baseReloadTime * (100 / reloadSpeed) → 0.00s
- 장탄수: maxAmmo
- 정확도/정밀도/안정성: accuracy / precision / stability
- 조준시 정확도/정밀도/안정성: aimAccuracy / aimPrecision / aimStability
- 조준배율: aimMagnification(기본 1.0x)
📝 메모
오늘은 “작게, 단순하게, 한 번에 갱신” 원칙을 제대로 지켰다.
겹침을 제거하고 상태-뷰를 분리하니 UI가 한결 안정적이다.
오후·저녁에 브로셔와 무기방 정렬까지 마무리해서, 발표 퀄리티를 한 단계 올리자. 파이팅! 💪