개발 · 컴퓨터공학 / / 2022. 1. 24. 16:20

Learning Unreal 4 언리얼 공부일지 - 언리얼의 delegate

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
반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유