no image
내일배움캠프 81일차 TIL [최종 프로젝트 Black Chamber]
🗓️ 오늘 하루 일정✅ 오전10:00 ~ 12:10 : Blood 프리팹 추가·수정, Stage4 머니스포너/철문/탈출구 배치, Title GIF 적용🍽️ 점심시간13:00 ~ 14:00 : 점심✅ 오후14:10 ~ 15:10 : 로딩 씬 디자인 변경 & 재업로드, UI 브랜치 머지 정리15:10 ~ 16:10 : 상점 UI 개편, 무기 등급 데이터 연동, Gun 이미지 픽셀 크기/Point 교체, GunData 재적용16:10 ~ 16:40 : 총구 위치 오류 수정, 타이틀 마지막 프레임 반짝임 Fix16:40 ~ 17:10 : 벽/문/철문 & 플레이어 근접공격 사운드 추가·Fix, 에임 조준 시 카메라 크기 조정, 미니맵 라이트 씬 추가, FOW(전장의 안개) 수정, Stage2·3 스테이지 손질..
2025.10.29
no image
내일배움캠프 80일차 TIL [최종 프로젝트 Black Chamber]
🗓️ 오늘 하루 일정✅ 오전09:00 ~ 10:30 : 레이저 시스템 정리 — GunData.hasLaser/firePointOffset 연동, 완전 탑뷰 기준으로 레이캐스트 정밀도 조정10:30 ~ 11:30 : Dot(히트 포인트) 표시 복구 및 소팅/깊이 오프셋 튜닝11:30 ~ 12:30 : LineRenderer 알파 그라데이션 적용(시작 100% → 끝 1%), 머티리얼 알파 1 고정 처리🍽️ 점심시간13:00 ~ 14:00 : 점심시간✅ 오후14:00 ~ 15:20 : Hider 동작 수정 — 나타날 때 즉시 표시, 사라질 때만 페이드아웃15:20 ~ 16:40 : Tag/Layer 재정비 + FoW 마스크 점검(전장의 안개 표시 안정화)16:40 ~ 17:30 : REST 클라이언트 예..
2025.10.28
no image
내일배움캠프 79일차 TIL [최종 프로젝트 Black Chamber]
🗓️ 오늘 하루 일정✅ 오전09:30 ~ 11:00 : URP 교체 후 경고 해결(2D renderer data must be assigned…) → Renderer2D Data 생성 및 URP Asset 연결11:00 ~ 12:30 : FOW(전장의 안개) + Light2D 동시 사용 이슈 재현/분석(2D Renderer 전환 시 FOW 미출력 원인 파악)🍽️ 점심시간13:00 ~ 14:00 : 점심✅ 오후14:00 ~ 15:30 : Renderer2D 세팅 정리Global Light 2D 추가 → Sprite-Lit 표시 정상화Renderer2D에 FOW Renderer Feature 적용(이벤트: After Rendering Transparents)Depth/Stencil Buffer ON, 중..
2025.10.27
no image
내일배움캠프 78일차 TIL [최종 프로젝트 Black Chamber]
🗓️ 오늘 하루 일정✅ 오전09:00 ~ 13:00 : 유료 Fog of War 자산 임포트 → Universal Renderer Data(URP) Render Feature 추가, 기본 월드(FogOfWarWorld) 세팅🍽️ 점심시간13:00 ~ 14:00 : 점심시간✅ 오후14:00 ~ 15:00 : Quality → Render Pipeline Asset 를 새로 만든 Fog URP Asset으로 전환, 카메라 Renderer를 동일 렌더러로 지정15:00 ~ 16:00 : Depth Texture On, Render Pass Event = After Rendering Transparents로 조정 → 스프라이트 위에 포그 오버레이16:00 ~ 18:00 : Unknown Area Color ..
2025.10.24
no image
내일배움캠프 77일차 TIL [최종 프로젝트 Black Chamber]
🗓️ 오늘 하루 일정✅ 오전09:30 ~ 11:30 : 스텔스 권총 발사 불능 재현 및 원인 추적(씬 전환 후 Shooter 활성 상태 불일치 가설 수립)11:30 ~ 12:30 : WeaponManager/WeaponInventory 코드 리딩, 인덱스/활성 상태 동기화 경로 점검🍽️ 점심시간13:00 ~ 14:00 : 점심시간✅ 오후14:00 ~ 16:00 : 재빌드 → 장착 파이프라인 수정(idempotent 장착 보증 설계)16:00 ~ 18:00 : 패치 적용 & 검증(강제 활성화 후 스텔스 시작 즉시 발사 확인), 디버그 로그/인스펙터 캡처 정리18:00 ~ 19:00 : Fog of War(유료) 도입 계획 초안 작성(리빌러/오클루더/미니맵 연동 설계)🍽️ 저녁시간19:00 ~ 19:3..
2025.10.23
no image
내일배움캠프 76일차 TIL [최종 프로젝트 Black Chamber]
🗓️ 오늘 하루 일정✅ 오전09:00 ~ 10:10 : 프로젝트 구조 점검 및 목표 확정(패턴 A 적용, 도메인 경계 정리)10:10 ~ 11:20 : GunData 스펙 반영(weaponName/rpm/maxAmmo 등) + 구필드 폴백 경로 정리11:20 ~ 12:50 : 상점 연결 마무리 — StoreCanvasController 단일 경로, WeaponInventory.Buy() ↔ MoneyManager.TrySpend() 연동🍽️ 점심시간13:00 ~ 14:00 : 점심시간✅ 오후14:00 ~ 15:10 : 무기방 연결 — Gunimage(슬라이드 이벤트) ↔ ArmorySlotView(데이터/저장) 결합15:10 ~ 16:10 : 캐러셀 슬라이드 체감 개선(DOTween: slideDis..
2025.10.22
no image
내일배움캠프 75일차 TIL [최종 프로젝트 Black Chamber]
🗓️ 오늘 하루 일정✅ 오전09:30 ~ 10:00 : 상점/무기 시스템 작업 목표 정리, 씬 구조(StoreCanvas/Slots/패널) 점검10:00 ~ 11:20 : GunData 정리(PhaseTag/price/icon 확인) 및 필드 매핑 표 작성11:20 ~ 12:50 : WeaponManager 정비(AddWeapon()/슬롯 갱신) + WeaponInventory.Buy() 흐름 연결🍽️ 점심시간13:00 ~ 14:00 : 점심시간✅ 오후14:00 ~ 15:10 : 단일 팝업 패턴 확정(공용 PurchasePopup, HoverPopup), 슬롯은 GunData만 보유15:10 ~ 16:20 : ItemSlot.Bind(gun, hover, purchase, rightColumn) 도입..
2025.10.21
no image
내일배움캠프 74일차 TIL [최종 프로젝트 Black Chamber]
🗓️ 오늘 하루 일정✅ 오전09:00 ~ 13:00 : Unity Analytics Funnels 동작 방식 확인 및 퍼널 설계 초안 정리🍽️ 점심시간13:00 ~ 14:00 : 점심시간✅ 오후(시간 미기록) : Enemy.Die()에 아이템 드랍 확률 30% 로직 추가 및 테스트(옵션) 인스펙터에서 조절 가능한 itemDropChance 필드 설계🍽️ 저녁시간18:00 ~ 19:00 : 저녁시간✅ 저녁19:00 ~ 21:00 : 팀 회의 — 진행 상황 공유, 튜토리얼 이벤트(tutorial_start/end) 수집 현황 및 퍼널 관측 포인트 논의, 드랍률 데이터 검증 계획 수립✅ 오늘 학습 키워드Unity Analytics(UGS), Funnels, Event Manager, Custom Even..
2025.10.20
반응형

🗓️ 오늘 하루 일정

✅ 오전

  • 10:00 ~ 12:10 : Blood 프리팹 추가·수정, Stage4 머니스포너/철문/탈출구 배치, Title GIF 적용

🍽️ 점심시간

  • 13:00 ~ 14:00 : 점심

✅ 오후

  • 14:10 ~ 15:10 : 로딩 씬 디자인 변경 & 재업로드, UI 브랜치 머지 정리
  • 15:10 ~ 16:10 : 상점 UI 개편, 무기 등급 데이터 연동, Gun 이미지 픽셀 크기/Point 교체, GunData 재적용
  • 16:10 ~ 16:40 : 총구 위치 오류 수정, 타이틀 마지막 프레임 반짝임 Fix
  • 16:40 ~ 17:10 : 벽/문/철문 & 플레이어 근접공격 사운드 추가·Fix, 에임 조준 시 카메라 크기 조정, 미니맵 라이트 씬 추가, FOW(전장의 안개) 수정, Stage2·3 스테이지 손질, 다수 브랜치 머지

🍽️ 저녁시간

  • 18:00 ~ 19:00 : 저녁

✅ 저녁

  • 20:00 ~ 21:00 : 팀원들과 저녁 스크럼

✅ 오늘 학습 키워드

Title GIF 루프, Blood Decal, LayerMask & 2D Trigger, GunPrefabInfo.firePointOffset 적용, UI Image Preserve Aspect, FOW 튜닝, Aim Zoom


✅ 오늘 학습 한 내용을 나만의 언어로 정리하기

  • 데이터 파이프라인: 원격(Firebase) GunData + 로컬 GunPrefabInfo(SO) 를 합쳐 사용. 수치/메타는 GunData, 에셋·오프셋(아이콘/애니메이터/firePointOffset)은 SO 기준.
  • 총구 위치는 Shooter 생성 후에도 gunPoint 교체 시 재적용 필요 → ApplyFirePointOffset()로 고정.
  • 아이콘 찌부 현상은 UI Image의 Preserve Aspect로 해결(가능하면 Type=Simple).

🧩 학습하며 겪었던 문제점 & 에러

  • 총알 충돌 사운드가 안 울림 (2D/LayerMask 비교 오류)
    • 문제정의: OnTriggerEnter(3D 콜백) + LayerMask == layer 비교로 트리거 미동작.
    • 시도: 충돌 레이어 로그만 찍힘.
    • 해결방법: 2D 콜백으로 변경 + 비트마스크 포함 여부로 비교.
    • 코드:
    • private void OnTriggerEnter2D(Collider2D other) { int mask = 1 << other.gameObject.layer; if ( (wallSoundLayer.value & mask) != 0 ) StructSoundManager.Instance.PlayWallAttackSound(transform.position); else if ( (doorSoundLayer.value & mask) != 0 ) StructSoundManager.Instance.PlayDoorAttackSound(transform.position); else if ( (steelDoorSoundLayer.value & mask) != 0 ) StructSoundManager.Instance.PlaySteelDoorAttackSound(transform.position); }
    • 배운점: 2D 물리는 2D 콜백, LayerMask는 비트 연산으로 판정.
    • 다시 만나면: Physics2D Collision Matrix 먼저 체크 → 콜백/마스크 순으로 검증.
  • firePointOffset이 실제 발사점에 반영되지 않음
    • 문제정의: SO의 오프셋을 넣었지만 Shooter.gunPoint 교체 시 초기 오프셋이 유실.
    • 해결방법: SO 값을 캐시하고 바인딩 직후 재적용.
    • 코드:
    • // Shooter.cs private Vector2? _prefabFireOffset; public void Initialize(GunData gd) { _prefabFireOffset = gd?.prefabInfo != null ? gd.prefabInfo.firePointOffset : (Vector2?)null; ApplyFirePointOffset(); } public void BindGunPoint(Transform t) { gunPoint = t; ApplyFirePointOffset(); } public void ApplyFirePointOffset() { if (gunPoint == null || !_prefabFireOffset.HasValue) return; var o = _prefabFireOffset.Value; gunPoint.localPosition = new Vector3(o.x, o.y, 0f); }
    • 배운점: 데이터 출처는 SO 기준(Firebase 값과 분리). 바인딩 순서에 민감.
    • 다시 만나면: Initialize → Bind → Apply 3단계 보일러플레이트 유지.
  • 상점 아이콘 비율 깨짐
    • 해결: Image.preserveAspect = true + Type=Simple, 필요 시 Compression=None/Low로 선명도 확보.

📝 메모

오늘은 **비주얼(Title GIF, 로딩 씬, 아이콘)**과 전투 감각(사운드, 총구 위치, 에임 카메라, FOW) 를 동시에 끌어올렸다. 특히 데이터 흐름을 다시 정리하면서 “SO가 외형/오프셋의 단일 진실원천”이라는 원칙을 확실히 박아넣은 게 큰 수확. 내일은 Stage 폴리싱과 상점 UX 마지막 마감까지 밀어보자. 한 걸음씩, 꾸준히! ✊


반응형
반응형

🗓️ 오늘 하루 일정

✅ 오전

  • 09:00 ~ 10:30 : 레이저 시스템 정리 — GunData.hasLaser/firePointOffset 연동, 완전 탑뷰 기준으로 레이캐스트 정밀도 조정
  • 10:30 ~ 11:30 : Dot(히트 포인트) 표시 복구 및 소팅/깊이 오프셋 튜닝
  • 11:30 ~ 12:30 : LineRenderer 알파 그라데이션 적용(시작 100% → 끝 1%), 머티리얼 알파 1 고정 처리

🍽️ 점심시간

  • 13:00 ~ 14:00 : 점심시간

✅ 오후

  • 14:00 ~ 15:20 : Hider 동작 수정 — 나타날 때 즉시 표시, 사라질 때만 페이드아웃
  • 15:20 ~ 16:40 : Tag/Layer 재정비 + FoW 마스크 점검(전장의 안개 표시 안정화)
  • 16:40 ~ 17:30 : REST 클라이언트 예외/타임아웃 보강

🍽️ 저녁시간

  • 18:00 ~ 19:00 : 저녁시간

✅ 저녁

  • 19:00 ~ 20:00 : 팀 회의(진행 공유, 레이저/리로드/머니 UI 체크리스트 정리)
  • 20:00 ~ 21:00 : GunData Base Reload Time UI·애니메이션 연동 마감
  • 21:00 ~ 22:00 : 머지/리버트 정리, 로비씬 Player UI 반영, 머니 인터랙션으로 HUD 즉시 갱신 확인

✅ 오늘 학습 키워드

탑뷰(90°) 레이캐스트, LineRenderer 그라데이션, 이벤트 기반 UI 갱신, 즉시/지연 피드백 패턴, 무기 데이터 파라미터 주입, FoW 마스크, 방어적 네트워크 코드


✅ 오늘 학습 한 내용을 나만의 언어로 정리하기

  • 레이저: 현재 장착 무기의 hasLaser에 따라 자동 ON/OFF, firePointOffset(x,y) 로컬 오프셋을 월드로 변환해 정확한 총구에서 발사.
  • Dot(끝점): 히트 지점에 점 표식 표시(2D 소팅/깊이 오프셋 적용).
  • 리로드 시간: GunData.baseReloadTime을 장착 시 주입하여 애니메이션/크로스헤어 UI 코루틴과 1:1 동기화.
  • HUD 머니: 픽업 시 MoneyManager.Add() → OnMoneyChanged 이벤트로 HUD·상점 텍스트 동시 갱신.
  • Hider: OnReveal=즉시 표시, OnHide=페이드아웃으로 가시성 피드백 개선.
  • 프로젝트 정비: Tag/Layer/FoW 마스크 정리, REST 예외/타임아웃 보강, 머지/리버트 정리.

🧩 학습하며 겪었던 문제점 & 에러

  • Dot(레이저 끝점)가 보이지 않음
    • 문제정의: 히트가 있어도 Dot 비표시
    • 시도: 레이어·소팅·머티리얼 점검
    • 해결:
    • // Awake() if (dotPrefab && dot == null) { dot = Instantiate(dotPrefab).transform; dot.gameObject.SetActive(false); } // RenderLaser() - 2D에서 가림/깊이 이슈 방지 if (use2D) { dot.position = new Vector3(hitPoint.x, hitPoint.y, -0.001f); dot.rotation = Quaternion.identity; } else { dot.position = hitPoint + hitNormal * 0.002f; dot.rotation = Quaternion.LookRotation(hitNormal); }
    • 배운 점: 인스턴싱 누락 + 소팅/깊이 오프셋이 핵심
    • 다시 만나면: Dot 전용 Sorting Layer/Order 프리셋화
  • LineRenderer 알파가 230(≈0.9)로 고정
    • 문제정의: 그라데이션 알파가 적용되지 않음
    • 해결: 알파는 Gradient로만 제어, 머티리얼/Start·End 컬러 알파는 1 유지
    • // 머티리얼 알파 1 var rgb1 = new Color(laserColor.r, laserColor.g, laserColor.b, 1f); if (line.material.HasProperty("_BaseColor")) line.material.SetColor("_BaseColor", rgb1); // Gradient 알파: 1.0 → 0.01 var g = new Gradient(); g.SetKeys( new[]{ new GradientColorKey(rgb1,0f), new GradientColorKey(rgb1,1f) }, new[]{ new GradientAlphaKey(1f,0f), new GradientAlphaKey(0.01f,1f) } ); line.colorGradient = g;
    • 배운 점: RGB(색) vs Alpha(투명) 역할 분리
  • Hider가 나타날 때도 페이드되어 답답함
    • 해결:
    • protected override void OnReveal() { if (currentFadeCoroutine != null) StopCoroutine(currentFadeCoroutine); SetAlphaInstant(1f); // 즉시 표시 } protected override void OnHide() { StartFade(0f); } // 스르륵 사라짐
    • 배운 점: 위험·발견 상황엔 즉시 피드백이 UX에 유리
  • HUD 돈이 중복 갱신/지연
    • 해결:
    • // MoneyItem.Interaction() MoneyManager.Instance.Add(amount); // Add() 내부에서 이벤트 발행 // MoneyManager.Instance.OnMoneyChanged.Invoke(); // ❌ 제거 // UIHUDSlots void OnEnable() { MoneyManager.Instance?.OnMoneyChanged.AddListener(RefreshMoney); RefreshMoney(); // 구독 직후 1회 갱신 }
    • 배운 점: 이벤트는 단일 발행, UI는 구독 + 초기 렌더
  • 리로드 시간 불일치
    • 해결:
    • // 장착 시 주입 void ApplyUpperWeaponAnimator(GunData data, ...) { if (data) reloadDuration = Mathf.Max(0.0001f, data.baseReloadTime); } // 실행 시 폴백 void PlayReload() { float dur = reloadDuration; if (dur <= 0f) dur = WeaponManager.Instance?.CurrentWeapon?.gunData?.baseReloadTime ?? dur; if (dur <= 0f) dur = nowcrosshairCursor.reloadFillDuration; nowcrosshairCursor.PlayReloadUI(dur); }
    • 배운 점: 장착 훅 주입 + 실행 폴백의 이중 안전망

📝 메모

레이저/리로드/머니처럼 즉시 체감되는 피드백들을 다듬으니 게임 템포가 훨씬 또렷해졌다. “모르는 걸 부끄러워하지 말자.” 오늘도 원인→가설→검증 루틴으로 하나씩 쌓았다. 내일은 Subway 진입 루트와 보안구역(랩/제어실) 레벨링에 집중하고, 야간 톤 라이트 프리셋을 더 다듬자.


반응형
반응형

🗓️ 오늘 하루 일정

✅ 오전

  • 09:30 ~ 11:00 : URP 교체 후 경고 해결(2D renderer data must be assigned…) → Renderer2D Data 생성 및 URP Asset 연결
  • 11:00 ~ 12:30 : FOW(전장의 안개) + Light2D 동시 사용 이슈 재현/분석(2D Renderer 전환 시 FOW 미출력 원인 파악)

🍽️ 점심시간

  • 13:00 ~ 14:00 : 점심

✅ 오후

  • 14:00 ~ 15:30 : Renderer2D 세팅 정리
    • Global Light 2D 추가 → Sprite-Lit 표시 정상화
    • Renderer2D에 FOW Renderer Feature 적용(이벤트: After Rendering Transparents)
    • Depth/Stencil Buffer ON, 중복 FOW Feature 정리
  • 15:30 ~ 16:30 : URP Asset 공통 옵션 점검(Depth Texture ON, Post-processing 필요 항목만 유지)
  • 16:30 ~ 17:30 : 품질 레벨/Graphics 탭 모두 동일 URP Asset로 통일, 씬 전반 렌더 확인

🍽️ 저녁시간

  • 18:00 ~ 19:00 : 저녁

✅ 저녁

  • 19:00 ~ 20:10 : Crosshair 재장전 UI 구현(이미지 fillAmount가 0→1로 reloadFillDuration초 동안 차오르도록 코루틴)
  • 20:10 ~ 20:40 : CharacterAnimationController 연동 및 컴파일 에러 수정
  • 20:40 ~ 21:10 : 최종 점검(재장전 취소/중단 처리, UI 표시 토글)

✅ 오늘 학습 키워드

URP Renderer2D / Global Light 2D / Renderer Feature 이벤트 타이밍 / Depth Texture / Sprite-Lit Default 머티리얼 / 카메라 분리 전략 / Image.fillAmount / 코루틴 진행률 / StartCoroutine 사용 조건


✅ 오늘 학습 한 내용을 나만의 언어로 정리하기

  • Renderer2D와 FOW 병행
    • 일반적으로 FOW는 Universal(Forward)용 Feature지만, Renderer2D에서도 After Rendering Transparents 시점에 붙이면 동작 가능.
    • Global Light 2D가 베이스 광원 역할을 해서 Sprite-Lit들이 보임.
    • Skybox 패스가 없는 2D Renderer에서는 After Rendering Skybox 이벤트는 무의미 → 중복/불필요 Feature 제거.
  • 프로젝트 전역 일관성
    • Project Settings > Graphics/Quality 모두 같은 URP Asset을 가리키도록 통일해야 씬마다 결과가 달라지지 않음.
  • 재장전 UI 진행률
    • fillAmount = elapsed / duration 형태로 프레임마다 갱신하면 지정 초(reloadFillDuration) 만큼 자연스럽게 0→1 채움.
    • 일시정지 중에도 동작하려면 unscaledDeltaTime 사용.

🧩 학습하며 겪었던 문제점 & 에러

  1. 2D 라이트 경고로 스프라이트가 어둡게 보임
    • 문제정의: “2D renderer data must be assigned…” 경고 및 Light2D 미적용.
    • 시도: URP Asset 교체만 진행.
    • 해결방법: Create > URP > 2D Renderer 생성 → URP Asset의 Renderer List에 추가 → Renderer2D를 사용. 스프라이트는 Sprite-Lit Default 머티리얼로 교체.
    • 새롭게 알게 된 점: Sprite-Unlit/Default는 2D Light 영향을 받지 않음.
    • 다시 한다면: URP 전환 시 Renderer2D + Global Light 2D를 먼저 세팅.
  2. Renderer2D로 바꾸니 FOW가 사라짐
    • 문제정의: FOW Feature가 실행되지 않아 안개가 보이지 않음.
    • 시도: Feature를 After Rendering Skybox로 배치(효과 없음).
    • 해결방법: After Rendering Transparents로 변경, Renderer2D의 Depth/Stencil ON, Global Light 2D 추가. 중복 Feature 제거.
    • 새롭게 알게 된 점: 2D Renderer에는 Skybox 패스가 없어 해당 이벤트가 타지 않음.
    • 다시 한다면: 2D/Forward 동시 요구 시 카메라 2개 분리 전략도 초기에 고려.
  3. 컴파일 에러 – StartCoroutine에 void 전달
    • 문제정의:
    • // 잘못된 예 StartCoroutine(nowcrosshairCursor.PlayReloadUI()); // PlayReloadUI는 void
    • 해결방법: 코루틴은 내부에서 돌리고, 호출부에서는 그냥 메서드 호출
    • // 올바른 예 nowcrosshairCursor.PlayReloadUI(reloadDuration);
    • 새롭게 알게 된 점: StartCoroutine은 반드시 IEnumerator를 반환하는 메서드만 인자로 가능.
    • 다시 한다면: UI 제어용 API는 비동기 내부 관리(코루틴 포함) + 호출부는 동기 메서드로 단순화.

📝 메모

오늘은 URP 구조를 다시 탄탄히 잡은 날이었다. 처음엔 단순 경고였는데, 파이프라인 이벤트와 2D/Forward 차이를 뜯어보다 보니 구조가 훨씬 명확해졌다. 재장전 UI도 깔끔하게 돌아가고, 작은 에러를 통해 코루틴 사용 규칙을 재확인했다. 내일은 카메라 분리 전략을 샌드박스 씬에서 비교 테스트하고, 빌드 환경까지 동일 세팅을 자동화하는 스크립트도 준비해보자. 느리더라도 정확하게, 하나씩 쌓아가자.


반응형
반응형

🗓️ 오늘 하루 일정

✅ 오전

  • 09:00 ~ 13:00 : 유료 Fog of War 자산 임포트 → Universal Renderer Data(URP) Render Feature 추가, 기본 월드(FogOfWarWorld) 세팅

🍽️ 점심시간

  • 13:00 ~ 14:00 : 점심시간

✅ 오후

  • 14:00 ~ 15:00 : Quality → Render Pipeline Asset 를 새로 만든 Fog URP Asset으로 전환, 카메라 Renderer를 동일 렌더러로 지정
  • 15:00 ~ 16:00 : Depth Texture On, Render Pass Event = After Rendering Transparents로 조정 → 스프라이트 위에 포그 오버레이
  • 16:00 ~ 18:00 : Unknown Area Color A=255로 진하게, Invert FOW Off, Revealer/ Hider(PartialHider) 부착, Obstacle Layer + Collider 정리
    • 시야 각도/거리만 공개 되도록 튜닝( UnobscuredRadius=0, ViewAngle/Radius 조정 )
    • HiderDisableRenderers에 간단 페이드인/아웃 적용
    • CS0246 (Newtonsoft) 해결 — com.unity.nuget.newtonsoft-json 설치 및 asmdef 참조

🍽️ 저녁시간

  • 18:00 ~ 19:00 : 저녁시간

✅ 저녁

  • 19:00 ~ 21:00 : 저녁 스크럼 진행

✅ 오늘 학습 키워드

URP Universal Renderer Data, Render Feature, Render Pass Event, Depth Texture, Revealer/Hider/PartialHider, LOS(Obstacle Layer + Collider), UnobscuredRadius, ViewAngle/Radius, UI Overlay 카메라, MaterialPropertyBlock 페이드, Newtonsoft(Json) 패키지


✅ 오늘 학습 한 내용을 나만의 언어로 정리하기

  • URP 연결 고리는 “Quality의 URP Asset ↔ Universal Renderer Data(Render Feature) ↔ 카메라 Renderer”였다. 세 개가 같아야 게임 뷰에 보인다.
  • 스프라이트(Transparent 큐)가 포그를 덮어버릴 수 있어 포그 패스를 ‘After Transparents’ 로 옮겨 월드 위·UI 아래에 깔았다.
  • 시야 각도/거리 제어는 UnobscuredRadius=0로 근접 자동공개를 끄고, ViewAngle/Radius만 쓰니 원하는 “정면 콘” 공개가 됐다.
  • 부드러운 하이드는 렌더러 알파를 시간 보간하는 게 가장 단순하고 확실했다.
  • CS0246는 코드 문제가 아니라 패키지 미설치였다. UPM의 Newtonsoft로 정리.

🧩 학습하며 겪었던 문제점 & 에러

  • 게임 뷰에서 포그가 안 보임
    • 문제정의: 씬 뷰 OK, 게임 뷰 X
    • 시도: Render Feature 추가/Depth Texture On 했지만 변화 없음
    • 해결: Quality의 URP Asset을 Fog URP로 지정, 카메라 Renderer를 같은 Renderer Data로 변경
    • 배움: 카메라 드롭다운 목록은 Quality의 URP Asset 기준
    • 다시: 프로젝트 시작 시 Graphics/Quality/Camera 3곳을 한 번에 점검 체크리스트로 묶기
  • 바닥/플레이어가 포그에 가려지지 않음
    • 문제정의: 포그가 스프라이트 아래로 깔림
    • 시도: Render Pass 여러 타이밍 테스트
    • 해결: Render Feature After Rendering Transparents, UI는 Overlay 카메라로 분리
    • 배움: Transparent 큐 위에 덮으려면 Pass 순서가 핵심
    • 다시: UI 어두워지면 카메라 스태킹( Base+Overlay )로 분리
  • 정면이 아닌데도 하이더가 보임
    • 문제정의: 뒤쪽 오브젝트가 공개됨
    • 시도: ViewAngle/Radius만 조정
    • 해결: UnobscuredRadius = 0, LOS 레이어/콜라이더 재확인
    • 배움: UnobscuredRadius는 360° 근접 공개 트리거
    • 다시: 조준 벡터를 쓰면 GetForward() 오버라이드/자식 트랜스폼으로 정면 동기화
  • CS0246: Newtonsoft
    • 문제정의: using Newtonsoft.Json 컴파일 에러
    • 해결: com.unity.nuget.newtonsoft-json 설치, asmdef에 Unity.Newtonsoft.Json 참조
    • 배움: JsonUtility는 딕셔너리에 약함 → Newtonsoft 유지
    • 다시: 서드파티 의존은 UPM 우선, 로컬 DLL 중복 제거

📝 메모

생각보다 “패스 타이밍/파이프라인 연결”을 헷갈리고 있었다. 오늘 한 번 제대로 잡아놓으니 이후 씬에도 복붙만 하면 끝이라 마음이 놓인다. 모르는 걸 부끄러워하지 말자—확실히 기록하니 다음엔 더 빨라질 거다. 내일은 미니맵 연동과 성능(Res/Segments, Revealers Per Frame)을 손봐서 프레임을 안정화하자. 끝까지 가보자! 💪


반응형
반응형

🗓️ 오늘 하루 일정

✅ 오전

  • 09:30 ~ 11:30 : 스텔스 권총 발사 불능 재현 및 원인 추적(씬 전환 후 Shooter 활성 상태 불일치 가설 수립)
  • 11:30 ~ 12:30 : WeaponManager/WeaponInventory 코드 리딩, 인덱스/활성 상태 동기화 경로 점검

🍽️ 점심시간

  • 13:00 ~ 14:00 : 점심시간

✅ 오후

  • 14:00 ~ 16:00 : 재빌드 → 장착 파이프라인 수정(idempotent 장착 보증 설계)
  • 16:00 ~ 18:00 : 패치 적용 & 검증(강제 활성화 후 스텔스 시작 즉시 발사 확인), 디버그 로그/인스펙터 캡처 정리
  • 18:00 ~ 19:00 : Fog of War(유료) 도입 계획 초안 작성(리빌러/오클루더/미니맵 연동 설계)

🍽️ 저녁시간

  • 19:00 ~ 19:30 : 준비 및 정리

✅ 저녁

  • 19:30 ~ 20:00 : 모의면접
  • 20:00 ~ 21:00 : 팀 회의(버그 원인/해결 공유, FOW 도입 계획 개요 논의)
  • 21:00 ~ 22:00 : Fog of War 인터페이스 어댑터 구상(페이즈별 시야 반경/문 오클루전 동기화)

✅ 오늘 학습 키워드

  • 장면 재빌드 후 장착 인덱스 vs 오브젝트 활성 상태 불일치
  • idempotent 장착 보증: 같은 인덱스여도 비활성 시 재장착
  • WeaponManager ↔ Inventory 경계, 이벤트 발생 시점
  • Fog of War 신규 자산 어댑터 패턴(Revealer/ Occluder/ Renderer 분리)

✅ 오늘 학습 한 내용을 나만의 언어로 정리하기

  • 증상: 스텔스 시작 시 권총이 “장착된 것처럼” 보이지만 실제 Shooter 오브젝트가 비활성이라 발사가 안 됨. 난전 전환 시엔 다른 슬롯로 장착이 다시 트리거되어 정상 발사.
  • 원인: RebuildFromOwned() 이후 currentIndex와 목표 인덱스가 같으면 장착을 스킵하는 로직 때문에, 비활성 상태가 유지됨.
  • 해결:
    1. 재빌드 전 currentIndex = -1로 리셋
    2. ApplyPhaseWeapon()에서 같은 인덱스라도 activeSelf == false면 EquipByIndex(target)을 강제 호출하여 활성 보증
  • 부수 효과: 씬 로드시/페이즈 전환시 장착 상태가 항상 “보이는 것 = 실제 활성”로 일치.

🧩 학습하며 겪었던 문제점 & 에러

  • 스텔스 시작 시 권총 발사 불가(장착=O, 활성=X)
    • 문제정의: CurrentWeapon=권총, 탄/락 정상, 하지만 총이 발사되지 않음. 인스펙터에서 권총 Shooter가 회색(비활성).
    • 시도: 입력 차단/UI, 카메라, 탄/쿨다운, 락, 이벤트 타이밍 모두 단계적으로 배제.
    • 해결 방법(핵심 코드):
    • // RebuildFromOwned() 끝나기 전에 currentIndex = -1; // 재빌드 전 항상 리셋 // ApplyPhaseWeapon() int target = (phase == GamePhase.Combat) ? combatSlotIndex : stealthSlotIndex; if (IsValidSlot(target) && (currentIndex != target || !weaponSlots[target].gameObject.activeSelf)) EquipByIndex(target); // 같은 인덱스여도 비활성이라면 강제 장착/활성
    • 새롭게 알게 된 점: “데이터상 장착”과 “런타임 활성”은 별개다. idempotent 장착 보증이 필수.
    • 다시 만나면: 장착 파이프라인의 단일 진입점 유지, 장착 함수 내부에서 항상 활성 상태를 최종 보증.
  • Fog of War 교체 준비
    • 문제정의: 기존 AOSFogWar(커스텀) → 유료 자산 교체 시 API 의존성/좌표계(XY vs XZ) 차이.
    • 해결 방법(설계): IFogService 인터페이스로 감싸고,
      • RegisterRevealer/SetRevealerRadius/UpdateRevealer
      • RegisterOccluder/SetOccluderEnabled
      • GetFogTexture()
      • 등을 최소 표면적으로 노출. 문 열림/닫힘, 페이즈 반경 변경 이벤트에만 연결.

📝 메모

생각보다 “보이는 장착과 실제 활성의 분리”를 간과하고 있었구나. 한 줄의 보증 로직으로 게임 흐름이 훨씬 단단해졌다. 모의면접과 회의까지 빡빡했지만, 오늘의 핵심 버그를 끝까지 물고 늘어진 보람이 있었다. 내일은 FOW 어댑터를 실제 코드로 옮기고, 문/미니맵 연동까지 한 번에 끝내자. 모르는 걸 부끄러워하지 말고, 근거로 하나씩 지워 나가자.

반응형
반응형

🗓️ 오늘 하루 일정

✅ 오전

  • 09:00 ~ 10:10 : 프로젝트 구조 점검 및 목표 확정(패턴 A 적용, 도메인 경계 정리)
  • 10:10 ~ 11:20 : GunData 스펙 반영(weaponName/rpm/maxAmmo 등) + 구필드 폴백 경로 정리
  • 11:20 ~ 12:50 : 상점 연결 마무리 — StoreCanvasController 단일 경로, WeaponInventory.Buy() ↔ MoneyManager.TrySpend() 연동

🍽️ 점심시간

  • 13:00 ~ 14:00 : 점심시간

✅ 오후

  • 14:00 ~ 15:10 : 무기방 연결 — Gunimage(슬라이드 이벤트) ↔ ArmorySlotView(데이터/저장) 결합
  • 15:10 ~ 16:10 : 캐러셀 슬라이드 체감 개선(DOTween: slideDistance/초기화, 레이아웃 간섭 방지)
  • 16:10 ~ 17:00 : HoverPopup·PurchasePopup 새 스펙 호환(weaponName→displayName→name 폴백)
  • 17:00 ~ 17:30 : Shooter 초기 장전 옵션/경고 로그 추가(권총 발사 불가 케이스 안정화)
  • 17:30 ~ 18:00 : PlayerAimController NRE 가드(총 미장착·교체 타이밍) 보강

🍽️ 저녁시간

  • 18:00 ~ 19:00 : 저녁시간

✅ 저녁

  • 19:00 ~ 20:00 : 리그레션 테스트(상점→무기방→전투 흐름, 이벤트/HUD 연동 확인)
  • 20:00 ~ 20:40 : CursorManager DDOL 경고 원인 점검(루트 승격/중복 방지) + 씬 메타(GUID) 점검 가이드
  • 20:40 ~ 21:00 : TIL 정리

✅ 오늘 학습 키워드

SSoT(Owned), LoadoutProfile, WeaponManager, UnityEvent, PlayerPrefs, DOTween, RectTransform/anchoredPosition, LayoutGroup 간섭, TrySpend, GamePhase, ShooterLocked, 데이터 폴백(신·구 필드)


✅ 오늘 학습 한 내용을 나만의 언어로 정리하기

  • 상점은 소유만 바꾼다: 구매는 WeaponInventory에서 처리하고 장착은 건드리지 않는다.
  • 무기방은 선택만 저장한다: 잠입/난전 로드아웃만 LoadoutProfile에 기록한다.
  • 전투는 장착/탄약/페이즈: WeaponManager가 Owned 기반으로 Shooter 풀을 만들고 로드아웃을 적용한다.
  • UI 애니는 레이아웃과 충돌한다: DOTween 이동 시 레이아웃 컴포넌트가 좌표를 덮어쓰지 않도록 관리해야 한다.
  • 이행기엔 호환 레이어가 평화: 신·구 필드가 섞일 땐 폴백/반사로 빌드 블로커를 먼저 제거한다.

🧩 학습하며 겪었던 문제점 & 에러

1) 구매해도 돈이 안 줄어듦

  • 문제&에러에 대한 정의: 상점 구매 성공 후 잔액 미변경
  • 내가 한 시도: UI 갱신/이벤트 의심 → 로그 확인
  • 해결 방법: WeaponInventory.Buy()에서 MoneyManager.TrySpend(price) 호출(실패 시 구매 중단)
  • 새롭게 알게 된 점: 결제는 도메인 계층(Inventory)에 둬야 일관성이 유지된다
  • 이 문제&에러를 다시 만나게 되었다면: 구매 경로 단일화 + 유닛테스트로 TrySpend 호출 보장

2) 캐러셀 슬라이드가 보이지 않음

  • 문제&에러에 대한 정의: 이미지는 바뀌지만 미끄러지는 애니가 느껴지지 않음
  • 내가 한 시도: DOAnchorPos 호출/값 확인
  • 해결 방법: slideDistance 설정(300~600), OnEnable 초기화, 슬라이드 중 LayoutGroup/ContentSizeFitter 임시 비활성화
  • 새롭게 알게 된 점: 레이아웃이 RectTransform 좌표를 즉시 재배치할 수 있다
  • 이 문제&에러를 다시 만나게 되었다면: 캐러셀을 레이아웃 외부 컨테이너로 분리

