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
반응형
'개발 · 컴퓨터공학' 카테고리의 다른 글
Learning Unreal 4 언리얼 공부일지 - 블렌드 스페이스가 뭐지 (0) | 2022.01.26 |
---|---|
Learning Unreal 4 언리얼 공부일지 - 애니메이션 노티파이 (0) | 2022.01.25 |
Learning Unreal 4 언리얼 공부일지 - 애니메이션 몽타주가 뭐야 (0) | 2022.01.23 |
Learning Unreal 4 언리얼 공부일지 - 애니메이션 적용하기 (0) | 2022.01.22 |
Learning Unreal 4 언리얼 공부일지 - 블루프린트 알기 (0) | 2022.01.20 |