언리얼 엔진 5에서는 표준 C++ 코드를 작성한는 것도 가능하지만, 게임의 성능 향상을 위해 내장된 Reflection System이나 메모리 관리같은 엔진의 기능을 사용하는 것이 좋다.
새로운 언리얼 엔진 C++클래스를 생성하려면 먼저 어떤타입의 객체를 나타낼지 정의해야 한다.
타입의 정의되면, 헤더파일에 멤버변수와 멤버함수를 선언하고 소스 파일에 코드 로직을 구현한다.
프로그램이 런타임에 자신의 구조를 검사할 수 있는 기능
에디터의 디테일 패널, 직렬화, 가비지 컬렉션, 네트워크 복제, 블루프린트와 C++간의 통신같은 다양한 시스템을 지원한다.
Reflection을 사용하려면 시스템에 표시하려는 타입이나 프로퍼티에 UCLASS(), UFUNCTION() 또는 UPROPERTY()와 같은 매크로를 표기해야 한다.
이 매크로를 사용하기 위해
#include "[클래스이름].generated.h"
선언을 사용해야 한다.
프로그램이 원활히 실행될 수 있도록 메모리 누수나 성능 문제를 해결
C++에서는 가비지 컬렉션을 기본적으로 구현하지 않는다.
하지만 언리얼 엔진이 구현해 주기에 단지 객체의 참조가 유효한지 확인만 하면 된다.
UObject로부터 상속된 클래스는 가비지 컬렉션이 활성화되고, 시스템이 root에 객체를 유지한다.(객체가 삭제되지않고 보존됨)
하지만 root에서 제거되면 다음 가비지 컬렉터가 호출될 때 메모리에서 삭제된다.
블루프린트 클래스를 C++로 작성된 것처럼 볼 수 있다.
Tools -> C++ Header Preview를 클릭하고 원하는 블루프린트 클래스를 선택하면 헤더파일을 보여준다.


UObject : 언리얼 엔진의 기본클래스.
가비지 컬렉션, 네트워킹 지원, 프로퍼티 및 멤버함수의 리플렉션 등 엔진의 주요 기능 제공.
AActor : 에디터 또는 런타임중에 게임 레벨에 추가할 수 있는 UObject.
멀티플레이어 환경에서 네트워킹 중 복제될 수 있는 기본타입, 동기화가 필요한 모든 컴포넌트 정보 제공
UActorComponent : 액터 또는 액터 자체에 속하는 다른 컴포넌트에 연결할 컴포넌트 정의.
Ustruct : 일반적인 데이터 구조 생성. 특정 클래스에서 확장되지 않는다.
UEnum : 요소의 열거형
클래스 타입을 나타내기 위해 접두사를 사용한다.
#include "CoreMinimal.h"
#include "GameFramework/Character.h"
#include "ProjectPlayer.generated.h"
UCLASS()
class DEDICATEDPROJECT_API AProjectPlayer : public ACharacter
{
GENERATED_BODY()
public:
// Sets default values for this character's properties
AProjectPlayer();
...
//입력관련 속성
UPROPERTY(EditDefaultsOnly, Category = "Input")
class UInputMappingContext* imc_ProjectPlayer; //만들어둔 IMC_ProjectPlayer
UPROPERTY(EditDefaultsOnly, Category = "Input")
class UInputAction* ia_LookUp; // 만들어둔 IA_LookUp
UPROPERTY(EditDefaultsOnly, Category = "Input")
class UInputAction* ia_Turn; // 만들어둔 IA_Turn
//좌우 회전 입력 처리
void Turn(const struct FInputActionValue& inputValue);
//상하 회전 입력 처리
void LookUp(const struct FInputActionValue& inputValue);
...
};
프로젝트에 사용하고 있는 플레이어 헤더 파일이다.
#include "ProjectPlayer.generated.h"
이 필수 코드라인은 Unreal Header Tool이 자동 생성하며, 엔진에서 코드가 정상 작동하는데 필요한 매크로를 모두 포함한다.
이 파일은 헤더에서 선언된 마지막 include 파일이어야 하며, 그렇지 않으면 컴파일러가 오류를 발생시킨다.
Unreal Header Tool : 언리얼 엔진의 UObject 시스템을 지원하는 사용자 정의 파싱 및 코드 생성 도구
UCLASS() : UObject에서 파생되는 클래스의 리플렉션 데이터를 생성
USTRUCT() : 구조체의 리플렉션 데이터 생성
GENERATED_BODY() : 해당 타입에 필요한 상용구 코드로 대체됨
UPROPERTY() : 관련된 멤버 변수가 블루프린트 접근성이나 네트워크 복제와 같은 추가 기능이 있음을 엔진에 알림
UFUNCTION() : 확장된 블루프린트 클래스에서 이 함수를 호출하거나 블루프린트 자체에서 함수 재정의
이 페이지의 내용은 "언리얼 엔진 5로 개발하는 멀티플레이어 게임(저자 : 마르코 세치)" 책을 참고하여 개인적인 공부를 목적으로 제작되어 틀린 내용이 있을 수 있습니다.