3) 권총이 발사되지 않음

  • 문제&에러에 대한 정의: 스테이지 시작 직후 특정 권총만 미발사
  • 내가 한 시도: 입력/잠금/탄약 확인, 프리팹 유무 점검
  • 해결 방법: Shooter.Initialize()에서 시작 장전 보정 + bulletPrefab 누락 경고 로그
  • 새롭게 알게 된 점: 데이터 누락 대비 방어적 초기화가 디버깅 효율을 높인다
  • 이 문제&에러를 다시 만나게 되었다면: 에디터 검증 스크립트로 모든 GunData에 프리팹/탄약 자동 점검

4) PlayerAimController NRE

  • 문제&에러에 대한 정의: 장착 교체/씬 로드 타이밍에 gunPoint null
  • 내가 한 시도: Update 순서/초기화 위치 조정
  • 해결 방법: TryGetGunPoint() 널 가드 + 무기 변경 이벤트 구독
  • 새롭게 알게 된 점: 장착은 이벤트성이라 널 가드가 필수
  • 이 문제&에러를 다시 만나게 되었다면: “초기화 완료” 플래그/상태머신 도입

📝 메모

  • GunData 전수 검사: bulletPrefab·weaponSprite 누락 자동 체크(에디터 툴)
  • LoadoutProfile 저장 키 GunData.Key(id 우선, 없으면 name)로 통일 검토
  • 무기방 씬에도 WeaponManager 배치 시 즉시 장착 프리뷰 체크리스트화
  • 폴백/반사 의존은 이행 완료 후 단계적 제거(정적 참조로 단순화)
  • 캐러셀 컨테이너의 레이아웃 의존성 문서화(디자이너 협업 가이드)

