UE5 C++ | Obstacle Assault, Game Mode와 Log 출력 (유데미)
언리얼 강의 중 Section 3를 정리한 다섯번째 글입니다.
UE5 C++ | Obstacle Assault, Game Mode와 Log 출력 (유데미)
강의 정보 🎓
- 강의명: Unreal Engine 5 C++ Developer: Learn C++ & Make Video Games
- 플랫폼: 유데미
- 현재 섹션: Section 3 - Obstacle Assault
- 주요 내용: BP_PushingCube와 플레이어의 충돌 버그를 해결하고 Game Mode 클래스와 Log 출력을 배웠다.
캐릭터 충돌 강제 적용 💥
BP_PushingCube 생성
MovingPlatform
의 새로운 블루프린트 BP_PushingCube 생성한다.SM_PuzzleCube_A
메쉬 추가 및 크기 조정- 이동 거리 및 방향 설정
플레이어와 충돌 시 글리치 발생
- 문제 원인: 플레이어가 가만히 있을 때 충돌 감지가 안 됨 (콜리전 생략)
- 해결 방법:
BP_ThirdPersonCharacter
블루프린트 열기- 컴포넌트 패널에서
Character Movement
선택 - 이벤트 그래프에서
MoveUpdatedComponent
노드 사용 → 강제로 이동 처리를 유도해 충돌 감지 정상화
마무리
- BP 클래스를 활용해 간단한 장애물 코스를 제작
- 좌우 이동 시 회전이 안 되는 버그 발생 시:
GetActorRotation
→SetActorRotation
연결
Game Mode 🎮
Game Mode란?
- 게임 전반 규칙 및 스폰 방식을 제어하는 액터이다.
- 어떤 캐릭터를 쓸지, 어디에 스폰할지 정의한다.
Play From Here
- 일반적으로 언리얼에서는 시작할 때 캐릭터를 월드에 배치하지 않는다.
- 과거에는 플레이어 스타트 지점에서 캐릭터가 스폰 되는 경우가 많았다.
- 플레이어의 시작 방식에 유연하게 대처가 가능
- 원하는 곳에서 우클릭 후 Play From Here를 통해 스폰 하는 방식
- 하지만 현재는 Play From Here을 실행 하여도 캐릭터의 위치에서 시작한다.
- 언리얼이 어떤 캐릭터를 쓰는지 아직 모르기 때문이다.
- 게임 모드 클래스를 통해서 해결한다.
설정 방법
- 블루프린트 툴바 → GameModeBase 생성
- 이름:
BP_ObstacleAssaultGameMode
- 이름:
Default Pawn Class
→BP_ThirdPersonCharacter
로 설정World Settings
→GameMode Override
를BP_ObstacleAssaultGameMode
로 변경- 기존 캐릭터 삭제,
PlayerStart
액터 배치 Play From Here
실행 → 제대로 캐릭터가 생성되고 시작하는지 확인
GameMode는 레벨 전체를 반복 실행하지 않아도 플레이 테스트를 쉽게 할 수 있게 해주는 중요한 클래스이다.
출력 로그에 기록하기 📝
VS Code에서 UE4 Snippets을 확장자로 설치했었는데 ulog를 치고 엔터 키를 치면
UE_LOG(LogTemp, Display, TEXT("Your message"));
다음을 가져와 준다.
로그 출력 형식
1
2
3
UE_LOG(LogTemp, Display, TEXT("Your message"));
UE_LOG(LogTemp, Warning, TEXT("Your message"));
UE_LOG(LogTemp, Error, TEXT("Your message"));
LogTemp
: 카테고리Display
,Warning
,Error
: 로그 레벨TEXT(...)
: 출력할 메시지- 실행 시 Output Log에 출력된다.
- 출력 예시:
LogTemp: Display: Your message
LogTemp: Warning: Your message
포맷 지정자 활용
1
2
// C형식을 따른다.
UE_LOG(LogTemp, Display, TEXT("Configured Moved Distance: %f"), MoveDistance);
FString 🔠
잘못된 사용 예
1
2
FString MyString = "My String Value";
UE_LOG(LogTemp, Display, TEXT("Here's My String: %s"), MyString); // ❌
올바른 사용 예
1
2
FString MyString = "My String Value";
UE_LOG(LogTemp, Display, TEXT("Here's My String: %s"), *MyString); // ✅
FString
→ TCHAR 포인터로 변환됨- 실용적인 예:
1
2
3
FString Name = GetName();
UE_LOG(LogTemp, Display, TEXT("Name: %s"), *Name);
UE_LOG(LogTemp, Display, TEXT("%s - Over Shoot: %f"), *GetName(), OverShoot);
- 액터 이름과 상태를 함께 출력해 디버깅 가능
요약 및 느낀점 📝
- 캐릭터가 가만히 있으면 콜리젼이 발생하지 않으며 이를 해결하는 과정을 거쳤다.
- Game Mode 클래스를 통해 레벨의 시작 지점을 정해 시작할 수 있게되었다.
- Log를 출력하고 확인하는 과정을 거쳤다.
느낀점 💡 콜리젼 버그를 해결하기 위해 강제로 이동이 발생한 것처럼 하였는데 이외의 다른 방법이 있는지를 찾아봐야겠다. 또한 테스트 지점을 쉽게 정할 수 있는 것은 앞으로 매우 편한 기능이 될 것 같다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.