언리얼 엔진
Unreal Engine - 랜덤 이동과 이벤트 처리 설계
로안님
2025. 1. 8. 22:26
개요
이 블로그에서는 언리얼 엔진의 AMyActor 클래스를 기반으로, 랜덤 이동, 거리 계산, 이벤트 발생의 기본적인 로직을 구현하는 방법을 단계별로 설명합니다.
1. 랜덤 이동 구현 (Step 함수)
Step() 함수는 FMath::RandRange(0, 1)을 사용하여 0 또는 1의 랜덤 값을 반환합니다. 이 값은 이동 방향 또는 이동 크기를 결정하는 데 사용됩니다.
구현 코드:
int32 AMyActor::Step() {
return FMath::RandRange(0, 1); // 0 또는 1 반환
}
2. 이동 로직 (Move 함수)
Move() 함수는 다음을 수행합니다:
- 10번 반복하며 랜덤 이동을 처리합니다.
- 각 반복에서:
- 이전 좌표를 저장하고,
- 새로운 좌표를 계산합니다.
- 이동 거리를 누적하고,
- 이벤트 발생 여부를 확인합니다.
구현 코드:
void AMyActor::Move() {
for (int32 i = 1; i < 11; i++) {
FVector2D Previous = Start;
Start.X += Step();
Start.Y += Step();
totDist += distance(Previous, Start);
UE_LOG(LogTemp, Warning, TEXT("Step %d: Position = (%.0f, %.0f)"), i, Start.X, Start.Y);
if (createEvent()) {
UE_LOG(LogTemp, Warning, TEXT("Event triggered!"));
evCnt++;
} else {
UE_LOG(LogTemp, Warning, TEXT("No event."));
}
}
UE_LOG(LogTemp, Warning, TEXT("Total Distance: %.1f, Event Count: %d"), totDist, evCnt);
}
3. 이동 거리 계산
distance 함수는 두 점 사이의 거리를 계산하는 함수입니다. 피타고라스의 정리를 사용하며, FMath::Sqrt를 활용합니다.
구현 코드:
float AMyActor::distance(FVector2D first, FVector2D second) {
float XDiff = first.X - second.X;
float YDiff = first.Y - second.Y;
return FMath::Sqrt((XDiff * XDiff) + (YDiff * YDiff));
}
4. 이벤트 발생 여부 확인
createEvent() 함수는 50% 확률로 이벤트를 발생시키는 간단한 함수입니다. 언리얼 엔진의 FMath::RandRange를 활용하여 0과 1 사이의 랜덤 값을 생성합니다.
구현 코드:
bool AMyActor::createEvent() {
return FMath::RandRange(0, 1) == 0;
}
참고: 위 코드는 단일 반환식으로 간결하게 작성되어 있으며, if-else 블록을 사용하지 않아도 됩니다.
bool AMyActor::createEvent() {
int32 randomNum = FMath::RandRange(0, 1);
if (randomNum == 0) {
return true;
}
else {
return false;
}
}
5. 누적 데이터 출력
반복문이 끝난 후, 총 이동 거리와 이벤트 발생 횟수를 출력합니다. UE_LOG는 언리얼 엔진에서 디버깅 로그를 출력하는 표준 함수로, 개발 중 로직 검증에 유용합니다.
전체 코드
#include "MyActor.h"
// Sets default values
AMyActor::AMyActor() {
PrimaryActorTick.bCanEverTick = true;
Start = FVector2D(0, 0);
evCnt = 0;
totDist = 0.0f;
}
void AMyActor::BeginPlay() {
Super::BeginPlay();
Move();
}
void AMyActor::Tick(float DeltaTime) {
Super::Tick(DeltaTime);
}
void AMyActor::Move() {
for (int32 i = 1; i < 11; i++) {
FVector2D Previous = Start;
Start.X += Step();
Start.Y += Step();
totDist += distance(Previous, Start);
if (createEvent()) {
evCnt++;
}
}
}
int32 AMyActor::Step() {
return FMath::RandRange(0, 1);
}
float AMyActor::distance(FVector2D first, FVector2D second) {
float XDiff = first.X - second.X;
float YDiff = first.Y - second.Y;
return FMath::Sqrt((XDiff * XDiff) + (YDiff * YDiff));
}
bool AMyActor::createEvent() {
return FMath::RandRange(0, 1) == 0;
}
결론
이 코드는 언리얼 엔진에서 간단한 랜덤 이동과 이벤트 처리의 기본 원리를 설명합니다. 주요 기능은 다음과 같습니다:
- 랜덤 이동과 누적 거리 계산.
- 이벤트 발생 여부 확인.
- 디버깅을 위한 UE_LOG 활용.