내일배움캠프_Unreal/TIL

내일배움캠프_Unreal/TIL - Day 153 (260710)

하임 2026. 7. 10. 23:26

밸런싱·캔슬·개발 편의 — 감도 단순화 · 스태프 프레일티 · PIE 인트로 스킵


1. 감도 옵션 단순화 — 배타 모드를 걷어내고 X/Y만

마우스 감도에 통합/세부 배타 모드가 들어가 있었다(통합=단일 값, 세부=X/Y 따로). 그런데 직접 눌러보니 "슬라이더 하나냐 둘이냐"를 고르자고 모드 플래그 + BP 통지 + 슬라이더 회색 처리 + 전용 핸들러 둘이 붙어 있었다. 기능 대비 UI·코드 표면이 과했다.

정작 필요한 건 X/Y를 따로 만지는 것뿐이라, 통합 경로(bUseUnifiedSensitivity, 단일 MouseSensitivity, 그 클램프, 모드 핸들러)를 통째로 지우고 축별 값만 남겼다.

// 곱셈도, 모드 분기도 없이 축별 값 그대로.
const float SensitivityX = Settings ? Settings->MouseSensitivityX : 1.f;
const float SensitivityY = Settings ? Settings->MouseSensitivityY : 1.f;

교훈: 선택지를 하나 더 주는 것보다, 정말 필요한 최소 UI로 수렴하는 게 낫다. 옵션이 단순해지고 감도 로직에서 분기가 통째로 사라졌다.


2. PIE 인트로 스킵 개발자 모드 — 플래그를 둘로 분리

밸런싱은 붙였다 껐다를 수십 번 반복하는 일인데, PIE를 누를 때마다 메인 메뉴 → 진입 로딩 → 오프닝 시네마틱을 매번 통과해야 했다. 부팅 스킵 플래그가 하나 있었지만(bSkipMainMenuOnBoot) 로딩·시네마틱까지는 못 건너뛰었다.

그래서 개발자용 스킵을 한 단계 더 두는 쪽으로 플래그를 둘로 나눔.

if (bDeveloperSkipIntroFlow || bSkipMainMenuOnBoot)
{
    if (ARetrievePlayerController* RetrievePC = Cast<ARetrievePlayerController>(GetWorld()->GetFirstPlayerController()))
        RetrievePC->SetDeveloperSkipIntroFlow(bDeveloperSkipIntroFlow);   // → bSkipEntryLoadingScreen
    BootstrapNewGameQuest();
    GS->TransitionTo(ERetrieveSessionState::InGame);
}
  • bDeveloperSkipIntroFlow메뉴·진입 로딩·오프닝 시네마틱 전부 건너뛰고 바로 인게임. PC에 "진입 로딩 스킵"까지 전달.
  • bSkipMainMenuOnBoot — 메뉴만 건너뛰고 진입 로딩 화면은 남김.
  • 기본값 true → false로 하향: 스킵은 개발 편의지 기본 동작이면 안 되니, 실수로 켠 채 빌드가 나가는 걸 막음.

이 하나로 밸런싱 이터레이션 속도가 체감으로 확 붙었다. 개발 편의 플래그는 명시적으로 켤 때만 동작하게 둔다.


3. 전체 스탯 밸런싱 + 스태프 프레일티

DT_CharacterStats를 훑으며 캐릭터 전반 스탯을 맞췄다. 손이 오래 간 건 스태프. 스태프는 원거리라 근접보다 안전한데, 데미지·자원까지 편하면 사실상 상위호환이 돼버린다.

"안전한 대신 무르다"는 트레이드오프를 만들기로 하고, 스태프를 들면 최대 체력이 깎이는 프레일티 효과(GE_StaffFrailty)를 만들어 스태프 어빌리티 세트(DA_AbilitySet_Staff)가 패시브로 부여하게 했다.

  • 수치가 아니라 무기 선택 자체에 리스크를 붙이는 방향 → 스태프 데미지를 조금 세게 줘도 "무른 대신 강한" 원거리로 균형.
  • GE를 어빌리티 세트에 실어 데이터로 부여하니, 밸런스가 또 틀어져도 GE 값만 만지면 됨.

4. 동작마다 캔슬 타이밍과 효과음

강공·흡수(Absorb)·버스트 몽타주를 돌려보며 캔슬 지점과 재생 배속(Play Rate)을 다시 잡았다.

  • 후딜이 길어 답답한 동작은 캔슬 창을 앞당기고, 너무 빨리 끊겨 손맛이 없던 건 늦췄다.
  • 각 동작에 맞는 효과음도 몽타주 노티로 함께 걸어, 데미지 배율·소리·캔슬을 한 사이클에서 같이 맞춤.
  • 특히 버스트/콤보는 "버스트로 콤보를 끊고 다시 콤보로 잇는" 흐름이 어색하지 않게 창을 조율.

비교 정리

구분 ❌ Before ✅ After
감도 옵션 통합/세부 배타 모드(플래그·통지·핸들러) 축별 X/Y만(분기 제거)
PIE 인트로 매번 메뉴·로딩·시네마틱 통과 bDeveloperSkipIntroFlow로 전부 스킵
부팅 스킵 기본값 true(스킵 켜짐) false(명시적으로 켤 때만)
스태프 밸런스 원거리 + 준수한 스탯(상위호환) GE_StaffFrailty로 최대 체력 감소(리스크)
동작 캔슬 고정 후딜/배속 동작별 캔슬 창·배속·효과음 조율

핵심 요약

  • 감도는 배타 모드를 걷어내고 축별 X/Y만 — 선택지를 늘리기보다 필요한 최소 UI로 수렴, 로직 분기 제거.
  • bDeveloperSkipIntroFlow로 메뉴·로딩·시네마틱을 통째로 스킵, 부팅 스킵 기본값은 false로 내려 실수 방지 → 밸런싱 이터레이션이 빨라짐.
  • 스태프는 수치가 아니라 무기 선택에 리스크(GE_StaffFrailty 최대 체력 감소)를 붙여 원거리 우위를 상쇄, GE라 데이터로 재조정 가능.
  • 캔슬은 동작별로 창·배속·효과음을 한 사이클에서 조율 — 값·노티 중심이라 반복 튜닝이 쉽다.