내일배움캠프-언리얼

TIL - 96

이시보 2026. 6. 30. 21:37

검방패 사운드 작업 정리

0. 한 줄 요약

검방패 콤보어택 스윙 사운드를 랜덤 큐 + 몽타주 노티파이로 구현·검증 완료
히트음/설정볼륨연동/CastSound/소환액터음은 방식 확정 후 보류 또는 진행 예정.


1. 완료된 작업 (monolith로 적용·저장·검증)

1-1. 랜덤 Sound Cue 2개 생성 — /Game/Retrieve/Audio/SwordShield/

구성 변조
SC_SSH_ComboSwing (스윙) SW_Whoosh_Metal_4-1/2/3/5/7 → Random Pitch 0.91.1, Vol 0.851.0, Randomize Without Replacement
SC_SSH_SwordHit (히트) SW_Sword_Hit_1-1/3/4 + SW_Generic_Hit_1-1/4 → Random Pitch 0.921.08, Vol 0.91.0
  • 원본 wav 위치: Content/External/NaPH_RPG_Fantasy_Sounds_Bunle/Weapons_and_Combat/wav/
  • 구조: WavePlayer(N) → Random → Modulator → Output
  • 큐 안에는 cue(SC_)가 아니라 wav(SW_)를 넣음. cue = 레시피(랜덤/변조), wav = 재료.

1-2. 스윙 노티파이 9개 배치 (3 몽타주 × 콤보 3타)

  • Play Sound 노티파이를 각 콤보 타의 슬래시 VFX(PlayNiagaraEffect)와 같은 시점, SlashEffect 트랙에 배치 → SC_SSH_ComboSwing 연결
몽타주 스윙 시점(초)
AM_SSH_WindComboAttack 0.352 / 2.141 / 3.645
AM_SSH_FireComboAttack 0.344 / 2.125 / 3.641
AM_SSH_WaterComboAttack 0.810 / 2.166 / 3.977
  • 검증: find_audio_references(SC_SSH_ComboSwing) → 위 3개 몽타주 모두 참조 확인 ✅

2. 핵심 아키텍처 (참고)

콤보 사운드 = 2개 레이어 (기존 VFX 패턴과 동일):

  • 스윙(휘두르기) → 콤보 몽타주의 Play Sound AnimNotify (= 슬래시 VFX와 같은 위치)
  • 히트(타격)GCN_Hit_Impact GameplayCue (= 히트 VFX와 같은 위치)

콤보 구동: GA_AttackFWeaponComboStep.SectionName별로 몽타주 섹션을 따로 재생.
→ 노티파이는 반드시 해당 섹션 시간 범위 안에 있어야 그 타에서 울림.


3. 남은 작업 (TODO)

3-1. 히트음 — GCN_Hit_Impact에 연결 (보류: 읽기전용)

  • GCN_Hit_Impact (/Game/Retrieve/AbilitySystem/GameplayCues/), 타입 GameplayCueNotify_Static, tag GameplayCue.Combat.Hit
  • Burst Sounds 배열이 없는 타입 → OnExecute 그래프에 Play Sound at Location 노드 추가 필요
    • Sound = SC_SSH_SwordHit
    • Location = 기존 NS_Hit_Impact(Spawn System at Location)가 쓰는 위치 핀과 동일하게 연결 (보통 Parameters.Location)
  • 막힌 이유: GCN_Hit_Impact.uasset읽기전용 → 해제 후 진행 (attrib -r 또는 속성창)

3-2. 설정 볼륨(SFX 슬라이더) 연동 — 미설정 상태

  • 현재 ApplyAudio()는 SoundMix + SoundClass override 방식인데 SoundMix/SoundClass 애셋이 프로젝트에 미할당Master 슬라이더만 작동, SFX 등 개별 채널은 무효
  • 연동하려면:
    1. SoundMix 1개 + SoundClass 계층 생성 (Master 루트 → SFX/Music/Ambience/UI/Voice 자식)
    2. Project Settings → Game → "Retrieve Settings"에서 SettingsSoundMix / 각 채널 SoundClass 할당
    3. 큐들(SC_SSH_ComboSwing/SC_SSH_SwordHit/SC_SSH_HeavySwing)의 Sound Class = SFX로 지정
  • 코드 위치: Source/Retrieve/Settings/RetrieveSettingsSubsystem.cpp (ApplyAudio), RetrieveSettingsConfig.h

