Delegate

2025. 1. 23. 17:51·내배캠/Unreal Engine

Delegate

 

언리얼 엔진의 이벤트 시스템에서 사용되는 핵심 요소이다.

다른 엔진이나 언어의 Call Back과 유사한 개념으로, 특정 이벤트가 발생했을 때, 호출할 함수를 미리 등록해놓는 메커니즘이다.

 

Delegate에 바인딩할 때, AddDynamic으로 런타임에 동적으로 등록하려고 한다면 등록 함수가 엔진의 리플렉션 시스템을 사용하여 객체와 연결되어 있어야 하기 때문에, 반드시 UFUNCTION( ) 으로 선언되어야 한다.

또한 AddDynamic은 UObject 기반의 클래스에서만 사용 가능하다.

 

그렇다면 왜 런타임에 동적으로 등록할까?

객체는 게임이 시작하고나서 동적으로 생성될 수 있다. 이런 경우에 객체의 특정 이벤트를 처리하기 위해서는 Delegate를 동적으로 연결해야한다.

 

AddDynamaic은 런타임에 객체의 유효성을 확인하기 때문에, 객체가 소멸되었더라도 Delegate 호출을 안전하게 처리하여 런타임 에러를 방지한다.

 

서술하다보니 AddDynamic에 대해서만 이야기 하였는데, 그 밖에도 AddLambda(람다식으로 간단한 로직일 경우), AddUFunction(Blueprint에서 작성된 함수나 다른 UFUNCTION을 등록), AddStatic(static함수 등록) 등이 있다.

 

Delegate가 사용하는 함수의 인자 순서, 시그니처는 반드시 Delegate 정의와 일치해야한다.
순서가 다르거나 시그니처가 일치하지 않으면 컴파일에러가 발생하는데, 많은 인자가 들어가기때문에 아래 사진과 같이 해당 Delegate의 정의 부분에 가서 시그니처를 가져오면 빠르게 사용할 수 있다.

 

*OnComponentBeginOverlap 예시

DECLARE_DYNAMIC_MULTICAST_SPARSE_DELEGATE_FourParams( FComponentEndOverlapSignature, UPrimitiveComponent, OnComponentEndOverlap, UPrimitiveComponent*, OverlappedComponent, AActor*, OtherActor, UPrimitiveComponent*, OtherComp, int32, OtherBodyIndex);

 

 

 


 

 

Actor와 관련된 주요 Delegate:

  • OnActorBeginOverlap: 다른 액터가 이 액터의 콜리전 영역에 진입했을 때 호출
  • OnTakeAnyDamage: 액터가 데미지를 받을 때 호출

 

Component와 관련된 주요 Delegate:

  • OnComponentBeginOverlap: 컴포넌트가 다른 액터 혹은 컴포넌트와 충돌 영역에서 곂칠 때 호출 (UBoxComponent, USphereComponent, UCapsuleComponent 등)
  • OnComponentHit: 컴포넌트가 다른 물체와 실제 충돌했을 때 호출
  • OnBeginCursorOver: 마우스 커서가 컴포넌트 위로 올라갔을 때 호출 (UI 및 상호작용 요소에 유용)

 

 

Animation과 관련된 주요 Delegate:

  • OnMontageBlendingOut: 몽타주 애니메이션이 끝나기 직전에 호출
  • OnMontageEnded: 몽타주 애니메이션이 끝난 후 호출
  • OnAnimationFinished: 애니메이션 시퀀스가 끝난 후 호출

 

 

Timer와 관련된 주요 Delegate:

  • FTimerHandle을 이용한 Delegate: 일정 시간 이후 호출 (네 번째 인자를 true로 설정하면 반복적으로 호출)
GetWorld()->GetTimerManager().SetTimer(TimerHandle, this, &AActor::Function, 3.0f, false);

 

 

 

UI와 관련된 주요 Delegate:

  • OnClicked: 버튼이나 클릭 가능한 UI 요소가 클릭되었을 때 호출
  • OnValueChanged: 슬라이더나 입력 필드의 값이 변경되었을 때 호출

 

 

 

Network와 관련된 주요 Delegate:

  • OnRep_Variable: 리플리케이션된 변수의 값이 변경되었을 때 호출
UPROPERTY(ReplicatedUsing = OnRep_Health)
float Health;

UFUNCTION()
void OnRep_Health()
{
    // Health가 변경되었을 때의 로직
}

 

  • OnPostLogin: 새로운 플레이어가 서버에 접속했을 때 호출
void AGameMode::PostLogin(APlayerController* NewPlayer) override
{
    Super::PostLogin(NewPlayer);
    
    // 새로운 플레이어 처리 로직
}

 

 

 

 

'내배캠 > Unreal Engine' 카테고리의 다른 글

DataTable 만들기(CSV, Unreal)  (0) 2025.01.27
인터페이스 기반 아이템 클래스 구현_1_인터페이스 설계  (0) 2025.01.27
UPrimitiveComponent  (0) 2025.01.23
Animation Blueprint로 캐릭터 애니메이션 구현  (0) 2025.01.23
FMath::Sin 함수 사용해서 부유하는 느낌의 플랫폼 만들기  (0) 2025.01.22
'내배캠/Unreal Engine' 카테고리의 다른 글
  • DataTable 만들기(CSV, Unreal)
  • 인터페이스 기반 아이템 클래스 구현_1_인터페이스 설계
  • UPrimitiveComponent
  • Animation Blueprint로 캐릭터 애니메이션 구현
동그래님
동그래님
  • 동그래님
    개발자 동그래
    동그래님
  • 전체
    오늘
    어제
    • 분류 전체보기 (210)
      • 공부 (51)
        • Code Cata (50)
      • 내배캠 (151)
        • TIL (50)
        • C++ (37)
        • Unreal Engine (48)
        • GAS(Gameplay Ability System.. (16)
      • Project (7)
        • Gunfire Paragon (5)
        • Arena Fighters (1)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    동그래님
    Delegate
    상단으로

    티스토리툴바