여태까지 InputComponent를 받는 방식이 델리게이트 라고 볼수 있다. (바인딩)
'어떤 행동이 끝났을 때, ~~을 호출해줘' -> 콜백처리
// MyCharacter.h
class TESTUNREALENGINE_API AMyCharacter : public ACharacter
{
public:
// .. 생략
UFUNCTION()
void OnAttackMontageEnded(UAnimMontage* Montage, bool bInterrupted);
private:
// .. 생략
UPROPERTY(VisibleAnywhere)
bool IsAttacking = false;
UPROPERTY()
class UMyAnimInstance* AnimInstance;
};
// --------
// MyCharacter.cpp
void AMyCharacter::BeginPlay()
{
Super::BeginPlay();
AnimInstance = Cast<UMyAnimInstance>(GetMesh()->GetAnimInstance());
// 몽타주 재생이 끝나면 OnAttackMontageEnded를 실행해 달라고 요청
AnimInstance->OnMontageEnded.AddDynamic(this, &AMyCharacter::OnAttackMontageEnded);
}
void AMyCharacter::Attack()
{
if (IsAttacking)
return;
AnimInstance->PlayAttackMontage();
IsAttacking = true;
}
// 델리게이트에 등록된 메소드
void AMyCharacter::OnAttackMontageEnded(UAnimMontage* Montage, bool bInterrupted)
{
IsAttacking = false;
}
// ----------
// MyAnimInstance.cpp
void UMyAnimInstance::PlayAttackMontage()
{
// MyCharacter에서 조건을 모두 검사하기 때문에 이제 여기서 검사할 필요는 없다
Montage_Play(AttackMontage, 1.f);
}
이런 패턴이 정말 자주 일어난다.
'언리얼 엔진 > 언리얼 엔진4 입문' 카테고리의 다른 글
[UE4 입문] 블렌드 스페이스 (0) | 2022.09.02 |
---|---|
[UE4 입문] 애니메이션 노티파이 (0) | 2022.09.02 |
[UE4 입문] 애니메이션 몽타주 (0) | 2022.09.02 |
[UE4 입문] 스테이트 머신 (0) | 2022.09.02 |
[UE4 입문] 애니메이션 기초 (0) | 2022.09.01 |