챕터 3-2: Unreal Engine 기본 개념

언리얼 거토
|2025. 1. 7. 20:09

수업 목표

  • Unreal Engine의 개념과 구조를 이해하고 프로젝트 생성 방법 학습.
  • Unreal Engine의 주요 기능(UE_LOG, Random 등) 활용 방법 익히기.

언리얼 엔진 특징

  • 실시간 렌더링: 뛰어난 기술로 고품질 비주얼 구현 가능.
  • 블루프린트: 프로그래밍 지식 없이 게임 로직 제작 가능.
  • 다양한 플랫폼 지원: PC, 콘솔, 모바일 등 모두 지원.
  • 활성화된 커뮤니티: 튜토리얼과 포럼이 잘 활성화됨.

언리얼 엔진 설치하기

(생략)

 

환경셋업

  • Visual Studio에서 " C++을 사용한 게임 개발" 도구 및 기능 설치
  • Unreal Engine editor에서 라이브 코딩 활성화 해지(VS와 충돌 방지)

Actor

  • 게임 내 배치 가능한 모든 객체를 의미.
  • 예: 비행기, RPG 주인공 등.

C++클래스로 Actor 생성(한글 이름X) -> Visual Studio 자동 생성 -> UE_LOG 추가 -> 액터 배치(드래그) -> 출력로그 확인 

 

코드 예제: 369 게임

int Start = 1; 
int End = 30;

for (int i = Start; i <= End; ++i)
{
    FString Number = FString::FromInt(i);
    bool bIsClap = false;

    for (TCHAR Char : Number)
    {
        if (Char == '3' || Char == '6' || Char == '9')
        {
            bIsClap = true;
            break;
        }
    }

    if (bIsClap)
    {
        UE_LOG(LogTemp, Warning, TEXT("짝"));
    }
    else
    {
        UE_LOG(LogTemp, Warning, TEXT("%d"), i);
    }
}

 

코드 예제: 랜덤 숫자 합계 출력

int MinValue = 1;
int MaxValue = 100;

int RandomNumber1 = FMath::RandRange(MinValue, MaxValue);
int RandomNumber2 = FMath::RandRange(MinValue, MaxValue);
int RandomNumber3 = FMath::RandRange(MinValue, MaxValue);

int Sum = RandomNumber1 + RandomNumber2 + RandomNumber3;

UE_LOG(LogTemp, Warning, TEXT("Generated Numbers: %d, %d, %d"), RandomNumber1, RandomNumber2, RandomNumber3);
UE_LOG(LogTemp, Warning, TEXT("Sum of Numbers: %d"), Sum);

UE_LOG 사용법

  • 구조
    1. 카테고리: 로그를 분류하는 태그.
    2. 심각성: 로그의 중요도(색상으로 구분).
    3. 내용: 출력할 메시지.
      • 디버깅과 정보 확인에 매우 유용
  • 예시
UE_LOG(LogTemp, Log, TEXT("Game has started."));
UE_LOG(LogTemp, Display, TEXT("Welcome, %s!"), *PlayerName);
UE_LOG(LogTemp, Warning, TEXT("Player health is below maximum: %d"), PlayerHealth);
UE_LOG(LogTemp, Error, TEXT("No ammo left!"));

Unreal Engine + Visual Studio 사용 시 유의사항

프로젝트 관리

  • Unreal은 .uproject 파일 사용, Visual Studio의 .sln 파일은 사용하지 않음.
  • Unreal Editor나 Ctrl + Shift + B로 빌드.
  • Generated.h와 같은 자동 생성된 파일은 수정하지 않음.

Unreal에서의 코드 작성

  • 문자열은 TEXT() 매크로로 감싸기 (예: TEXT("Hello")).
  • 출력은 std::cout 대신 UE_LOG 사용.
  • Unreal 스타일 가이드에 맞게 UCLASS, UPROPERTY, UFUNCTION 매크로 사용.

헤더 파일과 소스 파일

클래스 선언은 헤더 파일에, 정의는 CPP 파일에 작성.

  • Unreal에서는 클래스를 헤더 파일에 선언하고, 메서드 구현은 CPP 파일에서 하는 것이 일반적.
  • 클래스 선언은 헤더 파일에, 정의는 CPP 파일에 작성.
    • Unreal에서는 클래스를 헤더 파일에 선언하고, 메서드 구현은 CPP 파일에서 하는 것이 일반적.
// Header file (.h)
UCLASS()
class AMyActor : public AActor
{
    GENERATED_BODY()

public:
    void MyMethod();
};

// Source file (.cpp)
void AMyActor::MyMethod() 
{
    // method implementation
}
  • 헤더 파일에서의 선언은 클래스 인터페이스 제공.
  • CPP 파일에서 메서드 정의로 구현. 이렇게 하면 코드가 더 깔끔하고 컴파일 성능도 향상됨.

디버깅 및 로그

  • Breakpoints를 설정하여 Unreal Editor와 Visual Studio에서 디버깅 가능.
  • Saved/Logs 폴더에서 Crash 로그 확인.

기타 팁

  • Unreal의 API 문서를 활용하여 함수와 클래스 사용법 확인.
  • 작은 기능 추가 후 바로 Unreal Editor에서 핫 리로드로 테스트.

기타의 기타

  • 두 점 사이의 거리는 **FVector::Dist()**로 계산.
float Distance = FVector::Dist(PointA, PointB);
  • 다국어 지원 시 FText 사용.
FText WelcomeMessage = NSLOCTEXT("MyGame", "Welcome", "Welcome to the Game!");
  • 위치나 방향은 FVector, 문자열은 FString 사용.
FVector Location = FVector(0.0f, 0.0f, 0.0f);
FString PlayerStatus = FString::Printf(TEXT("Player: %s, Health: %d"), *PlayerName, Health);

'TIL > C++' 카테고리의 다른 글

학생 성적 관리 시스템 (STL 활용)  (0) 2025.02.10
Unreal Engine에서 Tick 사용법  (0) 2025.01.08
챕터 3-1: 디자인 패턴  (0) 2025.01.06
챕터 2-4: 객체지향적 설계  (1) 2025.01.03
챕터 2-3 : STL 기초  (1) 2025.01.02