🗓️ 오늘 하루 일정
✅ 오전
- 09:00 ~ 11:30 : 인터랙션 정리(F 키 프롬프트 고정, Door/NPC 상호작용 로직 점검)
- 11:30 ~ 12:00 : NPC 대화 트리거 구조 재정비(부모/자식 탐색 보강)
🍽️ 점심시간
- 13:00 ~ 14:00 : 점심시간
✅ 오후
- 14:00 ~ 16:30 : Pause/Setting UI 버그 트러블슈팅(Start 비활성화 이슈 제거)
- 16:30 ~ 18:00 : 로비 씬에서 Lobby 버튼 자동 숨김 처리
🍽️ 저녁시간
- 18:00 ~ 19:00 : 저녁시간
✅ 저녁
- 19:00 ~ 21:00 : 팀 QA & 저녁 스크럼 / Fog of War 빛 새어 나옴 보정(팽창+충돌 스캔 튜닝)
✅ 오늘 학습 키워드
인터랙션 시스템
OnTrigger 탐색
월드 고정 UI
Pause/Setting UI, 씬 분기 UI
Fog of War, 텍스처 필터(Point)
장애물 팽창(Inflate)
밀폐공간 채우기(Flood Fill)
✅ 오늘 학습 한 내용을 나만의 언어로 정리하기
- 인터랙션: 트리거가 자식, 인터랙션 스크립트가 부모에 있을 수 있으므로, 플레이어 측에서 GetComponent뿐 아니라 Parent/Children까지 탐색해야 안정적이다.
- F 키 프롬프트: 플레이어가 회전해도 월드 좌표 오프셋(x,y) 로만 배치하고 회전은 0도로 고정하면 깔끔하다.
- Pause/Setting UI: 다른 스크립트가 켠 UI를 Start()에서 다시 끄는 이중 토글 실수가 잦다. UI 초기 상태는 프리팹/씬에서 관리하고, 열고 닫는 책임은 열람 함수로 일원화한다.
- 씬 분기 UI: 현재 씬이 Lobby라면 Lobby 버튼 숨김, 그 외 씬에선 표시 — 씬 의존 UI는 열릴 때 한 번 판단해서 상태 맞춘다.
- Fog of War: 빛이 벽 너머로 번지는 건 주로 텍스처 보간(Bilinear) 과 스캔 간극 때문이다. 표시용 텍스처를 FilterMode.Point로 고정하고, 장애물은 연속 반경 팽창 + 밀폐 공간 채우기로 누수를 줄인다.
🧩 학습하며 겪었던 문제점 & 에러
1) NPC 대화가 뜨지 않음
- 문제 정의: Door는 잘 뜨는데 NPC만 대화 UI가 안 열림.
- 시도: 태그/콜라이더 확인. GetComponent<Iinteraction>()만 사용.
- 해결 방법:→ 부모/자식까지 탐색하도록 보강. NPC 트리거 오브젝트에 Interaction 태그, IsTrigger 확인.
- 새롭게 알게 된 점: 아트/콜라이더 구조가 바뀌면 접점 오브젝트가 달라진다. 탐색 폭을 넓혀 방어적으로 처리.
- 다시 만나면: 인터랙션 공용 헬퍼(확장 메서드)로 캡슐화해 재사용.
var interactable =
other.GetComponent<Iinteraction>() ??
other.GetComponentInParent<Iinteraction>() ??
other.GetComponentInChildren<Iinteraction>();
2) Interact 콜백 NullReference
- 문제 정의: 'performed' callbacks에서 NRE 발생.
- 시도: 호출 체인 추적(NPCStageSelectTrigger → UIManager.Open).
- 해결 방법: 레퍼런스 누락 보완 및 순서 보장(싱글톤 초기화 확인).
- 새롭게 알게 된 점: 입력 콜백은 프레임 어디서든 불릴 수 있어 초기화 순서가 중요.
- 다시 만나면: OnEnable에서 안전 가드, ?. 사용, 초기화 완료 플래그 도입.
3) Pause/Setting UI가 다시 꺼짐
- 문제 정의: 다른 곳에서 활성화했는데, Start()에서 gameObject.SetActive(false)로 재비활성화.
- 해결 방법: Start()의 강제 비활성화 제거, 열릴 때만 상태 조정. 씬 분기는 다음처럼:
- 새롭게 알게 된 점: UI의 생명주기 책임을 한 곳으로 모아야 이중 토글을 피한다.
- 다시 만나면: UI Open/Close 전용 진입점만 사용(외부에서 직접 SetActive 금지).
void UpdateLobbyButtonVisibility() {
bool isLobby = SceneManager.GetActiveScene().name == lobbySceneName;
lobbyButton.gameObject.SetActive(!isLobby);
}
4) Fog of War가 벽을 넘어서 새어 나옴
- 문제 정의: 벽에 붙으면 반대쪽으로 광량이 스며듦.
- 시도: 스캔 간격/텍스처 설정 점검.
- 해결 방법:
- 표시 텍스처를 Point 필터로: fogPlaneTextureLerpBuffer.filterMode = FilterMode.Point;
- 스캔 간격 축소: scanSpacingPerUnit ↓
- 장애물 연속 반경 팽창:
- InflateObstaclesFloat(0.6f); // 연속 반경(타일 단위)
- 밀폐 공간 채우기(Flood Fill로 외부 도달 불가 영역 Obstacle 처리):
- FillEnclosedSpaces(); // 방 내부 테두리만 잡히던 현상 해결
- 새롭게 알게 된 점: 렌더 단계(필터)와 데이터 단계(스캔/팽창/채움)를 같이 만져야 시각적 누수를 확실히 잡을 수 있다.
- 다시 만나면: 테스트 맵에 벽 두께/코너/문 다양한 케이스를 배치해 리그레션 체크.
5) F 키 프롬프트가 플레이어 회전에 따라 돌아감
- 문제 정의: 플레이어가 회전하면 UI도 같이 회전.
- 해결 방법: 월드 좌표 기준 오프셋 + 회전 고정.
transform.position = target.position + new Vector3(offsetX, offsetY, z);
transform.rotation = Quaternion.identity; // 회전 무시
- 새롭게 알게 된 점: “월드 기준” 고정이 필요할 땐 부모-자식 대신 LateUpdate에서 직접 배치가 가장 단순하고 확실.
- 다시 만나면: 부모 스케일/flip 영향 제거 옵션 유지.
📝 메모
오늘은 작은 실수 하나가 UI 전체 흐름을 꼬이게 만들 수 있다는 걸 다시 느꼈다. 그래도 원인을 딱 집어내고, 씬 분기/입력/인터랙션/포그워까지 각 시스템의 책임 경계를 더 명확히 정리했다. 생각보다 모르고 있었구나 싶었지만, 모르는 걸 부끄러워하지 말자. 팀 QA에서 나온 피드백도 바로 반영해서 한 단계 단단해진 느낌! 내일은 Fog of War 파라미터를 더 미세 조정하고, NPC 인디케이터(느낌표/물음표) 프리팹을 묶어서 상태 스위치까지 완성하자. 다음주도 화이팅!!!
'스파르타 코딩클럽 > TIL작성' 카테고리의 다른 글
| 내일배움캠프 66일차 TIL [최종 프로젝트 Black Chamber] (0) | 2025.09.30 |
|---|---|
| 내일배움캠프 65일차 TIL [최종 프로젝트 Black Chamber] (0) | 2025.09.29 |
| 내일배움캠프 63일차 TIL [최종 프로젝트 Black Chamber] (0) | 2025.09.25 |
| 내일배움캠프 62일차 TIL [최종 프로젝트 Black Chamber] (0) | 2025.09.24 |
| 내일배움캠프 61일차 TIL [최종 프로젝트 Black Chamber] (0) | 2025.09.23 |



