UE_LOG 보충 (+ 과제)

2025. 1. 7. 15:10·Unreal Engine

1. 커스텀 로그 카테고리 만들기

  • 로그 카테고리는 CoreGloblals.h에 정의되어 있으며,
  • 우리가 출력 로그를 볼때 필터를 통해 원하는 로그만 체크해서 확인할 수도 있다.

왼쪽이 CoreGlobals.h 오른쪽이 출력 로그 필터의 모습

  • 우리가 원하는 이름으로 로그 카테고리를 만드려면, 먼저 우리의 프로젝트 파일명으로 생성된 파일(모듈 파일)로 가야한다.(아래 예시의 경우 SCC_CH2_5)
  • 헤더파일의 경우 (SCC_CH2_5.h) 아래 매크로를 사용하여 아래처럼 지정해주면 된다.
    • 첫번째 인자는 원하는 로그 이름
    • 두번째는 DefaultVerbosity
    • 세번째는 CompileTimeVerbosity
//모듈. h

#pragma once

#include "CoreMinimal.h"

DECLARE_LOG_CATEGORY_EXTERN(MyLogTest, Log, All);
  • cpp 파일의 경우 선언한 것을 정의를 해주면 된다.
//모듈.cpp

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

IMPLEMENT_PRIMARY_GAME_MODULE( FDefaultGameModuleImpl, SCC_CH2_5, "SCC_CH2_5" );

DEFINE_LOG_CATEGORY(MyLogTest);
  • 이 카테고리를 사용하려면, 모듈.h 파일을 include 한 후 사용하면 된다.
#include "SCC_CH2_5/SCC_CH2_5.h"  //include 해주기
#include "LogTestActor.h"

// Sets default values
ALogTestActor::ALogTestActor()
{
	PrimaryActorTick.bCanEverTick = true;

}

void ALogTestActor::BeginPlay()
{
	Super::BeginPlay();
	UE_LOG(MyLogTest, Warning, TEXT("Custom Log Category Test"));
}
  • 그 결과 아래처럼 필터에 내가 만든 커스텀 로그 카테고리가 뜨게 되며, 출력도 정상적으로 되는 것을 볼 수 있다.

필터에서 카테고리를 확인할 수 있다.
출력 모습

2. 과제

https://github.com/GBL22M/SCC_CH2-5/tree/main/SCC_CH2_5/Source/SCC_CH2_5

 

SCC_CH2-5/SCC_CH2_5/Source/SCC_CH2_5 at main · GBL22M/SCC_CH2-5

Contribute to GBL22M/SCC_CH2-5 development by creating an account on GitHub.

github.com

  • 코드: public 폴더의 MovingActor.h, private 폴더의 MovingActor.cpp
  • 필수 기능 가이드 주요 구현
    • Step 함수
      • 0 또는 1의 랜덤한 값을 return 해주는 함수
      • FMath::RandRange 사용
    • Move 함수
      • Step 함수의 값을 통해 Actor의 position을 움직여주고 UE_LOG를 통해 출력하는 함수

//MovingActor.h

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "MovingActor.generated.h"

UCLASS()
class SCC_CH2_5_API AMovingActor : public AActor
{
	GENERATED_BODY()
	
public:	
	AMovingActor();

protected:
	virtual void BeginPlay() override;

public:	
	void Move();
	int32_t Step();

private:
	FVector2D mStartPosition;
};
//MovingActor.cpp

#include "MovingActor.h"

AMovingActor::AMovingActor()
	:mStartPosition({0,0})
{
	PrimaryActorTick.bCanEverTick = true;
}

void AMovingActor::BeginPlay()
{
	Super::BeginPlay();
	
	for (int i = 0; i < 10; ++i)
	{
		Move();
	}
}

void AMovingActor::Move()
{
	int xStep = Step();
	int yStep = Step();
	mStartPosition.X += xStep;
	mStartPosition.Y += yStep;

	UE_LOG(LogTemp, Warning, TEXT("step (X: %d, Y: %d) | current position (X: %d , Y: %d)"),
    	xStep, yStep, (int)mStartPosition.X, (int)mStartPosition.Y);
}

