Loading the catalog…
Loading the catalog…
[Outbreak Breaker] 스테이지 타임라인 시스템 확장, 일시정지 메뉴 로직 연결, GA 폴더 정리 오늘은 커밋 세 개를 올렸다. 어제 레이아웃까지 만들어둔 일시정지 메뉴에 실제 로직을 붙였고, GameplayAbility 애셋 폴더 구조를 미리 정리했고, 가장 크게는 스폰 매니저를 BGM/아이템까지 포괄하는 통합 타임라인 시스템으로 확장했다. 1. GameplayAbility 애셋 폴더 구조 정리 본격적으로 무기별 특수 스킬을 늘려나가기 전에 어빌리티 폴더부터 정리했다. GA_ForcedMovement 를 GA_Knockback 으로 리네임했다. 넉백이랑 끌어당기기(풀)를 나중에 분리할 계획이라, 이름부터 역할을 명확히 해두는 게 맞다고 판단했다. 끌어당기는 쪽은 나중에 "블랙홀" 같은 연출의 별도 GA로 만들 예정이다. GameplayAbilites/ 밑에 CC/ (GA_Stun, GA_Knockback)랑 Player/ (GA_Dodge) 폴더를 새로 만들어서 분류했다. 무기 공용으로 쓰는 GA_Weapon_Equip 은 Weapon 폴더 루트에 그대로 두고, 무기별로 GravityHammer/ , PlasmaRifle/ , SpreadShotgun/ , DefenseDrone/ , MagnetMine/ 서브폴더를 새로 만들어서 각 무기의 Active/Passive 어빌리티를 담았다. 지금 당장 쓰는 건 아니지만, 나중에 무기별 "선택 상태" 전용 특수 스킬을 추가할 때 자리가 미리 있어야 헷갈리지 않을 것 같아서 먼저 손봐뒀다. 2. 일시정지 메뉴 로직 연결 및 키 리바인딩 안전장치 어제 만든 레이아웃 기준으로 실제 토글 로직을 붙였다. UOBOverlayWidgetController::TogglePauseMenu() 를 추가해서, 위젯이 이미 떠 있으면 제거 + 게임/BGM 언폰즈, 없으면 생성 + 게임/BGM 폰즈를 처리하도록 했다. 생성 시 Z-Order는 10으로 깔아서, 그 위에 뜨는 설정 창(Z-Order 20)이 항상 일시정지 메뉴보다 위에 보이도록 했다. IA_PauseMenu 인풋 액션에 "Trigger When Paused"를 켜서, 게임이 멈춰 있어도 ESC 입력이 제대로 들어오도록 했다. EOBOverlayWidgetType 에도 PauseMenu 항목을 추가했다. 겸사겸사 키 리바인딩 안전장치도 추가했다. UOBGameSettings::LockedKeys (Escape, Tab, LeftCommand, Tilde, LeftAlt)랑 IsKeyLocked() 를 만들어서 RebindKey() 맨 앞에서 체크하게 했다 — 다른 액션을 이 예약된 키들로 리바인딩하지 못하게 막는 용도다. Pause 액션 자체는 Player Mappable Key Settings에 등록돼 있지 않아서 리바인딩 UI에는 애초에 노출되지 않는데, 이번 보호 로직은 그것과는 별개로 "다른 액션이 예약된 키를 가로채는 것"을 막는 데 집중한 거다. 계속하기/설정/타이틀로 돌아가기/게임 종료 네 항목 전부 로직 연결은 끝냈다. UI 쪽은 일단 지금 쓰던 기본 UMG 방식 그대로 두고, 나중에 CommonUI를 기존에 쓰던 MVVM 패턴이랑 합쳐서 적용할 계획이라 그 부분만 미정이다. 3. 스폰 매니저 → 스테이지 타임라인 시스템으로 확장 (오늘 제일 크게 건드린 부분) AOBSpawnManager 를 AOBStageTimelineManager 로 리네임하면서 역할 자체를 확장했다. 기존엔 적 스폰만 담당하던 걸, BGM 스케줄이랑 아이템 스폰까지 포괄하는 시간 기반 중앙 타임라인으로 바꿨다. 핵심은 TotalElapsedTime 이라는 클럭 하나를 적 스폰/BGM/아이템 타임라인이 전부 공유한다는 것 — 세 타임라인이 서로 다른 시계를 쓰면서 미묘하게 어긋나는 걸 원천적으로 방지하는 설계다. BGM 스케줄 : FRuntimeBGMRow (TriggerTime + BGMType + bTriggered)를 만들어서 지정 시점에 BGM이 딱 한 번만 발동하도록 했다. CheckBGMTimelineLoop() 에서 매 틱 테이블을 돌면서 조건을 체크한다. 기존엔 HandleGameStart() 에서 고정적으로 Zone1 BGM을 트는 식이었는데, 이제는 테이블 기반으로 시점별 BGM 전환을 데이터로 관리할 수 있다. 아이템 스폰 : FRuntimeItemSpawnRow (StartTime + SpawnAmount)로 시점/수량을 정하고, 실제 아이템 종류는 FOBItemSpawnEntry (ItemPoolTag + Weight) 가중치 랜덤 풀에서 누적합 방식으로 뽑는다( GetRandomItemPool() ). 적 스폰과 아이템 스폰이 좌표를 뽑는 로직이 사실상 똑같아서, GetRandomSpawnLocation(UsedIndices) 로 공용 함수화했다. "같은 웨이브 안에서 좌표가 완전히 겹치는 것만 회피" 하는 로직을 그대로 재사용. 스테이지별 데이터 구성(스폰 테이블/BGM 테이블/아이템 테이블/아이템 풀)은 FOBStageTimelineData 구조체 하나로 묶어서 UOBGameSettings::StageTimelineMap ( TMap<EOBLevelType, FOBStageTimelineData> )에 데이터 기반으로 등록했다. AOBGameModeBase::GetSelectedStageType() 게터를 추가해서, InitializeStageTimelineManager() 에서 현재 스테이지에 맞는 테이블/풀을 Settings에서 가져와 캐싱하고 3개 테이블 전부 bTriggered / LastSpawnTime 을 리셋하도록 했다. DataTable Row 전용 구조체( FRuntimeBGMRow , FRuntimeItemSpawnRow 등)는 OBStageTimelineRows.h 로 따로 분리했다. Settings 쪽이 알 필요 없는, 매니저 내부에서만 쓰는 타입이라 분리해두는 게 맞다고 판단. 리네임 작업 자체는 CoreRedirect를 쓰는 대신, 레벨에 배치된 기존 액터를 지우고 새 클래스로 다시 배치하는 방식으로 처리했다. 덤으로 EOBBGMType BGMType 필드가 초기화 안 돼 있어서 에디터 시작할 때마다 뜨던 EnumProperty 에러도 기본값(Title)을 명시해서 같이 고쳤다. 다음에 할 것 일시정지 메뉴 UI는 지금 UMG 방식 그대로 유지하다가, CommonUI를 기존 MVVM 패턴이랑 합쳐서 적용할 예정이라 시기는 미정 스테이지 타임라인 시스템 기반으로 실제 Stage1 데이터(BGM 스케줄, 아이템 스폰 타이밍) 밸런싱 테스트 젬 경험치 레이스 컨디션은 계속 인게임에서 재발 여부 확인 중
What RADAR observed and classified to build this opportunity. It is what the source published, not a verification that the offer is still active.
[Outbreak Breaker] 스테이지 타임라인 시스템 확장, 일시정지 메뉴 로직 연결, GA 폴더 정리. [Outbreak Breaker] 스테이지 타임라인 시스템 확장, 일시정지 메뉴 로직 연결, GA 폴더 정리 오늘은 커밋 세 개를 올렸다. 어제 레이아웃까지 만들어둔 일시정지 메뉴에 실제 로직을 붙였고, GameplayAbility 애셋 폴더 구조를 미리 정리했고, 가장 크게는 스폰 매니저를 BGM/아이템까지 포괄하는 통합 타임라인 시스템으로 확장했다. 1. GameplayAbility 애셋 폴더 구조 정리 본격적으로 무기별 특수 스킬을 늘려나가기 전에 어빌리티 폴더부터 정리했다. GA_ForcedMovement 를 GA_Knockback 으로 리네임했다. 넉백이랑 끌어당기기(풀)를 나중에 분리할…
Open source