3 - C++ 코드 작성 및 컴파일

C++ 클래스를 작성하고 언리얼 엔진으로 컴파일합니다.

Windows
MacOS
Linux
이 페이지의 내용:
  1. Visual Studio 에서 Solution Explorer 패널을 사용하여 새로 만든 C++ 파일을 찾아보겠습니다. 우리 예제에서는 이름이 FloatingActor.cpp, FloatingActor.h 식으로 되어있으며, QuickStart 프로젝트 안에 있을 것입니다.

    SolutionExplorer_Files.png

    이제 코드를 작성하려는 시점입니다. 이 페이지 하단에서 종료 시점 상태의 사용된 모든 코드를 찾아보실 수 있습니다.

    Xcode 에서 새로 만든 C++ 파일을 찾아보겠습니다. 우리 예제에서는 이름이 FloatingActor.cpp, FloatingActor.h 식으로 되어있으며, QuickStart 프로젝트 안에 있을 것입니다.

    SolutionExplorer_Files_Mac.png

    이제 코드를 작성하려는 시점입니다. 이 페이지 하단에서 종료 시점 상태의 사용된 모든 코드를 찾아보실 수 있습니다.

  1. FloatingActor.h 에서 닫힌 괄호와 파일 끝의 세미콜론 바로 앞에 다음 코드를 추가하겠습니다:

    float RunningTime;
  2. FloatingActor.cpp 로 전환하여, AFloatingActor::Tick 끝의 닫힌 괄호 직전에 다음 코드를 추가합니다:

    FVector NewLocation = GetActorLocation();
    float DeltaHeight = (FMath::Sin(RunningTime + DeltaTime) - FMath::Sin(RunningTime));
    NewLocation.Z += DeltaHeight * 20.0f;       //Scale our height by a factor of 20
    RunningTime += DeltaTime;
    SetActorLocation(NewLocation);

    방금 작성한 코드는 FloatingActor 가 위아래로 부드럽게 나타났다 사라지도록 만드는데, 시간에 따른 운동 기록을 추적하기 위해 만든 RunningTime 변수를 사용한 것입니다.

  • 코딩이 완료되었으니, Solution Browser 의 프로젝트에 우클릭 후 Build 명령을 선택하거나, 언리얼 에디터컴파일 버튼을 누르면 컴파일 가능합니다. 컴파일이 성공하면 언리얼 에디터 가 자동으로 변경사항을 로드합니다.

    CompileFromVS.png

    Visual Studio 에서 컴파일하는 모습.

    CompileFromEditor.png

    언리얼 에디터 에서 컴파일하는 모습.

Xcode 에서 빌드할 때는 게임 프로젝트만 컴파일하는 것이지, 에디터는 아닙니다.

  • 코딩이 완료되었으니 XCode 의 Debug Configuration 을 사용하여 컴파일해 주면 됩니다. Product > Build 옵션입니다. XCode 의 Development Configuration 을 사용해서도 컴파일 가능합니다. Product > Build For > Profiling 옵션입니다. 또는 언리얼 에디터컴파일 버튼을 눌러도 됩니다. 컴파일이 성공하면, 언리얼 에디터 에 자동으로 변경사항이 로드됩니다.

CompileFromXCode.png

Xcode 내 빌드 명령 위치입니다.

ProjectBuild_mac.png

XCode 에서 현재 선택된 구성으로 컴파일하는 모습입니다.

ProjectBuildProfile_mac.png

XCode 의 Development 구성으로 컴파일하는 모습입니다.

CompileFromEditor.png

언리얼 에디터 에서 컴파일하는 모습입니다.

바이너리 에디터를 실행할 때, Uncooked 환경설정으로 프로젝트를 리빌드한 경우 -game 플래그를, Debug 환경설정으로 프로젝트를 리빌드한 경우 -debug 플래그를 붙여주는 것이 중요합니다.

이제 코드를 기반으로 언리얼 에디터 에 오브젝트를 만들 준비가 되었습니다! 참고로, 이 글에 사용된 모든 코드는 아래 포함되어 있습니다.

완성 코드

FloatingActor.h

// Copyright 1998-2018 Epic Games, Inc. All Rights Reserved.

#pragma once

#include "GameFramework/Actor.h"
#include "FloatingActor.generated.h"

UCLASS()
class QUICKSTART_API AFloatingActor : public AActor
{
    GENERATED_BODY()

public: 
    // Sets default values for this actor's properties
    AFloatingActor();

protected:
    // Called when the game starts or when spawned
    virtual void BeginPlay() override;

public:
    // Called every frame
    virtual void Tick( float DeltaSeconds ) override;

    float RunningTime;
};

FloatingActor.cpp

// Copyright 1998-2018 Epic Games, Inc. All Rights Reserved.

#include "QuickStart.h"
#include "FloatingActor.h"

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

}

// Called when the game starts or when spawned
void AFloatingActor::BeginPlay()
{
    Super::BeginPlay();

}

// Called every frame
void AFloatingActor::Tick( float DeltaTime )
{
    Super::Tick( DeltaTime );

    FVector NewLocation = GetActorLocation();
    float DeltaHeight = (FMath::Sin(RunningTime + DeltaTime) - FMath::Sin(RunningTime));
    NewLocation.Z += DeltaHeight * 20.0f;       //Scale our height by a factor of 20
    RunningTime += DeltaTime;
    SetActorLocation(NewLocation);
}