반응형
반응형

🗓️ 오늘 하루 일정

✅ 오전

  • 09:30 ~ 10:00 : 상점/무기 시스템 작업 목표 정리, 씬 구조(StoreCanvas/Slots/패널) 점검
  • 10:00 ~ 11:20 : GunData 정리(PhaseTag/price/icon 확인) 및 필드 매핑 표 작성
  • 11:20 ~ 12:50 : WeaponManager 정비(AddWeapon()/슬롯 갱신) + WeaponInventory.Buy() 흐름 연결

🍽️ 점심시간

  • 13:00 ~ 14:00 : 점심시간

✅ 오후

  • 14:00 ~ 15:10 : 단일 팝업 패턴 확정(공용 PurchasePopup, HoverPopup), 슬롯은 GunData만 보유
  • 15:10 ~ 16:20 : ItemSlot.Bind(gun, hover, purchase, rightColumn) 도입, 슬롯 썸네일/텍스트 바인딩
  • 16:20 ~ 17:50 : StoreCanvasController.RefreshGrid()로 8칸 일괄 바인딩, 머니/인벤토리 이벤트 연동

🍽️ 저녁시간

  • 18:00 ~ 19:00 : 저녁시간

✅ 저녁

  • 19:00 ~ 20:00 : 오류 처리(CS1061: BindHover/BindClick 호출 제거 → Bind 통일)
  • 20:00 ~ 21:00 : 오류 처리(CS1061: weaponClass 부재 → HoverPopup.Show(GunData)·안전한 필드 읽기)
  • 21:00 ~ 21:30 : 구매 성공/실패 패널 토글 확인, 최종 리그레션 테스트
  • 21:30 ~ 22:00 : TIL 정리

