인생언리얼TPS

3.1 프로토타입 버전 - 로그카테고리

UNREAL 2023. 12. 12. 01:09

3.1-1 TPS 프로젝트 생성하기

Create - Game - Blank - C++ - 스타터컨텐츠 (ThirdPerson템플릿은 나중에  그래픽만 임포트 할 예정) 선택하고 프로젝트명을 TPSProject로 합니다. 이대로 이름을 만들어야 예제 파일을 수정없이 사용가능합니다.

Source-TPSProject폴더로 이동 Public/Private 폴더를 만들고 TPSProject.Build.cs파일만 빼고 h는 퍼블릭, cpp는 private폴더로 이동시켜줍니다. 

파일 구조를 만졌으므로 Visual Studio가 재구성할수 있도록 TPSProject폴더의 프로젝트명 + .uproject위를 우클릭후 Visual Studio 프로젝트 파일을 새로 만듭니다.

만들어진 TPSProject.sin 파일을 더블클릭해서 열어줍니다.

 

소스코드정리하기

프로젝트폴더밑 Source폴더 아래 Private와 Public 폴더를 만들고 TPSProject.cpp는 Private, TPSProject.h는 public폴더로 이동 시켜 줍니다.

이렇게 파일을 이동 시키면 언리얼프로젝트 파일을 우클릭하고 GenerateVisualStudioProjectFiles를 다시 만들어줘야 합니다.

이제 TSPProject.sin 파일을 클릭해서 Visual Studio를 엽니다.  오른쪽 빈 화살표를 클릭해서 언리얼 에디터를 열겠습니다. 이렇게 해야 언리얼라이브코딩이 동작합니다.

레벨생성하기

Ctrl+N New Level을 만들어 Default(Basic) 레벨을 선택합니다. 

Ctrl+S로 TPSMap으로 Maps폴더를 만들어 저장합니다.

Projecting Setting - Maps&Mode에서 StartUp Map, Default Map을 TPSMap으로 설정합니다. 에디터가 로딩되면 자동실행됩니다.

OutLiner에서 Floor를 선택해서 Transform을 다음과 같이 합니다.

 

유틸리티 매크로 작성하기\

TPSProject.h

#pragma once

#include "CoreMinimal.h"

DECLARE_LOG_CATEGORY_EXTERN(TPS, Log, All);
#define CALLINFO (FString(__FUNCTION__) + TEXT("(") + FString::FromInt(__LINE__) + TEXT(")"))
#define PRINT_CALLINFO() UE_LOG(LogTemp, Warning, TEXT("%s"), *CALLINFO)
#define PRINT_LOG(fmt, ...) UE_LOG(TPS, Warning, TEXT("%s %s"), *CALLINFO, *FString::Printf(fmt, ##__VA_ARGS__))

TPSProject.cpp 로그카테고리 TPS를 만들어 줍니다. LogTemp를 이걸로 교체해주면 나중에 로그에서 확인가능합니다.

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

IMPLEMENT_PRIMARY_GAME_MODULE( FDefaultGameModuleImpl, TPSProject, "TPSProject" );
DEFINE_LOG_CATEGORY(TPS);
#pragma once
#include "CoreMinimal.h"
DECLARE_LOG_CATEGORY_EXTERN(TPS, Log, All);
#define CALLINFO (FString(__FUNCTION__) + TEXT("(")+FString::FromInt(__LINE__)+TEXT(")"))
#define PRINT_CALLINFO() UE_LOG(TPS, Warning, TEXT("%s"), *CALLINFO)
#define PRINT_LOG(fmt, ...) UE_LOG(TPS, Warning, TEXT("%s %s"), *CALLINFO, *FString::Printf(fmt, ##__VA_ARGS__))


언리얼 프로젝트의 게임 전반을 관리하는 GameModeBase를 부모로 클래스를 만들어 줍니다.

TPSProjectGameModeBase.h 

생성자를 추가해줍니다.

#pragma once

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

/**
 * 
 */
UCLASS()
class TPSPROJECT_API ATPSProjectGameModeBase : public AGameModeBase
{
	GENERATED_BODY()

public:
	ATPSProjectGameModeBase();
	
};

TPSProjectGameModeBase.cpp

생성자를 구현해줍니다.

#include "TPSProjectGameModeBase.h"
#include "TPSProject.h"

ATPSProjectGameModeBase::ATPSProjectGameModeBase()
{
	PRINT_CALLINFO();
	PRINT_LOG(TEXT("My Log : %s"), TEXT("TPS project!!"));
}

생성자를 새로 만들었으니 에디터를 닫고 빌드후 에디터를 열고 OutLog를 클릭해보면 로그가 많은데

SearchLog에 TPS를 입력하면 관련 로그만 볼수 있습니다. 생각보다 필터링이 안되서 전 TPS를 LogTps로 3군데 변경했습니다. 리빌드후에 적용됩니다. 왜 로그 카테고리를  정의하는지 아시겠죠