📝 오늘 요약:
언리얼 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()으로 이동시킨다.
- 거리 누적 로직:
- 이동 전 좌표 저장 (PreviousLocation)
- 이동 실행
- FVector::Dist(A, B) 함수로 두 지점 사이의 거리 계산
- TotalDistance += Distance로 합계 누적
- 중요: 다음 계산을 위해 현재 위치를 다시 PreviousLocation으로 업데이트!
5. 화면 출력과 디버깅: AddOnScreenDebugMessage
코드가 잘 돌아가는지 눈으로 확인하는 가장 빠른 방법이다.
- TEXT() 매크로: 한글이나 문자열이 깨지지 않게 보호한다.
- FString::Printf: 문자열 안에 변수(%d, %.2f 등)를 끼워 넣을 때 사용한다.
- * (애스터리스크): ToString()으로 변환된 FString을 로그에 찍을 때 변수명 앞에 붙여야 하는 언리얼의 문법이다.
🌟 오늘의 회고
처음에는 public이 왜 두 개인지도 헷갈리고 빌드 에러만 보면 당황했지만, 단계별로 기능을 쪼개서(이동 -> 회전 -> 거리 계산) 구현해 보니 코드의 흐름이 보이기 시작했다. 특히 "이전 위치를 기억했다가 현재 위치와 비교한다"는 논리가 게임 개발의 기초라는 것을 깨달았다. 내일은 이벤트 함수를 더 정교하게 다듬어봐야겠다.
'TIL' 카테고리의 다른 글
| C++ 클래스, 메모리, 그리고 참조 시스템 (0) | 2026.04.30 |
|---|---|
| [TIL] C++ 클래스 기초: 캡슐화와 객체 간 상호작용 (feat. 언리얼 엔진 대비) (0) | 2026.04.29 |
| [UE5]가장 가까운 몬스터 추적 UI 및 Is Valid 에러 해결 (0) | 2026.04.27 |
| [Game Project] FPS 개발기: 게임 메커니즘 완성 및 UI 기능 구현 (UE 5.5.4) (0) | 2026.04.24 |
| [TIL] C++ 배열의 평균 구하기 & C언어 반복문과 배열의 기초 (0) | 2026.04.24 |