목차
- 에너미 상태 바꾸기
1. 에너미 상태 바꾸기
현재 에너미 상태 열거형에 Engaged가 있지만 실제 Engaged 상태로 들어가지는 않는다. 이 때문에 적이 공격을 한번 하면 다시는 하지 않는다. 이 부분을 고치자.
void AEnemy::Attack()
{
EnemyState = EEnemyState::EES_Engaged;
Super::Attack();
PlayAttackMontage();
}
공격 함수에서 상태를 바꿔주자.
bool AEnemy::CanAttack()
{
bool bCanAttack =
IsInSideAttackRadius() &&
!IsAttacking() &&
!IsEngaged() &&
!IsDead();
return bCanAttack;
}
공격이 가능한지 알아보는 함수에서는 Engage 상태가 아닌지 확인한다.
이제 언제 Engage 상태를 해제해야할까? 공격이 끝난 뒤에 해야할 것이고 그렇게 하기 위해서는 애니메이션 블루프린트에서 노티파이를 통해 실행해야할 것이다.
// UFUNCTION(BlueprintCallable) 부모 클래스에서 이미 호출
virtual void AttackEnd() override;
노티파이에서 호출할 BlueprintCallable 함수를 만들자.
공격이 끝나면 어떤 상태로 가야할까? 그것은 캐릭터의 현재 위치에 따라 다를 것이다. 그리고 그것은 이미 구현해 놓았다.
void AEnemy::AttackEnd()
{
EnemyState = EEnemyState::EES_NoState;
CheckCombatTarget();
}
그렇기 때문에 일시적으로 아무것도 아닌 상태로 옮겼다가 다시 거리에 맞는 상태로 돌려놓으면 된다. CheckCombatTarget() 함수에서 거리에 따른 에너미의 행동을 이미 구현해놓았기 때문에 따로 함수를 만들 필요는 없다.
컴파일하고 몽타주로 들어가 노티파이를 추가하자.
이렇게 하면 공격을 계속 한다. 물론 아직도 고쳐야할 부분이 많이 남았다. 강의를 계속 보면서 따라해봐야겠다.
'게임프로그래밍 > 실습1' 카테고리의 다른 글
[언리얼 실습] 69. 플레이어 히트 구현하기 (0) | 2024.11.08 |
---|---|
[언리얼 실습] 68. 플레이어 캐릭터 히트 구현 (0) | 2024.11.08 |
[언리얼] 66. 에너미 공격 반복하기 (0) | 2024.11.07 |
[언리얼 실습] 65. 에너미 어택 몽타주 재생하기 (0) | 2024.11.06 |
[언리얼 실습] 64. 에너미에게 무기 쥐어주기 (0) | 2024.11.06 |