포스트

UE5 C++ | Obstacle Assault, Game Mode와 Log 출력 (유데미)

언리얼 강의 중 Section 3를 정리한 다섯번째 글입니다.

UE5 C++ | Obstacle Assault, Game Mode와 Log 출력 (유데미)

강의 정보 🎓


캐릭터 충돌 강제 적용 💥

BP_PushingCube 생성

  • MovingPlatform 의 새로운 블루프린트 BP_PushingCube 생성한다.
  • SM_PuzzleCube_A 메쉬 추가 및 크기 조정
  • 이동 거리 및 방향 설정

플레이어와 충돌 시 글리치 발생

  • 문제 원인: 플레이어가 가만히 있을 때 충돌 감지가 안 됨 (콜리전 생략)
  • 해결 방법:
    1. BP_ThirdPersonCharacter 블루프린트 열기
    2. 컴포넌트 패널에서 Character Movement 선택
    3. 이벤트 그래프에서 MoveUpdatedComponent 노드 사용 → 강제로 이동 처리를 유도해 충돌 감지 정상화

마무리

  • BP 클래스를 활용해 간단한 장애물 코스를 제작
  • 좌우 이동 시 회전이 안 되는 버그 발생 시:
    • GetActorRotationSetActorRotation 연결

image.png


Game Mode 🎮

Game Mode란?

  • 게임 전반 규칙 및 스폰 방식을 제어하는 액터이다.
  • 어떤 캐릭터를 쓸지, 어디에 스폰할지 정의한다.

Play From Here

  • 일반적으로 언리얼에서는 시작할 때 캐릭터를 월드에 배치하지 않는다.
  • 과거에는 플레이어 스타트 지점에서 캐릭터가 스폰 되는 경우가 많았다.
    • 플레이어의 시작 방식에 유연하게 대처가 가능
    • 원하는 곳에서 우클릭 후 Play From Here를 통해 스폰 하는 방식
    • 하지만 현재는 Play From Here을 실행 하여도 캐릭터의 위치에서 시작한다.
    • 언리얼이 어떤 캐릭터를 쓰는지 아직 모르기 때문이다.
    • 게임 모드 클래스를 통해서 해결한다.

설정 방법

  1. 블루프린트 툴바 → GameModeBase 생성
    • 이름: BP_ObstacleAssaultGameMode
  2. Default Pawn ClassBP_ThirdPersonCharacter로 설정
  3. World SettingsGameMode OverrideBP_ObstacleAssaultGameMode로 변경
  4. 기존 캐릭터 삭제, PlayerStart 액터 배치
  5. 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);
  • 액터 이름과 상태를 함께 출력해 디버깅 가능

image.png


요약 및 느낀점 📝

  • 캐릭터가 가만히 있으면 콜리젼이 발생하지 않으며 이를 해결하는 과정을 거쳤다.
  • Game Mode 클래스를 통해 레벨의 시작 지점을 정해 시작할 수 있게되었다.
  • Log를 출력하고 확인하는 과정을 거쳤다.

    느낀점 💡 콜리젼 버그를 해결하기 위해 강제로 이동이 발생한 것처럼 하였는데 이외의 다른 방법이 있는지를 찾아봐야겠다. 또한 테스트 지점을 쉽게 정할 수 있는 것은 앞으로 매우 편한 기능이 될 것 같다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.