int32_t AMovingActor::Step()
{
	return FMath::RandRange(0, 1);
}
  • 도전 기능 가이드 주요 구현
    • Distance 함수
      • FVector2D 두개를 받아서 두 위치 사이의 거리를 구해 리턴하는 함수
    • CreateEvent 함수
      • 50% 확률로 특정 이벤트를 발생하도록 하는 함수
      • 해당 함수에서는 0 또는 1의 값을 리턴한 다음 main 로직에서 해당 값을 통해 이벤트가 발생했는지 여부를 확인하도록 구현했다.

//MovingActor.h

...
	float Distance(FVector2D startPos, FVector2D endPos);
	int CreateEvent();

private:
	FVector2D mStartPosition;
	int32_t mEventCount;
	float mTotalDistance;
};
//MovingActor.cpp

#include "MovingActor.h"

AMovingActor::AMovingActor()
	:mStartPosition({ 0,0 })
	, mEventCount(0)
	, mTotalDistance(0)
{
	PrimaryActorTick.bCanEverTick = true;

}

void AMovingActor::BeginPlay()
{
	Super::BeginPlay();
	
	for (int i = 0; i < 10; ++i)
	{
		int eventFlag = CreateEvent();
		Move(i);

		if (eventFlag == 1)
		{
			UE_LOG(LogTemp, Log, TEXT("Event Occurs!"));
			mEventCount++;
		}
		if (eventFlag == 0)
			UE_LOG(LogTemp, Log, TEXT("Nothing Happened"));

	}

	UE_LOG(LogTemp, Log, TEXT("Total Distance : %f, Total Event Count: %d"), mTotalDistance, mEventCount);
}


void AMovingActor::Move(int stepIdx)
{
	int xStep = Step();
	int yStep = Step();

	FVector2D beforeMove = mStartPosition;
	mStartPosition.X += xStep;
	mStartPosition.Y += yStep;
	float stepDistance = Distance(beforeMove, mStartPosition);

	UE_LOG(LogTemp, Log, TEXT("%d ) step (X: %d, Y: %d) | current position (X: %d , Y: %d)"),
		stepIdx + 1, xStep, yStep, (int)mStartPosition.X, (int)mStartPosition.Y);
	UE_LOG(LogTemp, Log, TEXT("move distance: %f"), stepDistance);
	mTotalDistance += stepDistance;
}

int32_t AMovingActor::Step()
{
	return FMath::RandRange(0, 1);
}

float AMovingActor::Distance(FVector2D startPos, FVector2D endPos)
{
	float resultDistance = sqrt((startPos.X - endPos.X) * (startPos.X - endPos.X) + (startPos.Y - endPos.Y) * (startPos.Y - endPos.Y));

	return resultDistance;
}

int AMovingActor::CreateEvent()
{
	return FMath::RandRange(0, 1);
}

실행 결과

 

'Unreal Engine' 카테고리의 다른 글

Unreal Property System (Reflection)  (0) 2025.01.13
Unreal Engine Pointer Types  (2) 2025.01.09
Unreal Engine 간단한 로그 찍기  (3) 2025.01.06
Unreal Engine 5 TIL day 5  (4) 2024.12.20
Unreal Engine 5 TIL day 4  (2) 2024.12.19
'Unreal Engine' 카테고리의 다른 글
  • Unreal Property System (Reflection)
  • Unreal Engine Pointer Types
  • Unreal Engine 간단한 로그 찍기
  • Unreal Engine 5 TIL day 5
gbleem
gbleem
gbleem 님의 블로그 입니다.
  • gbleem
    gbleem 님의 블로그
    gbleem
  • 전체
    오늘
    어제
    • 분류 전체보기 (189)
      • Unreal Engine (73)
      • C++ (19)
      • 알고리즘(코딩테스트) (32)
      • TIL (60)
      • CS (4)
      • 툴 (1)
  • 블로그 메뉴

    • 홈
    • 카테고리
  • 링크

    • 과제용 깃허브
    • 깃허브
    • velog
  • 공지사항

  • 인기 글

  • 태그

    addonscreendebugmessage
    blend pose
    매크로 지정자
    템플릿
    const
    gamestate
    actor 클래스
    cin함수
    map을 vector로 복사
    additive animation
    motion matching
    상속
    C++
    character animation
    applydamage
    Vector
    DP
    싱글턴
    BFS
    enhanced input system
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
gbleem
UE_LOG 보충 (+ 과제)
상단으로

티스토리툴바