✅ 오늘 학습 키워드

  • Unity UI 단일 팝업 패턴(공용 팝업 + 경량 슬롯)
  • ScriptableObject(GunData) → UI 바인딩
  • 인벤토리/머니 싱글톤 이벤트 연동
  • 컴파일 에러(CS1061) 해소 방법: 호출부 시그니처 통일·유연한 필드 접근

✅ 오늘 학습 한 내용을 나만의 언어로 정리하기

  • 팝업을 슬롯마다 두면 관리가 복잡해지니, Canvas에 팝업 1개만 두고 모든 슬롯이 그 팝업을 호출하게 만들면 단순하고 안전하다.
  • 슬롯은 데이터 보관 + 이벤트 전달만 한다. UI 채우기는 Bind(gun, ...) 한 줄로 해결하고, Hover/Click 때 공용 팝업에 GunData를 그대로 넘긴다.
  • 구매 흐름은 Money → Inventory → WeaponManager 순으로 직렬화하면 사이드이펙트가 줄고, 이벤트(OnChanged, OnInventoryChanged)만 구독해도 UI가 자동 갱신된다.
  • 필드명이 프로젝트마다 다를 수 있으므로, Hover 표시는 존재하면 표시/없으면 생략 방식으로 작성하면 재사용성이 높아진다.

