특정한 형식을 통해 바이트 배열 방식으로 입출력장치(I/O)의 바이트 스트림 형태로 바꾸는 것. 게임은 pc, 모바일, 콘솔 등의 다양한 환경에서 돌아간다. 각 각의 플랫폼은 각자 다른 방식으로 구동되는데 언리얼 엔진에서는 이런 다양한 환경에 대응할 수 있는 메모리 할당과 에디터 기능을 제공하기 위해서 직렬화를 사용한다.

- 빌드 : UHT -> Unreal C++ compiler(직렬화) -> Module -> DLL
- 패키징 : DLL -> .exe(DLL을 실행 시키는 파일)
**DLL에는 게임을 만드는데 사용한 에셋 정보와 중간언어(IL)로 번역된 작성한 소스 코드 정보등이 들어간다.
언리얼에서 직렬화 되기 위해서는 반드시 UObject클래스를 상속 받아야한다.
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "클래스명.gnerated.h"
UCLASS()
class 프로젝트명_API 클래스명 : AActor
{
GENERATEDBODY()
}
- gnerated.h : GENERATEDBODY()를 포함하기 위한 헤더
- UCLASS() : 직렬화 될 클래스라는 것을 명시
- GENERATEDBODY() : 직렬화를 하기 위한 내용들은 물고 있는 메크로 함수
**직렬화하기 위해선 반드시 위 3개 존재해야 한다.
UPROPERTY(변수) : 에디터에 공개될 변수들
EditAnywhere : 에디터와 화면에 배치된 디테일 창에서도 다 편집할 수 있음.
EditDefaultsOnly : 에디터 내에서만 편집가능하고, Instance화되어 배치된 디테일 창에서는 값을 변경할 수 없다.
EditInstanceOnly : 에디터에서는 편집 불가능하고, 화면에 배치되어 인스턴스화가 되면 값을 변경할 수 있다.
인스턴스화 되어 화면에 배치된 값은 에디터에서 설정한 값을 기본값으로 가지게 되고, 에디터의 기본값은 C에서 초기화한 값이 기본값이 된다.VisibleAnyWhere : 편집은 불가능하고, 값을 확인할 수 있다. 주로 실시간으로 변하는 값이 맞는지 확인하기위해서 사용한다.
(protected권장) : 블루프린트에서는 C++에서 작성한 코드를 상속받아 만들어지는 구조이기 때문에 private는 사용할 수 없음.
BlueprintReadWrite : 블루프린트에서 Get과 Set이 모두 가능함.
BlueprintReadOnly : Get만 가능함.