(Unreal : 입문) 10. 델레게이트

Posted by : at

Category : Unreal-entry


기존코드를 개선하면서 델레게이트를 설명한다.

void AMyCharacter::Attack()
{
    // Attack을 할때마다 매번 캐스팅을 해야할까?
    // 내부적으로 Attack의 시작/종료를 관맇면 되지 않을까?
    // 시작시점은 여기서 안다치고 종료시점은 어떻게 알지?
    // -> 델리게이트를 통해 받아와야 한다.
	auto AnimInstance = Cast<UMyAnimInstance>(GetMesh()->GetAnimInstance());
	if (AnimInstance)
	{
		AnimInstance->PlayAttackMontage();
	}
}

개선해보자

void AMyCharacter::BeginPlay()
{
	Super::BeginPlay();
	
	AnimInstance = Cast<UMyAnimInstance>(GetMesh()->GetAnimInstance());

    // 몽타주의 종료시점을 받는다
	AnimInstance->OnMontageEnded.AddDynamic(this, &AMyCharacter::OnAttackMontageEnded);
}
// 종료를 관리
void AMyCharacter::OnAttackMontageEnded(UAnimMontage* Montage, bool bInterrupted)
{
	IsAttacking = false;
}

// ...

void AMyCharacter::Attack()
{
	if (IsAttacking)
		return;

	AnimInstance->PlayAttackMontage();

	IsAttacking = true;
}

About Taehyung Kim

안녕하세요? 8년차 현업 C++ 개발자 김태형이라고 합니다. 😁 C/C++을 사랑하며 다양한 사람과의 협업을 즐깁니다. ☕ 꾸준한 자기개발을 미덕이라 생각하며 노력중이며, 제가 얻은 지식을 홈페이지에 정리 중입니다. 좀 더 상세한 제 이력서 혹은 Private 프로젝트 접근 권한을 원하신다면 메일주세요. 😎

Star
Useful Links