우선 EnemyActor.h에 추첨확율을 저장할 traceRate와 dir을 선언합니다.
public:
// Called every frame
virtual void Tick(float DeltaTime) override;
UPROPERTY(EditAnywhere)
class UBoxComponent* boxComp;
UPROPERTY(EditAnywhere)
class UStaticMeshComponent* meshComp;
UPROPERTY(EditAnywhere)
int32 traceRate = 50;
private:
FVector dir;
방향추첨 기능은 블루프린트 생성시 결정해야 하므로 BeginPlay()함수에 구현해 줍니다.
void AEnemyActor::BeginPlay()
{
Super::BeginPlay();
int32 drawResult = FMath::RandRange(1, 100);
if (drawResult <= traceRate) {
for (TActorIterator<APlayerPawn> player(GetWorld()); player; ++player) {
if (player->GetName().Contains(TEXT("BP_PlayerPawn"))) {
dir = player->GetActorLocation() - GetActorLocation();
dir.Normalize();
}
}
}
else {
dir = GetActorForwardVector();
}
}
게임상의 PlayerPawn클래스를 찾기 위해 TActorIterator<>를 사용합니다. EngineUtils.h를 선언해 줘야 합니다. PlayerPawn.h도 필요합니다.
#include "EnemyActor.h"
#include "Components/BoxComponent.h"
#include "Components/StaticMeshComponent.h"
#include "EngineUtils.h"
#include "PlayerPawn.h"
PlayerPawn클래스가 여러개 있을 경우 이름이 BP_PlayerPawn인지 검사합니다.
이렇게 찾은 player와 EnemyActor와의 Location()의 벡터차가 에너미가 향할방향입니다.
traceRate보다 작을경우 forwardVector를 지정 앞으로 나가게 합니다.
'언리얼엔진 > C++슈팅프로젝트제작' 카테고리의 다른 글
UE5 충돌처리하기 - 콜리전 채널, 프리셋 설정하기 (0) | 2023.10.21 |
---|---|
Enemy Factory 에너미 생성 액터 제작 (0) | 2023.10.19 |
적 제작하기 (0) | 2023.10.19 |
총알 발사 효과음 구현 (1) | 2023.10.19 |
UE5 플레이어 키입력 바인딩하기 (0) | 2023.10.19 |