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. 언리얼에서 프로젝트 다시 열어 게임 모드로 실행
'언리얼_엔진_게임개발_공부 > 언리얼 C++' 카테고리의 다른 글
[언리얼/C++] 타이머 사용하기 / FTimerManager, FTimerHandle, SetTimer() (0) | 2025.01.24 |
---|---|
[언리얼/C++] 열거형 - UENUM / 언리얼 엔진의 EAxis (0) | 2025.01.23 |
[언리얼/C++] 비트마스크 Bitmask / TryFindType, UnknownFunction 경고 해결 (1) | 2025.01.21 |
[언리얼/C++] Tick 함수로 메쉬 스케일 변경 (커졌다 작아졌다 하게) (0) | 2025.01.21 |
[언리얼/C++] 액터에 컴포넌트 추가 및 에셋 적용 (1) | 2025.01.20 |