안선생의 개발 블로그
[UE5] 언리얼 델리게이트 바인딩 종류 본문
- 전역 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 |