🧩 학습하며 겪었던 문제점 & 에러

1) CS1061 — ItemSlot에 BindHover/BindClick이 없다

  • 문제&에러에 대한 정의
  • 컨트롤러에서 오래된 메서드(BindHover/BindClick)를 호출해 컴파일 오류 발생.
  • 내가 한 시도
  • 기존 슬롯 스크립트 점검, 함수명 검색.
  • 해결 방법
  • 호출부를 전부 slot.Bind(gun, hoverPopup, purchasePopup, isRightColumn)로 통일.
  • 새롭게 알게 된 점
  • UI 바인딩은 단일 엔트리 메서드로 묶으면 확장/유지보수에 유리.
  • 이 문제&에러를 다시 만나게 되었다면
  • PR 단계에서 호출부-선언부 시그니처 체크 리스트를 두고, 리팩터링 시 자동 교체 스크립트를 사용.

2) CS1061 — GunData에 weaponClass가 없다

  • 문제&에러에 대한 정의
  • Hover 팝업이 오래된 필드명(weaponClass)을 직접 참조.
  • 내가 한 시도
  • GunData 실제 필드 확인, 대체 가능한 값 탐색.
  • 해결 방법
  • HoverPopup.Show(GunData)에서 안전한 읽기로 phaseTag 우선 사용, 부재 시 - 표기.
  • 새롭게 알게 된 점
  • 데이터 구조가 자주 변하는 구간은 하드 참조보다 유연 접근(존재 확인 → 표시)이 안정적.
  • 이 문제&에러를 다시 만나게 되었다면
  • GunData → UI 매핑을 전용 어댑터(Mapper) 로 분리해 테스트 가능하게 만든다.

