개발 · 컴퓨터공학
Learning Unreal 4 언리얼 공부일지 - 언리얼의 delegate
막
2022. 1. 24. 16:20
728x90
반응형
OnMontageEnded는 AnimInstance에 선언되어있다. 이는 FOnMontageEndMCDelegate라는 타입으로 이루어져있는데, 또 들어가보면 이는 파라미터가 UAnimMontage*, bool 2개인 delegate이다.
이것들은 언리얼 자체적으로 구현한 delegate이다.
IsAttacking이라는 bool 변수가 있으면, 공격후에 알아서 false로 처리해주는 delegate를 생각해보자.
void AMyCharacter::BeginPlay()
{
Super::BeginPlay();
// 시작할 때 AnimInstance를 넣어줌
AnimInstance = Cast<UMyAnimInstance>(GetMesh()->GetAnimInstance());
// AddDynamic으로 Montage가 끝났을때 OnAttackMontageEnded함수 실행
AnimInstance->OnMontageEnded.AddDynamic(this, &AMyCharacter::OnAttackMontageEnded);
}
void AMyCharacter::Attack()
{
if (IsAttacking)
return;
// Attack시 Montage 함수실행
AnimInstance->PlayAttackMontage();
IsAttacking = true;
}
// Attack이 끝났을 때 실행하는 함수
void AMyCharacter::OnAttackMontageEnded(UAnimMontage* Montage, bool bInterrupted)
{
IsAttacking = false;
}
위는 Character cpp파일이다.
위에서 언급했던 delegate MontageEnded의 AddDynamic을 이용해서 Montage가 끝났을때 OnAttackMontageEnded함수 실행하도록 설정한다.
OnAttackMontageEnded함수는 OnMontageEnded라는 델리게이트에 넣을 함수이므로, FOnMontageEndMCDelegate타입의 형식을 지켜주어야한다.
Character 헤더를 보면 FOnMontageEndMCDelegate과 같은 파라미터 형식으로 선언하였다.
public:
// Called every frame
virtual void Tick(float DeltaTime) override;
// Called to bind functionality to input
virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;
void Attack();
void UpDown(float Value);
void LeftRight(float Value);
void Yaw(float Value);
// 함수 선언
UFUNCTION()
void OnAttackMontageEnded(UAnimMontage* Montage, bool bInterrupted);
728x90
반응형