All is well

[UE5/TPS/Proto01] Project File 생성 / Custom log 생성 본문

UE/TPS

[UE5/TPS/Proto01] Project File 생성 / Custom log 생성

D0YUN 2025. 2. 8. 13:28

01) Project file 생성

  1. 니셜 폴더 생성 → 이니셜 폴더에 Maps 하위 폴더 생성 → Map 생성 후 해당 폴더에 저장
  2. Game Mode Base class를 상속받는 `TPS_GameModeBase` c++ class 생성
  3. Project Settings - Maps & Modes에서 Default Mode, Default Maps 설정

02) `TPSProject.h`에 매크로를 이용한 custom log 생성

매크로 : 디버깅이 어렵기 때문에 함수로 구현하는 것을 일반적으로 권장
매크로 : 띄어쓰기에 민감하므로 주의해서 작성할 것
// TPSMAR.h

#pragma once

#include "CoreMinimal.h"


/***** Custom Log Category, Custom Log 생성 *****/

/* TPS 라는 custom log category 생성 */
DECLARE_LOG_CATEGORY_EXTERN(TPS, Log, All);

/* CALLINFO : 현재 실행 중인 함수와 코드 줄 번호를 포함하는 문자열을 반환하는 매크로 */
#define CALLINFO ( FString(__FUNCTION__) + TEXT("(") + FString::FromInt(__LINE__) + TEXT(")") )


/* PRINT_CALLINFO : CALLINFO를 로그로 출력하는 매크로 */
#define PRINT_CALLINFO() UE_LOG(TPS, Warning, TEXT("%s"), *CALLINFO );

/* PRINT_LOG : 형식화된 문자열(fmt)과 함께 CALLINFO를 로그로 출력하는 매크로*/
#define PRINT_LOG(fmt, ...) UE_LOG(TPS, Warning, TEXT("%s %s"), *CALLINFO, *FString::Printf(fmt, ##__VA_ARGS__))
  1. TPS 라는 custom log category 생성
  2. `CALLINFO` : 현재 실행 중인 함수와 코드 줄 번호를 포함하는 문자열을 반환하는 매크로
    • `__FUNCTION__` : 현재 실행 중인 함수의 이름을 반환
    • `__LINE__` : 해당 코드가 실행된 소스 파일의 줄 번호를 반환
  3. `PRINT_CALLINFO` : `CALLINFO`를 로그로 출력하는 매크로
    • 실행 중인 함수와 줄 번호를 경고(Warning) 로그로 출력
  4. `PRINT_LOG` : 형식화된 문자열(`fmt`)과 함께 `CALLINFO`를 로그로 출력하는 매크로
    • UE_LOG 첫 번째 매개변수 : 로그 카테고리(TPS)
    • UE_LOG 두 번째 매개변수 : 로그 수준(Warning)
    • UE_LOG 세 번째 매개변수 : 실제 출력될 메시지 ("%s %s"는 `CALLINFO`와 `fmt`의 출력 결과를 합침)
      • `*FString::Printf(fmt, ##**VA_ARGS**)` : 가변 인수를 포함하여 형식화된 문자열 생성
      • ⭐ `FString`은 `*`(포인터)로 넣어준다
      • `fmt` : 출력할 문자열 형식 - Format String을 포함한 문자열
      • `...` : fmt에 맞춰 삽입될 값들 - 가변 인수
      • `Printf` : C++의 sprintf와 비슷하게 동작

03) `TPSProject.cpp` 에서 Custom Log 사용하기

  • `TPSProject.cpp`에 custom log 사용을 위해 `DEFINE_LOG_CATEGORY(TPS);` 추가
// TPSMAR.cpp

#include "TPSMAR.h"
#include "Modules/ModuleManager.h"

IMPLEMENT_PRIMARY_GAME_MODULE( FDefaultGameModuleImpl, TPSMAR, "TPSMAR" );


/***** Custom Log Category, Custom Log 사용 *****/
DEFINE_LOG_CATEGORY(TPS);

 


04) ` TPS_GameModeBase .cpp` 에서 Custom Log 사용하기

  1. TPS_GameModeBase.h에 생성자 생성
  2. TPS_GameModeBase .cpp의 생성자에서 매크로 사용
    1. `TPSMAR.h` 파일 include
    2. 생성자에서 custom log 사용
// TPS_GameMode.h

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/GameModeBase.h"
#include "TPS_GameMode.generated.h"

UCLASS()
class TPSPROJECT_API ATPS_GameMode : public AGameModeBase
{
	GENERATED_BODY()
	
public:
	/***** TPS_GameMode.cpp 에서 Custom Log 사용하기 - 250203 *****/
	ATPS_GameMode();
};
// TPS_GameMode.cpp

#include "TPS_GameMode.h"
#include "TPSProject.h"     // Custom log 사용을 위해 include

ATPS_GameMode::ATPS_GameMode()
{
    /***** TPS_GameMode.cpp 에서 Custom Log 사용하기 - 250203 *****/
    PRINT_LOG( TEXT("My Log : %s"), TEXT("TPS Project!") );

    PRINT_CALLINFO();
}

05) 추가한 custom log가 제대로 실행되는지 확인

  1. TPSGameMode C++ 클래스를 상속받은 BP_TPSGameMode 생성
  2. 실행 후 Output Log에 Custom log가 찍히는지 확인

 

 

 

'UE > TPS' 카테고리의 다른 글

[UE5/TPS/Proto04] Bullet 구현  (0) 2025.02.12
[UE5/TPS/Proto03] Player Input Binding  (0) 2025.02.10
[UE5/TPS/Proto02] Player 생성 / Camera 셋팅  (0) 2025.02.09