3) Hover 위치가 슬롯을 가려 이벤트가 안 먹는 이슈(간헐)

  • 문제&에러에 대한 정의
  • 팝업이 슬롯 위에 떠서 포인터가 팝업에 걸려 OnPointerExit가 지연.
  • 내가 한 시도
  • 한 프레임 지연 코루틴, RaycastTarget 해제.
  • 해결 방법
  • yield return null + HoverPopup 텍스트/이미지의 Raycast Target 해제.
  • 새롭게 알게 된 점
  • UI 레이어 겹침은 레이캐스트 옵션으로 간단히 해결 가능.
  • 이 문제&에러를 다시 만나게 되었다면
  • 필요 시 별도 Canvas(Order↑) 또는 anchoredPosition 계산으로 위치 정확도 개선.

📝 메모

  • 상점 목록: WeaponInventory.GetShopList(showOwned:false)로 미소유만 노출 → 구매 후 자동 갱신.
  • 슬롯 우측열 팝업 위치: isRightColumn 기준으로 offset.x 부호 반전.
  • 다음 작업 후보: 탭 필터(Any/Stealth/Combat), Owned 배지/버튼 비활성화, 저장/로드(머니·인벤토리).

반응형
반응형

🗓️ 오늘 하루 일정

✅ 오전

  • 09:00 ~ 13:00 : Unity Analytics Funnels 동작 방식 확인 및 퍼널 설계 초안 정리

