🗓️ 오늘 하루 일정
✅ 오전
- 10:00 ~ 11:00 : 팀 회의(역할 분담, 금일 목표 확정)
- 11:00 ~ 12:30 : Fog of War 초기화 에러 재현 및 원인 파악(Scan Spacing Per Unit)
🍽️ 점심시간
- 13:00 ~ 14:00 : 점심시간
✅ 오후
- 14:00 ~ 16:30 : FogPlane 범위/위치 점검(그리드 X·Y, Mid Point, Unit Scale) 및 머티리얼 교체(Unlit)
- 16:30 ~ 18:00 : 문 레이어( Door ) 오클루전 확인, 리빌 옵션/알파 튜닝, 전체 맵 테스트
🍽️ 저녁시간
- 18:00 ~ 19:00 : 저녁시간
✅ 저녁
- 19:00 ~ 20:30 : 씬 최종 점검, 설정값 가이드 정리 및 TIL 작성
✅ 오늘 학습 키워드
- Fog of War(2D XY 변환), Level Dimension X/Y, Unit Scale, Level Mid Point
- Scan Spacing Per Unit(샘플 간격), FogPlane 머티리얼(Unlit/Transparent), Keep Revealed Tiles
- Door Occlusion(레이캐스트), Draw Gizmos로 범위 시각화
✅ 오늘 학습 한 내용을 나만의 언어로 정리하기
- FogPlane은 Level Mid Point를 중심으로 Level Dimension X/Y × Unit Scale 크기로 깔리므로, 이 세 값 중 하나라도 어긋나면 맵 일부가 안개 밖으로 빠질 수 있다.
- 안개가 “완전 검정”으로 시작하려면 Fog 머티리얼을 조명 비영향(Unlit/Transparent) 으로 써야 한다. 조명에 반응하는 머티리얼은 검정 대신 어둡게만 보일 수 있다.
- Scan Spacing Per Unit은 0보다 커야 하며(권장 1~2), 값이 클수록 더 촘촘히 스캔하지만 비용이 늘어난다.
- Keep Revealed Tiles를 끄면 비추기 전엔 완전 검정, 비춘 후엔 다시 덮이면 숨겨지는 “스텔스형” 연출이 된다.
- Draw Gizmos로 그리드 박스를 확인하면 범위/중심 이상을 빠르게 찾을 수 있다.
- 문 오클루전은 Door 레이어 + 콜라이더가 정확해야 하며, 트리거 무시는 옵션(Ignore Triggers)으로 제어한다.
🧩 학습하며 겪었던 문제점 & 에러
1) 문제정의
- 플레이 시작 시 콘솔에에러가 발생했다.
- Scan Spacing Per Unit must be > 0.
내가 한 시도
- 인스펙터의 Scan Spacing Per Unit 값을 확인하고, 기존에 저장된 LevelData가 0을 들고 오는지 점검.
해결 방법
- 인스펙터 값을 1 이상으로 수정.
- 과거에 저장된 레벨 데이터가 있다면 삭제/수정 후 재스캔.
- 재발 방지를 위해 코드에 최소값 강제:
// 인스펙터 실수 방지
[SerializeField, Min(1)] private int scanSpacingPerUnit = 1;
// 런타임 안전장치
void ValidateProperties()
{
scanSpacingPerUnit = Mathf.Max(1, scanSpacingPerUnit);
}
새롭게 알게 된 점
- 이 값은 내부에서 스캔 해상도를 결정하며, 0이면 분모가 0이 되는 계산 경로가 있어 사전에 걸러야 한다.
다시 만나게 된다면
- 필드에 Min(1) 속성과 런타임 클램프를 함께 두고, LevelData 저장 시에도 밸리데이션 로직을 추가하겠다.
2) 문제정의
- 벽과 문 레이어는 잘 작동하지만, 맵 오른쪽 복도가 처음부터 밝게 보이고 안개가 덮이지 않았다.
내가 한 시도
- 레이어/콜라이더 이상 여부 확인, FogPlane 머티리얼/알파 확인, 그리드 한계선 Gizmo 확인.
해결 방법
- Level Dimension X/Y를 실제 맵보다 넉넉히 증가, Level Mid Point를 맵 중앙으로 재배치.
- 머티리얼을 URP Unlit(Transparent) 로 교체, Fog Color=검정, Fog Plane Alpha=1.
- Keep Revealed Tiles 끔 → 초기 완전 검정 확인.
// FogPlane 크기 재계산 예시(개념)
var size = new Vector2(levelDimensionX * unitScale, levelDimensionY * unitScale);
fogPlane.localScale = new Vector3(size.x, size.y, 1f);
fogPlane.position = levelMidPoint.position;
새롭게 알게 된 점
- 머티리얼이 조명 영향을 받으면 “검정”이 아닌 “어둡게”만 보일 수 있다. 또, 그리드 범위가 부족하면 특정 영역이 안개 밖으로 남는다.
다시 만나게 된다면
- 씬 진입 시 Gizmo 박스가 맵을 완전히 덮는지 자동 점검하는 에디터 스크립트를 두고, 머티리얼 프리셋을 고정값으로 강제하겠다.
📝 메모
- 시작값 추천: Scan Spacing Per Unit=1, Fog Lerp Speed=5, Fog Plane Alpha=1, Keep Revealed Tiles=OFF.
- 테스트 루틴: (1) Gizmo 박스 확인 → (2) 머티리얼 Unlit 확인 → (3) 문/벽 콜라이더 및 레이어 → (4) 저장 데이터 초기화 후 재스캔.
- 도어 오클루전은 문 사이에 아주 얇은 틈이 있으면 레이캐스트가 새어 나갈 수 있으니 콜라이더를 살짝 겹치게 배치하는 것이 안전하다.
'스파르타 코딩클럽 > TIL작성' 카테고리의 다른 글
내일배움캠프 68일차 TIL [최종 프로젝트 Black Chamber] (0) | 2025.10.02 |
---|---|
내일배움캠프 67일차 TIL [최종 프로젝트 Black Chamber] (0) | 2025.10.01 |
내일배움캠프 66일차 TIL [최종 프로젝트 Black Chamber] (0) | 2025.09.30 |
내일배움캠프 65일차 TIL [최종 프로젝트 Black Chamber] (0) | 2025.09.29 |
내일배움캠프 64일차 TIL [최종 프로젝트 Black Chamber] (0) | 2025.09.26 |