1. 콤보 공격 했을 때 다음 애니 실행되도록 수정해보자
1) AnimBase.h 콤보여부 체크 bool 함수 추가
..
UPROPERTY( VisibleAnywhere, BlueprintReadOnly )
bool mAttackCombo;
2) 공격 몽타주 실행중이면 다음 애니 실행하도록 bool값 true 처리
void UAnimBase::PlayAttackMonatage()
{
// Montage_IsPlaying() : 현재 인자인 몽타주가 실행되는지 확인
if ( Montage_IsPlaying( mAttackMontage ) )
mAttackCombo = true;
else
{
mAttackCombo = false;
Montage_Play( mAttackMontage );
}
}
▶️ Montage_IsPlaying() : 현재 인자인 몽타주가 실행되는지 확인
3) 공격 끝났을 때 몽타주 연결 처리
void UAnimBase::AnimNotify_AttackEnd()
{
if ( mAttackCombo )
{
if ( !IsValid( mAttackMontage ) )
return;
// Montage_GetCurrentSection() : 현재 재생중인 몽타주 섹션 이름을 반환
// BPAM_Player~의 경우 Attack0, Attack1, Attack2, Attack3을 얻어옴
FName curName = Montage_GetCurrentSection( mAttackMontage );
if ( curName == NAME_None )
return;
// GetSectionIndex() : 섹션 이름을 인자로 주면, 몽타주 섹션의 인덱스 반환
int32 idx = mAttackMontage->GetSectionIndex( curName );
int32 nextIdx = idx + 1;
// GetSectionName() : 인덱스 번호를 인자로 주면, 섹션 이름을 얻어옴
FName nextSectionName = mAttackMontage->GetSectionName( nextIdx );
// 마지막 몽타주 실행
if ( nextSectionName == NAME_None )
mAttackCombo = false;
else
Montage_JumpToSection( nextSectionName, mAttackMontage );
}
}
▶️ Montage_GetCurrentSection() : 현재 재생중인 몽타주 섹션 이름을 반환
▶️ GetSectionIndex() : 섹션 이름을 인자로 주면, 몽타주 섹션의 인덱스 반환
▶️ GetSectionName() : 인덱스 번호를 인자로 주면, 해당 인덱스의 섹션 이름 반환
▶️몽타주 작업 중 입력이 안들어간 이유
애니메이션이 진행되는 쓰레드와 메인 쓰레드와 다르다
그래서 노티파이 호출되는 쓰레드와 애니메이션 쓰레드가 달라서 입력이 안되었음
-> EndNotiy가 너무 뒤에있으면 씹히나봄
Begin 앞으로 땡기고 End 도 앞으로 땡기니까 된당 타이밍 잡기 어렵.
▶️ ~ 파일 has not been loaded by any process. Changes will be ignored.
나오면 Binaries, Intermediate 폴더 제거하고 다시 하면 됨.
참고링크 : https://community.gamedev.tv/t/ue5-error/234576
▶️ 강사님 다른 방식으로 처리 (섹션 번호를 멤버변수로 저장하고 처리하는 방식) 나는 둘다 잘됨.
몽타주 다음 애니메이션 다른 처리
AnimBase.h
UPROPERTY( VisibleAnywhere, BlueprintReadOnly )
int32 mSectionIdx;
cpp
void UAnimBase::PlayAttackMonatage()
{
// Montage_IsPlaying() : 현재 인자인 몽타주가 실행되는지 확인
if ( Montage_IsPlaying( mAttackMontage ) )
{
mAttackCombo = true;
FName curName = Montage_GetCurrentSection( mAttackMontage );
int32 curIdx = mAttackMontage->GetSectionIndex( curName );
if ( curIdx < 0 )
return;
mSectionIdx = curIdx + 1;
}
else
{
mAttackCombo = false;
Montage_Play( mAttackMontage );
mSectionIdx = 0;
}
}
void UAnimBase::AnimNotify_AttackEnd()
{
if ( mAttackCombo )
{
if ( !IsValid( mAttackMontage ) )
return;
FName nextName = mAttackMontage->GetSectionName( mSectionIdx );
if ( nextName == NAME_None )
return;
Montage_JumpToSection( nextName, mAttackMontage );
}
}
'Unreal Engine5 > KDT 2024' 카테고리의 다른 글
[UE5 KDT2024] 19. 에임오프셋 (0) | 2025.03.03 |
---|---|
[UE5 KDT2024] 18. 애니메이션 동기화 (0) | 2025.03.02 |
[UE5 KDT2024] 16. 애니메이션 몽타주 (0) | 2025.02.28 |
[UE5 KDT2024] 15. RPC (0) | 2025.02.27 |
[UE5 KDT2024] 14. 애니메이션 블랜드 스페이스 (0) | 2025.02.26 |
댓글