🍽️ 점심시간

  • 13:00 ~ 14:00 : 점심시간

✅ 오후

  • (시간 미기록) : Enemy.Die()에 아이템 드랍 확률 30% 로직 추가 및 테스트
  • (옵션) 인스펙터에서 조절 가능한 itemDropChance 필드 설계

🍽️ 저녁시간

  • 18:00 ~ 19:00 : 저녁시간

✅ 저녁

  • 19:00 ~ 21:00 : 팀 회의 — 진행 상황 공유, 튜토리얼 이벤트(tutorial_start/end) 수집 현황 및 퍼널 관측 포인트 논의, 드랍률 데이터 검증 계획 수립

✅ 오늘 학습 키워드

Unity Analytics(UGS), Funnels, Event Manager, Custom Events(tutorial_start, tutorial_end), Drop Rate(확률 드랍), Random.value, C#


✅ 오늘 학습 한 내용을 나만의 언어로 정리하기

  • UGS Funnels는 레트로액티브(과거 데이터 기반) 분석 가능하므로, 퍼널을 미리 만들 필요가 없다. 이벤트가 정의되어 있고 실제로 쌓이고 있다면, 이후에 퍼널을 만들어 기간 필터로 바로 확인할 수 있다.
  • 드랍률은 Random.value <= 0.3f 형태로 간단히 적용 가능하며, **인스펙터 노출(itemDropChance)**로 운영 중에도 난이도/경제 밸런스에 맞춰 손쉽게 튜닝할 수 있다.
  • 퍼널 설계 초안: AppStart → tutorial_start → tutorial_end → first_mission_start 로 구성해, 튜토리얼 내 이탈 지점을 빠르게 파악한다.

