본문 바로가기
언리얼 최고/언리얼 c++

이득우의 언리얼 C++ 정리 - 3 (로깅 + 움직이는 액터)

by Lee_story_.. 2022. 8. 16.
728x90

 

*  아래의 책의 내용을 정리한 글입니다!  *

 

로깅?

이때까지 실행한 기록을 나타내 주는 행위로 언리얼에서도 출력 로그로 어떻게 작동하는지를 알아볼 수 있다.

 

코드로는 이미 로깅할 수 있는 매크로가 정의되어있으나

UE_LOG(카테고리, 로깅 수준, 형식 문자열, 인자.. )

 

 

책에서는 좀 더 쉬운 방법으로 로깅하기 위해 새로운 공용 매크로를 만들었다.

 

시작!

 

AreanaBattle.h 파일에 추가

#define "EngineMinimal.h"
DECLARE_LOG_CATEGORY_EXTERN(ArenaBattle, Log, All);

#define ABLOG_CALLINFO (FString(__FUNCTION__) + TEXT("(") + FString::FromInt(__LINE__) + TEXT(")"))
#define ABLOG_S(Verbosity) UE_LOG(ArenaBattle, Verbosity, TEXT("%s"), *ABLOG_CALLINFO)
#define ABLOG(Verbosity, Format, ...) UE_LOG(ArenaBattle, Verbosity, TEXT("%s %s"), *ABLOG_CALLINFO, *FString::Printf(Format, ##__VA_ARGS__))

 

  • ABLOG_S : 코드가 들어 있는 파일 이름과 함수, 그리고 라인 정보를 추가한다.
  • ABLOG : ABLOG_S 정보에 형식 문자열로 추가 정보를 지정해 로그를 남긴다.

 

AreanaBattle.cpp 파일에 추가

DEFINE_LOG_CATEGORY(ArenaBattle);

//~~~

void AFountain::BeginPlay()
{
	Super::BeginPlay();

	ABLOG_S(Warning);
	ABLOG(Warning, TEXT("Actor Name : %s, ID : %d, Location X : %.3f"), *GetName(), ID, GetActorLocation().X);
}

//~~~

 

 

액터의 주요 이벤트 함수

  • PostInitializeComponents : 액터에 속한 컴포넌트의 세팅이 완료되면 실행
  • BeginPlay :  액터 설치 시에 실행
  • EndPlay :  액터 제거 시에 실행
  • Tick  : 계속 실행

 

로그를 출력해보면

PostInitializeComponents >>  BeginPlay >>   EndPlay 순으로 로그가 출력

Tick 은 계속 출력

 

 

움직이는 액터 실습

 

무브먼트 컴포넌트들

  • Floating PawnMovement : 중력의 영향을 받지 않는 액터의 움직임 제공
  • Rotating Movement : 지정한 속도로 액터를 회전
  • Interp Movement : 지정한 위치로 액터를 이동
  • Projectile Movement : 액터에 중력의 영향을 받아 포물선을 그리는 발사체의 움직임을 제공(총알, 미사일 등)

 

Fountain.h 파일에 추가 -- 분수대 헤더 파일

#include "GameFramework/RotatingMovementComponent.h"

UCLASS()
class ARENABATTLE_API AFountain : public AActor
{
	GENERATED_BODY()

    //~~~

	UPROPERTY(VisibleAnywhere)
	URotatingMovementComponent* Movement;
    
    //~~~
};

 

 

Fountain.cpp 파일에 추가 

#include "Fountain.h"

// Sets default values
AFountain::AFountain()
{
 	// Set this actor to call Tick() every frame.  You can turn this off to improve performance if you don't need it.
	PrimaryActorTick.bCanEverTick = false; 

	RotateSpeed = 30.0f;
	Movement->RotationRate = FRotator(0.0f, RotateSpeed, 0.0f);
}

 

빙글빙글 돌아가는 분수대를 볼 수 있습니다!

 

 

 

 

틀린 점이 있다면 댓 달아주세요!

 

 

댓글