애님 몽타주
//CAnimInstance.h
private:
UPROPERTY(VisibleDefaultsOnly, BlueprintReadOnly, Category = "Montage",
Meta=(AllowPrivateAccess = true))
UAnimMontage* AttackMontage;
UCAnimInstance::UCAnimInstance()
{
static ConstructorHelpers::FObjectFinder<UAnimMontage> ATTACK_MONTAGE(TEXT("AnimMontage'/Game/Character/Warriors/Montages/AttackMontage.AttackMontage'"));
if (ATTACK_MONTAGE.Succeeded())
{
AttackMontage = ATTACK_MONTAGE.Object;
}
}
void UCAnimInstance::PlayAttackMontage()
{
if (!Montage_IsPlaying(AttackMontage))
{
Montage_Play(AttackMontage, 1.0f);
}
}
- AnimInstance에서 몽타주 실행을 추가해준다.
- body슬롯을 추가해주고 전체 동작을 위한 Fullbody로 이름 짓는다.
- defaultslot추가를 해주고 슬롯을 Fullbody로 바꾼뒤에 최종 애님그래프로 연결해준다.
//MyCharacter.cpp
void AMyCharacter::Attack()
{
auto AnimInstance = Cast<UCAnimInstance>(GetMesh()->GetAnimInstance());
if (!!AnimInstance) return;
AnimInstance->PlayAttackMontage();
}
- BindAction에 해당 함수를 넣어준다.
- 만든 AnimInstace를 불러와서 해당 몽타주를 실행시켜준다.
델리게이트
- 특정 객체가 해야 할 로직을 다른 객체가 대신 처리할 수 있도록 만드는 보편적인 설계
- c++객체만 사용할 수 있는 델리게이트와 c++, 블루프린트 객체가 모두 사용할 수 있는 델리게이트가 있다.
- 블루프린트 객체와도 연동하는 델리게이트를 다이나믹 델리게이트라고 한다.
- 애님 인스턴스에는 몽타주 재생이 끝나면 발동하는 OnMontageEnded라는 델리게이트를 제공한다.
애님 노티파이
- 애니메이션을 재생하는 동안 특정 타이밍에 애님인스턴스에게 신호를 보내는 기능
Montage_JumpToSection();
- 다음 섹션에 있는 몽타주를 재생시켜준다.
void AMyCharacter::PostInitializeComponents()
{
Super::PostInitializeComponents();
CAnim = Cast<UCAnimInstance>(GetMesh()->GetAnimInstance());
if (NULL == CAnim) return;
CAnim->OnMontageEnded.AddDynamic(this, &AMyCharacter::OnAttackMontageEnded);
CAnim->OnNextAttackCheck.AddLambda([this]()->void {
CanNextCombo = false;
if (IsComboInputOn)
{
AttackStartComboState();
CAnim->JumpToAttackMontageSection(CurrentCombo);
}
});
}
- AnimInstance에 있는 OnNextAttackCheck 델리게이트에 AddLambda로 함수를 추가해준다.
void UCAnimInstance::AnimNotify_AttackHitCheck()
{
OnAttackHitCheck.Broadcast();
}
- Broadcast() : 멀티캐스트 델리게이트에 등록된 모든 함수를 호출하는 명령이다.
- 이것을 통해 추가해주었던 함수를 호출해준다.
- 결국 AttckHitCheck 노티파이가 불러와졌을때 OnAttackHitCheck 델리게이트에 추가된 함수를 불러와서 각 콤보에 대한 작동을 하게 만든다.
'Game Programming > Unreal' 카테고리의 다른 글
[Unreal] 이득우의 언리얼 C++ 게임개발의 정석 7 (0) | 2022.03.15 |
---|---|
[Unreal] 이득우의 언리얼 C++ 게임개발의 정석 6 (0) | 2022.03.11 |
[Unreal] 이득우의 언리얼 C++ 게임개발의 정석 4 (0) | 2022.02.28 |
[Unreal] 이득우의 언리얼 C++ 게임개발의 정석 3 (0) | 2022.02.25 |
[Unreal] 이득우의 언리얼 C++ 게임개발의 정석 2 (0) | 2022.02.24 |