🧩 학습하며 겪었던 문제점 & 에러

  • 적 사망 시 아이템이 항상 드랍되는 문제
    • 문제정의: 드랍 아이템이 100% 생성되어 인게임 경제가 과하게 풀림.
    • 시도: 조건 분기 + 확률 기반 로직 추가, 인스펙터에서 가변 설정.
    • 해결(코드):
    • [SerializeField, Range(0f, 1f)] float itemDropChance = 0.3f; // ... if (dropItems != null && Random.value <= itemDropChance) { Vector3 dropPos = transform.position + Vector3.up * 0.2f; GameObject ob = Instantiate(dropItems, dropPos, Quaternion.identity); var item = ob.GetComponent<Item>(); if (item != null && WeaponManager.Instance.CurrentWeaponIndex == 0) item.ammoAmount = 12; }
    • 새롭게 알게 된 점: 확률 드랍 테스트는 표본 수가 적으면 체감 오차가 크다. 여러 웨이브/스테이지를 합산해 평균값으로 검증해야 한다.
    • 다시 만나면: 드랍 로그(시드/확률/결과)를 주간 리포트로 수집해 실제 드랍률이 설정값(30%)에 수렴하는지 검증한다. 필요 시 앱 버전/스테이지/난이도별로 분리 분석.
  • 퍼널을 미리 만들어야 하는지에 대한 의문
    • 문제정의: 퍼널 선제 생성 필요 여부 및 적용 타이밍.
    • 해결: 이벤트 정의/수집이 우선, 퍼널은 사후 생성해도 과거 데이터로 분석 가능. 기간/플랫폼/앱 버전 필터로 Slice & Dice.
    • 새롭게 알게 된 점: 이벤트 스키마(stage_id, tutorial_id, app_version)를 처음부터 일관되게 잡아야 이후 분석이 수월하다.
    • 다시 만나면: 대시보드 처리 지연을 고려해 하루 단위로 지표를 확인하고, 퍼널 스텝에 파라미터 필터를 추가해 구간별 이탈을 더 선명하게 본다.

📝 메모

  • Event Manager에 tutorial_start, tutorial_end 파라미터 확정: stage_id, tutorial_id, app_version.
  • 퍼널 저장 후 드롭오프 구간 확인(튜토 시작→종료), 내일 오전 기간 필터를 넉넉히 잡아 재확인.
  • 드랍률은 당분간 0.30 유지, 주간 합산 표본 100건↑ 시 평균/표준편차 보고.

https://nextthewat.itch.io/black-chamber

 

Black Chamber by NextTheWAT

 

nextthewat.itch.io

배포한 이번 게임!

반응형