[UE5] DataTable, AudioComponent 함수

HyeonjungYun·2025년 5월 8일

언리얼 기초

목록 보기
23/23

문제 상황

게임 인스턴스 서브 시스템으로 오디오 서브 시스템을 구성하는 도중에 DataTable에서 행을 찾고 배열에 등록하는 함수와 AudioComponent로 사운드를 재생시키는 함수가 필요함

DataTable함수

FindRow

// UDataTable.h 
template<typename RowStructType>
const RowStructType* FindRow(
    const FName& RowName,
    const FString& ContextString,
    bool bWarnIfMissing = true
) const;
  • RowStructType
    - 데이터테이블이 사용할 구조체 타입
    - 이 타입은 USTRUCT(BlueprintType)으로 선언되어 있어야 하며, UDataTableRowStruct속성으로 지정된 UScriptStruct와 일치해야 한다.
  • RowName(const FString&)
    - 함수 호출 맥락을 설명하는 임의의 문자열
    - 로그에 이 문자열이 포함되어, 문제 발생 시 디버깅에 도움을 줌
    - 보통 TEXT("PlayBGM AudioSubsystem")처럼 클래스 함수명을 적어줌
  • bWarnIfMissing(bool, 기본값 true)
    - 지정한 RowName이 데이터 테이블에 없을 때, UE_LOG(Warning)를 띄울지 여부를 결정
    - false로 하면 경고 로그 없이 nullptr만 반환

-> 행 존재 여부를 검사 후 존재하면 포인터를 반환

AudioComponent 함수

CreateSound2D

언리얼 엔진의 UGameplayStatics에 정의된 유틸리티로, 2D(비거리감쇠) 사운드를 재생하기 위해 UAudioComponent를 동적으로 생성하고 반환해 줍니다. 반환된 컴포넌트를 통해 재생, 중지, 볼륨·피치 조절 등 세밀한 제어가 가능합니다.

static UAudioComponent* CreateSound2D(
    UObject*             WorldContextObject,
    USoundBase*          Sound,
    float                VolumeMultiplier               = 1.0f,
    float                PitchMultiplier                = 1.0f,
    float                StartTime                      = 0.0f,
    USoundAttenuation*   AttenuationSettings           = nullptr,
    bool                 bPersistAcrossLevelTransition = false,
    bool                 bAutoDestroy                   = true
);
  • WorldContextObject
    - 월드 컨텍스트를 제공할 객체. 보통 thisGetWorld()
  • Sound
    - 재생할 USoundBase에셋, 널이거나 유효하지 않으면 컴포넌트도 생성되지 않습니다.
  • VolumeMultiplier
    - 기본 볼륨에 곱해질 배율 (0.0 ~ ...)
  • PitchMultiplier
    - 피치 배율(1.0이 기본)
  • StartTime
    - 재생 시작 지점(초)
  • AttenuationSettings
    - 거리 감쇠 설정. 2D 사운드에는 일반적으로 nullptr
  • bPersistAcrossLevelTransition
    - 레벨 전환 시에도 컴포넌트를 유지할지 여부.
  • bAutoDestroy
    - 사운드 재생이 끝난 뒤 컴포넌트를 자동 파괴할지 여부

내부동작

  1. 컴포넌트 생성
    • NewObject<UAudioComponent>(WorldContextObject)형태로 UAudioComponent인스턴스를 만든다.
  2. 프로퍼티 설정
    • SetSound(Sound), 볼륨-피치-시작시간-감쇠설정 등을 세팅
  3. 월드에 등록
    • AudioComponent->ResisterComponent()호출로 씬(월드)에 붙입니다.
  4. 반환
    • 호출부에서 Play()를 직접 호출하거나, bAutoActive=true시점에 자동 재생
profile
게임 프로그래머 공부

0개의 댓글