언리얼 엔진 로그(Unreal Engine log)는 언리얼 엔진 게임 개발 플랫폼에서 생성된 로그 메시지 시스템을 말한다. 이러한 메시지는 렌더링, 물리, 네트워킹 및 스크립팅 시스템을 포함하여 엔진 내의 다양한 시스템 및 구성 요소의 동작과 상태에 대한 정보를 제공한다.

 

목차

     

     


     

     

    Mesh

     

     
    01_Spawn
      C02_Mesh
    C02_Mesh_Sphere
    C02_Mesh_Cone
    Utilities
      CHelpers.h

     

     


    C02_Mesh_Sphere & BP_C02_Mesh_Sphere 생성

     

    C02_Mesh_Sphere.h

    더보기
    #pragma once
    #include "CoreMinimal.h"
    #include "01_Spawn/C02_Mesh.h"
    #include "C02_Mesh_Sphere.generated.h"
    
    UCLASS()
    class U2212_03_API AC02_Mesh_Sphere : public AC02_Mesh
    {
    	GENERATED_BODY()
    
    public:
    	AC02_Mesh_Sphere();
    };

     

     

    C02_Mesh_Sphere.cpp

    더보기
    #include "01_Spawn/C02_Mesh_Sphere.h"
    #include "Global.h"
    
    AC02_Mesh_Sphere::AC02_Mesh_Sphere()
    {
    	UStaticMesh* mesh = nullptr;
    	CHelpers::GetAsset<UStaticMesh>(&mesh, "StaticMesh'/Game/Meshes/Sphere.Sphere'");
    	Mesh->SetStaticMesh(mesh);
    }

     


     

    C02_Mesh_Cone & BP_C02_Mesh_Cone 생성

     

    C02_Mesh_Cone.h

    더보기
    #pragma once
    #include "CoreMinimal.h"
    #include "01_Spawn/C02_Mesh.h"
    #include "C02_Mesh_Cone.generated.h"
    
    UCLASS()
    class U2212_03_API AC02_Mesh_Cone : public AC02_Mesh
    {
    	GENERATED_BODY()
    
    public:
    	AC02_Mesh_Cone();
    };

     

     

    C02_Mesh_Cone.cpp

    더보기
    #include "01_Spawn/C02_Mesh_Cone.h"
    #include "Global.h"
    
    AC02_Mesh_Cone::AC02_Mesh_Cone()
    {
    	UStaticMesh* mesh = nullptr;
    	CHelpers::GetAsset<UStaticMesh>(&mesh, "StaticMesh'/Game/Meshes/Cone.Cone'");
    	Mesh->SetStaticMesh(mesh);
    }

     


     

    C03_Spawner & BP_C03_Spawner

     

    C03_Spawner.h

    더보기
    #pragma once
    #include "CoreMinimal.h"
    #include "GameFramework/Actor.h"
    #include "C03_Spawner.generated.h"
    
    UCLASS()
    class U2212_03_API AC03_Spawner : public AActor
    {
    	GENERATED_BODY()
    
    private:
    	UPROPERTY(EditAnywhere, Category = "Settings")
    		//TSubclassOf는 class를 제한하는 역할. AC_032_Mesh 클래스 이하로 선택할 수 있도록 제한.
    		//SpawnClasses[3] 배열로 생성. 
    		TSubclassOf<class AC02_Mesh> SpawnClasses[3];
    
    public:	
    	AC03_Spawner();
    
    protected:
    	virtual void BeginPlay() override;
    
    };

     

     

    C03_Spawner.cpp

    더보기
    #include "01_Spawn/C03_Spawner.h"
    #include "Global.h"
    #include "C02_Mesh.h"
    
    AC03_Spawner::AC03_Spawner()
    {
    }
    
    void AC03_Spawner::BeginPlay()
    {
    	Super::BeginPlay();
    
    	for (int32 i = 0; i < 3; i++)
    	{
    		if (SpawnClasses[i] == nullptr) //내부적으로 포인터를 가지고 있기 때문에 nullptr 체크가 가능하다.
    			continue;
    
    		FVector location = GetActorLocation();
    
    		FTransform transform;
    		transform.SetLocation(FVector(location.X, location.Y + i * 350, location.Z));
    
    		GetWorld()->SpawnActor<AC02_Mesh>(SpawnClasses[i], transform);
    	}
    }

     

     

    BP_C03_Spawner

    • 위의 마킹한 부분은 C03_Spawner에서 만든 TSubclassOf<class AC02_Mesh> SpawnClasses[3]; 부분이다. 
    • 세팅(언리얼에 Settings라고 입력하면 한국어버젼은 세팅이라 인식) - Spawn Classes - 매쉬 설정
      • 0: BP_C02_Mesh
      • 1: BP_C02_Mesh_Cone
      • 2: BP_C02_Mesh_Sphere

     


     

    실행화면

     

     

     


     

     

     

     

    Log 기록하기

     

    언리얼 엔진 로그(Unreal Engine log)는 언리얼 엔진 게임 개발 플랫폼에서 생성된 로그 메시지 시스템을 말한다. 이러한 메시지는 렌더링, 물리, 네트워킹 및 스크립팅 시스템을 포함하여 엔진 내의 다양한 시스템 및 구성 요소의 동작과 상태에 대한 정보를 제공한다.

    언리얼 엔진 로그는 런타임 동안 엔진에 의해 생성된 모든 메시지의 연대순 레코드를 포함하는 텍스트 파일이다. 이러한 메시지는 문제를 진단하고 문제를 디버그하며 성능을 최적화하는 데 사용할 수 있다.

    로그는 엔진 기능의 다른 측면에 해당하는 몇 가지 다른 범주로 구분됩니다. 이러한 범주에는 다음이 포함된다:

    로그: 이 범주에는 특정 시스템 또는 구성 요소와 관련되지 않은 일반 메시지가 포함된다.

    경고: 이 범주에는 잠재적인 문제 또는 주의가 필요할 수 있는 문제를 나타내는 메시지가 포함되어 있다.

    오류: 이 범주에는 엔진 충돌 또는 고장의 원인이 될 수 있는 심각한 오류를 나타내는 메시지가 포함되어 있다.

    디버깅: 이 범주에는 엔진 문제를 디버깅하고 진단하는 데 유용한 메시지가 포함되어 있습니다.

    상세: 이 범주에는 엔진 동작에 대한 추가 정보를 제공하는 자세한 메시지가 포함되어 있습니다.

    개발자는 언리얼 엔진 로그를 구성하여 특정 범주의 메시지만 표시하거나 특정 키워드 또는 문자열을 기준으로 메시지를 필터링할 수 있다. 이는 특정 문제에 집중하거나 로그의 노이즈 양을 줄이는 데 유용할 수 있다. 또한 나중에 분석할 수 있도록 로그를 파일에 저장하거나 엔진의 디버깅 도구 내에서 실시간으로 표시할 수 있다.

     

     

     
    01_Spawn
      C02_Mesh.h .cpp
    C02_Mesh_Sphere.h .cpp
    C02_Mesh_Cone.h .cpp
    02_Profilier
      C01_Log.h .cpp
    Utilities
      CHelpers.h
    CLog.h .cpp

     


     

    C03_Log 

     

    CLog.h

    더보기
    #pragma once
    #include "CoreMinimal.h"
    #include "GameFramework/Actor.h"
    #include "C01_Log.generated.h"
    
    UCLASS()
    class U2212_03_API AC01_Log : public AActor
    {
    	GENERATED_BODY()
    	
    public:	
    	AC01_Log();
    
    protected:
    	virtual void BeginPlay() override;
    
    public:	
    	virtual void Tick(float DeltaTime) override;
    
    };

     

     

    CLog.cpp

    더보기
    #include "02_Profiler/C01_Log.h"
    #include "Global.h"
    
    AC01_Log::AC01_Log()
    {
    	PrimaryActorTick.bCanEverTick = true;
    }
    
    void AC01_Log::BeginPlay()
    {
    	Super::BeginPlay();
    
    	CLog::Log(10);
    	CLog::Log(PI);
    	CLog::Log("C01_Log");
    	CLog::Log(GetActorLocation());
    	CLog::Log(GetActorRotation());
    	CLog::Log(this);
    
    	CLog::Log(__FILE__);
    	CLog::Log(__FUNCTION__);
    	CLog::Log(__LINE__);
    }
    
    void AC01_Log::Tick(float DeltaTime)
    {
    	Super::Tick(DeltaTime);
    }

    CLog.cpp에는 #include"Global.h"를 넣으면 안 된다.

    • 해당 경우 CLog.cpp에서 Global.h를 참조하고 Global에서 다시 CLog를 다시 참조한다.
    • 순환참조가 일어나서 문제가 생긴다.

     

     

     


     

    C01_Log & BP_C01_Log

     

    C01_Log.h

    더보기
    #pragma once
    #include "CoreMinimal.h"
    
    class U2212_03_API CLog
    {
    public:
    	//& 복사방지. const 수정금지
    	static void Log(int32 InValue);
    	static void Log(float InValue);
    	static void Log(const FString& InValue);
    	static void Log(const FVector& InValue);
    	static void Log(const FRotator& InValue);
    	static void Log(const UObject* InValue);
    };

     

     

    C01_Log.cpp

    더보기
    #include "Utilities/CLog.h"
    
    DEFINE_LOG_CATEGORY_STATIC(GP, Display, All)
    
    void Log(int32 InValue)
    {
    	//GLog->Log("GP", ELogVerbosity::Display, FString::FromInt(InValue));
    	UE_LOG(GP, Display, L"%d", InValue);
    }
    
    void CLog::Log(float InValue)
    {
    	UE_LOG(GP, Display, L"%f", InValue);
    }
    
    void CLog::Log(const FString& InValue)
    {
    	UE_LOG(GP, Display, L"%s", *InValue); //*char에서 바꿀때는 *붙인다.
    }
    
    void CLog::Log(const FVector& InValue)
    {
    	UE_LOG(GP, Display, L"%s", *InValue.ToString());
    }
    
    void CLog::Log(const FRotator& InValue)
    {
    	UE_LOG(GP, Display, L"%s", *InValue.ToString());
    }
    
    void CLog::Log(const UObject * InValue)
    {
    	FString str;
    
    	if (!!InValue) // InValue != nullptr과 같은 의미 //!!는 Not Nullptr를 의미한다.
    		str.Append(InValue->GetName());
    
    	//객체가 있는지 체크
    	str.Append(!!InValue ? " Not Null" : "Null");
    
    	UE_LOG(GP, Display, L"%s", *str);
    }

     

     


     

    실행화면