TIL

[UE5] 언리얼 C++: 좌표 이동과 확률 시스템 구현하기

think95592 2026. 4. 28. 20:43

📝 오늘 요약:

언리얼 C++의 기본 구조를 이해하고, 1초마다 무작위로 이동하며 거리를 누적하는 액터를 구현했다.


1. 언리얼 C++의 설계도와 실행부 (.h vs .cpp)

C++ 코딩의 시작은 "설계"와 "실행"을 나누는 것부터 시작된다.

  • 헤더 파일(.h): 클래스의 설계도다. "우리 클래스는 어떤 변수(기억 상자)를 가지고, 어떤 함수(기능)를 쓸 것인가?"를 미리 선언한다.
  • 소스 파일(.cpp): 설계도에 적힌 기능을 실제로 구현하는 곳이다. ::(범위 지정 연산자)를 사용하여 "이 코드는 AMyActor의 기능이다"라고 명시한다.
    • 핵심: "선언 없이는 사용도 없다!"

2. 변수 선언: 무엇을 기억할 것인가?

변수의 위치에 따라 데이터가 살아있는 시간(수명)이 달라진다.

  • 멤버 변수 (헤더 선언): StepCount, TotalDistance처럼 게임 내내 값을 기억해야 하는 데이터는 헤더에 선언한다.
  • 지역 변수 (함수 내 선언): CurrentLocation, NewLocation처럼 특정 함수 안에서 잠깐 계산하고 버릴 데이터는 함수 내부에 선언한다. (메모지 같은 역할)
  • 언리얼의 약속: 정수는 int32, 소수점은 float, 좌표는 FVector를 사용한다.

3. 시간 제어: Tick과 DeltaTime

컴퓨터 사양에 상관없이 똑같이 1초를 재는 법을 배웠다.

  • Tick: 매 프레임 실행되는 함수다. (보통 초당 60번 이상)
  • DeltaTime: "지난 프레임에서 현재 프레임까지 걸린 시간"이다.
  • 타이머 로직: Time += DeltaTime을 통해 시간을 누적하고, if(Time >= 1.0f)를 사용해 정확히 1초마다 동작을 수행하게 만든다.

4. 액터 이동과 거리 계산 (수학적 활용)

단순 이동을 넘어, 이동한 궤적을 데이터로 남기는 로직을 구현했다.

  • 좌표 가져오기/설정: GetActorLocation()으로 현재 위치를 받고, SetActorLocation()으로 이동시킨다.
  • 거리 누적 로직:
    1. 이동 전 좌표 저장 (PreviousLocation)
    2. 이동 실행
    3. FVector::Dist(A, B) 함수로 두 지점 사이의 거리 계산
    4. TotalDistance += Distance로 합계 누적
    5. 중요: 다음 계산을 위해 현재 위치를 다시 PreviousLocation으로 업데이트!

5. 화면 출력과 디버깅: AddOnScreenDebugMessage

코드가 잘 돌아가는지 눈으로 확인하는 가장 빠른 방법이다.

  • TEXT() 매크로: 한글이나 문자열이 깨지지 않게 보호한다.
  • FString::Printf: 문자열 안에 변수(%d, %.2f 등)를 끼워 넣을 때 사용한다.
  • * (애스터리스크): ToString()으로 변환된 FString을 로그에 찍을 때 변수명 앞에 붙여야 하는 언리얼의 문법이다.

🌟 오늘의 회고

처음에는 public이 왜 두 개인지도 헷갈리고 빌드 에러만 보면 당황했지만, 단계별로 기능을 쪼개서(이동 -> 회전 -> 거리 계산) 구현해 보니 코드의 흐름이 보이기 시작했다. 특히 "이전 위치를 기억했다가 현재 위치와 비교한다"는 논리가 게임 개발의 기초라는 것을 깨달았다. 내일은 이벤트 함수를 더 정교하게 다듬어봐야겠다.