안선생의 개발 블로그

[UE5] 언리얼 델리게이트 바인딩 종류 본문

언리얼/언리얼 C++

[UE5] 언리얼 델리게이트 바인딩 종류

안선생 2024. 3. 23. 23:15
  • 전역 C++ 함수 : BindStatic API를 사용해 등록
  • 전역 C++ 람다 함수 : BindLambda API를 사용해 등록
  • C++클래스 멤버 함수 : BindRaw  API를 사용해 등록
  • 공유포인터 클래스의 멤버 함수 (쓰레드 미지원) : BindSP API를 사용해 등록 
  • 공유포인터 클래스의 멤버 함수 (쓰레드 지원) : BindThreadSafeSP API를 사용해 등록
  • UFUNCTION 멤버 함수 : BindUFunction API를 사용해 등록
  • 언리얼 오브젝트의 멤버함수 : BindUObject API를 사용해 등록
위 API 목록 중에서 우리가 바인딩하려는 RequestTokenComplete 함수는 언리얼 오브젝트 ABGameInstance의 멤버 함수
이므로, CreateUObject를 사용해 바인딩하여야 함을 알 수 있습니다. 

 

CreateUObject하면 델리게이트가 만들어짐

즉 

TimerDelegate = FTimerDelegate::CreateUObject(this, &UBTTask_Attack::FinishTask);

델리게이트 변수를 전역적으로 사용가능 

 

생성자에서 선언하고 다른 함수에서 사용가능 예시

 

UBTTask_Attack::UBTTask_Attack() 
{
//델리게이트 만듬
    TimerDelegate = FTimerDelegate::CreateUObject(this, &UBTTask_Attack::FinishTask);
}

EBTNodeResult::Type UBTTask_Attack::ExecuteTask(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory)
{
    MyOwnerComp = &OwnerComp;
    AEnemyBase* Enemy = Cast<AEnemyBase>(OwnerComp.GetAIOwner()->GetPawn());
    if(Enemy)
    {
       Enemy->ServerAttack();
       //델리게이트 사용
       GetWorld()->GetTimerManager().SetTimer(AttackTimer,TimerDelegate,Enemy->GetMontageRate(),false);
    }

    return EBTNodeResult::InProgress;
}

void UBTTask_Attack::FinishTask()
{
    UE_LOG(LogTemp,Error,TEXT("125"));
    FinishLatentTask(*MyOwnerComp,EBTNodeResult::Succeeded);
}

 

// 이기능은 AI Task를 직접 만듬 

BehaviorTree에 있는 PlayAnimaion Task는 멀티플레이에선 서버만 재생된다 그래서 

멀티플레이용 애니메이션을 만들어 봤다.

 

'언리얼 > 언리얼 C++' 카테고리의 다른 글

[UE5] 언리얼 하드,소프트 참조  (0) 2024.08.22
[UE5] TObjectPtr  (0) 2023.11.18
[UE5 C++] OnComponentBeginOverlap  (0) 2023.11.16
[UE5] 인터페이스  (0) 2023.11.09
[UE5] C++ 블루프린트 연결하기  (0) 2023.11.02