언리얼의 데이터 직렬화(Import/Export)

언리얼 엔진에서는 USTRUCTUCLASS 타입을 문자열 형태로 저장하거나, 반대로 복원할 수 있는 기능을 제공한다. 대표적인 예로 FVectorToString() 함수가 있다.

  FVector MyVec = FVector(1, 2, 3);
FString Exported = MyVec.ToString(); // "(X=1,Y=2,Z=3)"
  

이처럼 구조체 데이터를 문자열로 저장할 수 있으며, 문자열에서 다시 파싱하여 원래 값으로 복원하는 기능이 Import이다. 이 기능의 핵심 함수가 ImportTextItem()이다.

ImportTextItem()의 개요

ImportTextItem() 함수는 문자열을 구조체나 오브젝트의 필드로 변환하는 함수로, 다음과 같은 시그니처를 가진다:

  bool ImportTextItem(
    const TCHAR*& Buffer,
    int32 PortFlags,
    UObject* Parent,
    FOutputDevice* ErrorText
);
  
  • Buffer: 문자열의 시작 위치 (파싱이 진행됨에 따라 내부에서 이동됨)
  • PortFlags: 포맷 옵션 (거의 무시 가능)
  • Parent: 관련 부모 오브젝트 (대개 사용되지 않음)
  • ErrorText: 오류 메시지 출력 장치

ImportTextItem()의 활용 예

사용 시점설명
DataTable CSV 임포트CSV의 셀에 문자열 형태로 저장된 구조체 필드를 실제 구조체로 파싱
블루프린트 디폴트 값(X=1,Y=2) 같은 문자열을 구조체 값으로 설정할 때
디테일 패널/Ini 설정.ini 파일 혹은 에디터에서 문자열 기반 속성 설정

호출 흐름 예시

DataTable CSV

CSV가 다음과 같을 때:

  RowName,StatType
Row_1,Stat_MaxHp
Row_2,(StatType=Stat_MaxAttack)
  

StatType이 구조체일 경우, 각 셀의 문자열은 ImportTextItem()을 통해 파싱되어 구조체 필드로 설정된다.

디폴트 프로퍼티 설정

  MyStruct = (StatType=Stat_Accuracy)
  

디테일 패널이나 .ini에 이런 식으로 값을 넣으면 ImportTextItem()이 호출되어 내부적으로 필드에 파싱 결과가 들어간다.

사용자 정의 구조체의 경우

FVector, FColor 등 엔진 내장 구조체는 ImportTextItem()이 이미 구현되어 있다. 하지만 사용자가 만든 구조체는 직접 구현해야 한다.

  USTRUCT(BlueprintType)
struct FM1StatType
{
    GENERATED_BODY()

    UPROPERTY(EditAnywhere, BlueprintReadWrite)
    int32 StatType;

    bool ImportTextItem(const TCHAR*& Buffer, int32 PortFlags, UObject* Parent, FOutputDevice* ErrorText);
};
  

ImportTextItem()을 구현하지 않으면, 언리얼은 문자열을 구조체로 해석할 방법을 모르므로 오류가 발생한다. 따라서 CSV에서 "Stat_MaxHp" 혹은 "(StatType=Stat_MaxHp)" 형식의 문자열을 제대로 파싱하려면 적절한 파서 구현이 필수이다.

핵심 요약

항목설명
ImportTextItem()문자열에서 구조체 데이터를 파싱하는 함수
호출 시점DataTable CSV 임포트, 블루프린트 디폴트 값, .ini 파일 등
필요한 이유사용자 정의 구조체는 언리얼이 문자열을 해석할 방법이 없음
필수 조건UScriptStruct 등록 시 bWithImportText = true 설정 필요

필요하다면 반대 방향인 구조체 → 문자열 변환 함수인 ExportTextItem()도 함께 정리 가능하다.