목차
- 몽타주 재생하기
1. 몽타주 재생하기
에너미의 공격을 구현하기 위해서 몽타주를 재생해보려고 한다.
에너미의 헤더파일로 들어가자.
virtual void Attack() override;
virtual void PlayAttackMontage() override;
Attack()함수와 이 Attack() 함수에서 실행할 PlayAttackMontage() 함수를 선언한다. 이제 이 두 함수를 정의하자.
Attack() 함수의 경우 추후 기능을 만들겠지만 지금은 단순히 공격 몽타주를 재생하는 역할만 한다.
void AEnemy::Attack()
{
Super::Attack();
PlayAttackMontage();
}
PlayAttackMontage() 함수는 플레이어 캐릭터에 있는 내용 그대로 복사해 붙여 놓았다.
void AEnemy::PlayAttackMontage()
{
Super::PlayAttackMontage();
UAnimInstance* AnimInstace = GetMesh()->GetAnimInstance();
if (AnimInstace && AttackMontage)
{
AnimInstace->Montage_Play(AttackMontage);
const int32 SectionCount = AttackMontage->GetNumSections();
const int32 Selection = FMath::RandRange(0, SectionCount - 1);
const FName SectionName = AttackMontage->GetSectionName(Selection);
AnimInstace->Montage_JumpToSection(SectionName, AttackMontage);
}
}
이제 이것을 실행시키자.
CheckCombatTarget() 함수 내에서 전투 범위 안에 있는지 없는지를 확인하고 있었다.
void AEnemy::CheckCombatTarget()
{
// 생략
}
else if (InTargetRange(CombatTarget, AttackRadius) && EnemyState != EEnemyState::EES_Attacking)
{
// 공격 사거리 안, 플레이어를 공격
EnemyState = EEnemyState::EES_Attacking;
// TODO : AttackMontage 재생
UE_LOG(LogTemp, Warning, TEXT("Attack"));
}
}
단순히 여기서 Attack() 함수를 실행시키면 공격을 하긴 하겠지만 오로지 한번밖에 안 할 것이다. 또한 공격 몽타주 재생중 범위 밖으로 나갔다 들어오면 다시 함수가 실행되는 문제가 생길 수도 있다. (공격 사거리의 경우 굉장히 짧기 때문에 이런일이 자주 일어날 수 있다.)
이대로 컴파일하고 확인한 결과 단순히 이 문제가 끝이 아니라 공격 중 이동도 하고 공격시 캐릭터 방향과 상관없이 공격을 시행하는 등의 문제가 있었다. 이러한 것들은 차차 고치도록 하자.
'게임프로그래밍 > 실습1' 카테고리의 다른 글
[언리얼 실습] 67. 에너미 Engage 상태로 만들기 (0) | 2024.11.07 |
---|---|
[언리얼] 66. 에너미 공격 반복하기 (0) | 2024.11.07 |
[언리얼 실습] 64. 에너미에게 무기 쥐어주기 (0) | 2024.11.06 |
[언리얼 실습] 63. 자식 에너미 클래스 만들기 (0) | 2024.11.06 |
[언리얼 실습] 62. 에너미가 타격을 받으면 플레이어를 추격하기 (0) | 2024.11.06 |