지금까지 Enemy 블루프린트의 애니메이션에 애니메이션 시퀀스 하나만 박아두었었다.
슬슬 체계화된 애니메이션이 필요할 것 같아, 애니메이션 블루프린트를 만들기로 했다.
우선 Mixamo에서 Idle, 걷기, 달리기 애니메이션을 가져와, 총 사이즈에 맞게 적절히 수정해주었다.
그리고 이 세 애니메이션을 기반으로 한 Blend Space 1D를 만들었다.
Blend Space는 일전에 칸나의 무빙샷 애니메이션에 사용한 바가 있다. https://ciel45.tistory.com/15
다만 그 때와는 다르게 이번엔 1D버전을 사용한다.
적의 이동은 정면으로만 움직이도록 할 것이기에, 애니메이션이 속도 한 가지 요소에만 좌우될 것이기 때문이다.
이제 이 Blend Space를 애니메이션 블루프린트에서 사용하면 된다.
애니메이션 블루프린트 ABP_Enemy를 만들고 Move State에 이 블렌드 스페이스를 집어넣었다.
Ground Speed는 이 애니메이션 블루프린트의 부모클래스인 C++ 클래스에서 틱마다 뿌려주고있는 값이다.
C++ 코드는 다음과 같다.
// EnemyAnimInstance.cpp
#include "Character/EnemyAnimInstance.h"
#include "Character/Enemy.h"
#include "GameFramework/CharacterMovementComponent.h"
#include "Kismet/KismetMathLibrary.h"
void UEnemyAnimInstance::NativeInitializeAnimation()
{
Super::NativeInitializeAnimation();
EnemyCharacter = Cast<AEnemy>(TryGetPawnOwner());
if (EnemyCharacter)
{
EnemyCharacterMovement = EnemyCharacter->GetCharacterMovement();
}
}
void UEnemyAnimInstance::NativeUpdateAnimation(float DeltaTime)
{
Super::NativeUpdateAnimation(DeltaTime);
if (EnemyCharacterMovement)
{
GroundSpeed = UKismetMathLibrary::VSizeXY(EnemyCharacterMovement->Velocity);
}
}
애니메이션이 적당히 만들어졌으니, 적이 플레이어를 쫒아오는 것을 테스트해보았다.
언리얼의 NavMeshBoundsVolume을 이용하면 어떤 Pawn이 패스파인딩 알고리즘을 통해 목표지점으로 향하게 할 수 있다.
적이 플레이어를 쫒아오도록 하는 로직은 간단히 블루프린트로 만들었다.
아래는 테스트 영상이다.
https://www.youtube.com/watch?v=khUjFUT1e_Y
'언리얼 엔진 5 > 개발 일지' 카테고리의 다른 글
[UE5] 블루아카이브 TPS게임 개발일지 (20) - 비헤이비어 트리를 이용한 적 AI 제작 1 (+AI Controller) (0) | 2023.12.30 |
---|---|
[UE5] 블루아카이브 TPS게임 개발일지 (19) - 총알 투사체 제작 (Projectile Movement) (0) | 2023.12.30 |
[UE5] 블루아카이브 TPS게임 개발일지 (17) - 적 무기 모델링 임포트 (0) | 2023.12.26 |
[UE5] 블루아카이브 TPS게임 개발일지 (16) - 적 사망 연출 2 (0) | 2023.12.25 |
[UE5] 블루아카이브 TPS게임 개발일지 (15) - 적 사망 연출 (0) | 2023.12.25 |