3-3. CastSound — 미연결(dead field)

  • FSkillCombination::CastSound(RetrieveDataTableTypes.h:857), FWeaponHeavyAttack::CastSound(:1331) 둘 다 코드에서 안 읽힘
  • BeginBurstSkill(Row)이 9개 필드만 복사하고 CastSound는 복사 안 함 → 데이터 넣어도 무동작
  • 살리려면 ①C++: BeginBurstSkill에 아래 추가(재컴파일 필요), 또는 ②시전 몽타주에 AnimNotify
    if (USoundBase* Cast = Row->CastSound.LoadSynchronous())
        if (const AActor* O = GetOwner())
            UGameplayStatics::PlaySoundAtLocation(O->GetWorld(), Cast, O->GetActorLocation());
  • 참고: FBurstHitInstance::HitSound(per-hit)는 이미 작동 중(PlayerBurstComponent.cpp:400)

3-4. 소환 액터(WorldSpawnActor) 사운드 → 액터 BP에 (몽타주 아님)

  • 이유: 월드 액터는 Owner + 정면*WorldSpawnDistance(플레이어에서 떨어진 곳)에 스폰됨. 몽타주 노티파이는 캐릭터 위치에서 울려 위치가 틀림. BurstWorldActorBase 설계도 "비주얼은 BP 자식 SceneRoot 아래 추가".
  • 방법(에디터, WorldSpawnActorClass가 가리키는 BP):
    • 권장: Audio Component 추가(SceneRoot 아래), Sound=큐, Auto Activate=true → 스폰 위치에서 재생·따라다님·파괴 시 자동정지
    • 또는 일회성: Event BeginPlay → Play Sound at Location (Location=GetActorLocation)
  • 퇴장(가라앉기)음은 BeginSink가 private C++라 BP 훅 불가 → 필요시 별도 C++ 노출

4. 트러블슈팅

4-1. BP_FFF_WorldActor 저장 에러 (RF_Standalone 누락)

  • 에러: ... does not have any of the provided object flags (0x10000002)
  • 의미: BP 오브젝트에 RF_Standalone(0x2) / RF_HasExternalPackage(0x10000000) 둘 다 없음 → 최상위 애셋으로 인식 안 돼 저장 거부. (자동화/복제로 생성된 BP에서 흔함)
  • 해결 A(작업 유지): 에디터 콘솔에 save.FixupStandaloneFlags 1 입력 → 저장(Ctrl+S). 한 번 저장되면 영구 수정. (안 먹으면 -dpcvars=save.FixupStandaloneFlags=1 인자로 재실행)
  • 해결 B(확실): 깨진 BP 삭제 → BurstWorldActorBase 부모로 Blueprint Class 재생성 → 컴포넌트 재추가

5. 주의/리마인더

  • ⚠️ 사운드 번들 Content/External/NaPH_RPG_Fantasy_Sounds_Bunle/git 미추적 → 새 큐가 이 wav 참조하므로 번들 커밋(또는 팀 공유) 필수, 안 그러면 팀원 쪽 참조 깨짐
  • 새 큐는 추적 경로 Content/Retrieve/Audio/SwordShield/에 저장됨
  • Wind 몽타주에 빈 Sound 트랙 잔재 가능(첫 시도 부산물, 무해)
  • 스윙음이 슬래시와 동시 재생 — 더 "치고 나가는" 느낌 원하면 노티파이 1~2프레임 앞당김

'내일배움캠프-언리얼' 카테고리의 다른 글

TIL - 98  (0) 2026.07.02
TIL - 97  (0) 2026.07.01
TIL - 95  (0) 2026.06.29
TIL - 94  (0) 2026.06.26
TIL - 93  (0) 2026.06.23