본문 바로가기
언리얼_엔진_게임개발_공부/언리얼 C++

(과제용) Unreal Engine C++ 간단한 이동 로직 구현하기

by jaboy 2025. 1. 6.

MyActor 클래스

- 총 10회 랜덤 이동

- move() : step() 이 반환하는 값만큼 이동 후 위치 좌표 출력

- step() : 랜덤하게 0 혹은 1 반환 = x, y 이동 값

- distance() : 이동 시 이전 좌표 기준 이동한 거리

- 이동 시 각 스텝마다 50% 확률로 이벤트 발생 (createEvent())

- 10회 이동 후 총 이동거리이벤트 발생 횟수 출력

 

생성자

- 현재 위치, 이벤트 발생 횟수, 총 이동 거리에 대한 정보를 저장 및 업데이트 해야 하므로 변수로 지정 및 생성 시 초기화한다.

// 위치, 이벤트 발생 횟수, 이동한 총 거리 초기화
AMyActor::AMyActor() : currentLocation({ 0.f, 0.f }), eventCount(0), totalDist(0.f)
{
 	// Set this actor to call Tick() every frame.  You can turn this off to improve performance if you don't need it.
	PrimaryActorTick.bCanEverTick = true;
}

 

move()

- 이동한 거리 및 위치를 출력해야 한다.

- x, y 각각 이동할 값은 step() 함수의 반환값으로 한다.

void AMyActor::move()
{
	FVector2D newLocation = { currentLocation.X + step(), currentLocation.Y + step() }; // new location = (x+step, y+step)
	
	float dist = distance(currentLocation, newLocation); // Distance traveled for this move
	totalDist += dist; // Accumulate distance traveled

	currentLocation = newLocation; // Update current location
	UE_LOG(LogTemp, Warning, TEXT("MOVE: Actor moved to location (%d, %d). Distance: %f."), (int) currentLocation.X, (int) currentLocation.Y, dist);
	
	if (FMath::FRand() >= 0.5) createEvent(); // Random event (probability 0.5)
}

*FMath::FRand() - [0, 1] 랜덤 float 반환 (1을 포함한다)

step()

- 0 또는 1 반환 - x, y 각각 이동할 거리

int32_t AMyActor::step()
{
	return FMath::RandRange(0, 1);
}

*FMath::RandRange(min, max) - [min, max] 랜덤 int 반환 (max를 포함한다)

*float 의 경우 FMath::FRandRange(min, max)

distance()

- 피타고라스의 정리 공식 - 루트((가로 변화한 값)^2 + (세로 변화한 값)^2)

float AMyActor::distance(FVector2D first, FVector2D second)
{
	return sqrt(pow(second.X - first.X, 2) + pow(second.Y - first.Y, 2));
}

 

createEvent()

- 이벤트를 발생시키고 누적 이벤트 횟수를 증가 시킨다.

void AMyActor::createEvent()
{
	UE_LOG(LogTemp, Warning, TEXT("EVENT: Random event occurred!!"));
	eventCount++;
}

 

 

디버깅

TEXT 에 변수 값 사용 시 TEXT() 뒤로 추가

예) 로그에 현 위치 x, y 값 출력 시

UE_LOG(LogTemp, Warning, TEXT("Actor moved to location (%f, %f)."), currentLocation.X, currentLocation.Y);

 

UE_LOG 출력이 안되는 문제 발생... ㅠㅠ

지난 주부터 골머리를 앓았던 문제인데, 여기저기 구글링 해 임시방편을 찾았다.

1. 언리얼 에디터 닫기 (안닫고 빌드하면 안되더라구요...)

2. 비주얼 스튜디오에서 솔루션 빌드 (Ctrl+Shift+B) 및 저장

3. 언리얼에서 프로젝트 다시 열어 게임 모드로 실행