본문 바로가기

프로그래밍/Unreal

[UE4] CSV 파일

CSV 문서

첫번째 열을 row 를 구분하기 위한 필드로 데이터테이블로 매칭시에는 제외 된다.


blank,Index, ActorName

0,1,Class'/Game/Data/MyActor1.MyActor1_C'

1,2,Class'/Game/Data/MyActor2.MyActor2_C'


Actor 의 path 형태는 오브젝트 path 인데... 

클래스 객체는 에셋명에 _C 가 붙는다.







DataTable ROW 구조체 구성


블루프린트

Blueprints->Structures


csv 데이터를 가져와 저장할 구조체 편집

각 항목별 데이터 타입을 정의한다.

이름은 CSV 제목에 맞춰야 한다.


데이터 내용중 Actor 의 경우 오브젝트 타입을 Class 형식으로 선언해야 한다. 




CSV import

콘텐츠 브라우저에서 임포트

임포트시 DataTable Row Type을 위에 정의한 구조체로 설정


임포트 되면서 별도의 DataTable 애셋이 생성된다.

데이터 애셋에는 해당 데이터가 들어가 있고, 원본 CSV의 위치도 저장되어 있다.

따라서, 원본 CSV 수정시 리임포트만해도 자동으로 데이터가 업데이트 된다.




데이터 테이블 사용

블루프린트 함수

Get Data Table Row

Get Data Table Row Names



위의 샘플에서는 actor의 경우 클래스 경로를 가지고 있으므로, SpawnActor 를 사용해 생성~





C++ 구조체



USTRUCT(BlueprintType)

struct FMyData : public FTableRowBase

{

GENERATED_USTRUCT_BODY()


public:

UPROPERTY(EditAnywhere, BlueprintReadWrite)

int MyIndex;


UPROPERTY(EditAnywhere, BlueprintReadWrite)

TAssetPtr<UActor> Actor;

}



블루프린트와 동일한 방식으로 csv 임포트 후 데이터 구조를 MyData로 지정한다.

애셋 생성되면 원하는 이름으로 변경 : MyDataTable






데이터 테이블을 사용할 클래스



위에서 생성될 테이블을 담을 변수 생성

UDataTable* GameObjectLookupTable;



블루프린트에서 상속받아 클래스를 만드는 경우 에디터에서 수정할 수 있도록 선언한다.

UPROPERTY(EditAnywhere, BlueprintReadWrite)

UDataTable* GameObjectLookupTable;



C++ 에서 직접 읽어 올 경우 위치

DataTable'/Game/path/MyDataTable.MyDataTable'



FORCEINLINE UDataTable* LoadObjFromPath(const FName& Path)

     {

         if (Path == NAME_None) return NULL;

 

         return Cast<UDataTable>(StaticLoadObject(UDataTable::StaticClass(), NULL, *Path.ToString()));

     }


대략 BeginPlay()

{

GameObjectLookupTable = 

LoadObjectFromPath(TEXT("DataTable'/Game/path/MyDataTable.MyDataTable'"));

}




로우검색


FMyData* row = GameObjectLookupTable->FindRow<FMyData>

( FName RowName, FString& ContextString, bool bWarnIfRowMissing);



void GetAllRow( const FString& ContextString, OUT TArray<T*>& OutRowArray)







'프로그래밍 > Unreal' 카테고리의 다른 글

[UE4] 유리 매터리얼  (0) 2017.10.15
[UE4] 레벨 스트리밍  (0) 2017.10.15
[UE4] UI 관련 내용  (0) 2017.09.26
[UE4] 폰트  (0) 2017.09.26
[UE4] C++ 에셋, 오브젝트 레퍼런싱/객체생성  (1) 2017.09.25
[UE4] unreal delegate  (0) 2017.09.24
[UE4] 마우스 입력  (0) 2017.09.17
[UE4] 아웃라인 : 스텐실  (0) 2017.09.16
[UE4] 메쉬 외곽선 효과  (0) 2017.09.15
[UE4] 언리얼 기본 예제 분석  (0) 2017.09.13