언리얼엔진 UE5

[UE5/CSV] 블루프린트에서 게임 데이터 관리하기 (다차원 배열 문제 해결)

jenny330 2023. 4. 1. 23:04

언리얼 엔진은 다차원 배열을 지원하지 않는다. 

여기저기 찾아봤는데... 정말로 없다. (충격) 

하지만 게임 데이터를 복합적으로 저장해 주려면 이 형태가 편한 경우가 굉장히 많고, 지금 작업하고 있는 게임의 경우 다차원 배열 형태가 정말 꼭 필요해서 다른 방법을 찾다가 csv라는 걸 알게 되었다!!

 

CSV란?

CSV(comma-separated values)는 몇 가지 필드를 쉼표(,)로 구분한 텍스트 데이터 및 텍스트 파일이다. 

쉽게 말해, 엑셀로 정리해두는 데이터 테이블을 프로그램이 읽을 수 있는 형태로 바꿔주는 것이다.

 

 

CSV 파일 만들기

우선 엑셀 파일을 만든다.

 

 

테이블에 필요한 데이터를 저장하여 채운다. 각 카테고리의 이름은 블루프린트에서도 그대로 쓰게 될 거니까 신중히 결정해서 써야 한다. 첫 번째 열의 경우는 각 행을 참조할 때 사용할 이름이 되기 때문에 아래와 같이 인덱스로 잡아주는 게 편할 듯 하다. 

 

int, float, string을 다양하게 사용하여 정리할 것이다.

 

 

데이터 작성이 끝나면 이대로 저장하지 말고, csv 파일로 내보내기를 한다.

 

 

이렇게 저장하면 아래와 같이 쉼표로 분리된 형식의 데이터가 된다. 

 

 

 

이걸 이제 언리얼에 넣을 거다.

 

 

 

언리얼에서 CSV 파일 사용하기

이제 언리얼에서 이 파일을 열어서 사용해보자!

csv 파일을 가져오기 전에, 이 데이터 구조를 저장할 구조체를 만든다. 블루프린트 중에 "구조체" 형식의 블루프린트를 만들면 된다. 

 

 

이름은 BP_UserData_Struct로 지었다. 이게 블루프린트이고, 구조체 형식이라는 것이 이름에 들어가면 나중에 참고하기 좋다. 

 

이 블루프린트를 처음 열면 이렇게 생겼다.

 

 

여기에 변수를 추가해 줄 거다. 이 변수들이 바로 아까 지은 열의 이름들이다. 이름을 아까와 !!똑같이!! 설정해주는 것이 중요하다.

 

 

예쁘게 정리해 주었다. 각 변수의 자료형도 각 열에 넣은 자료형에 맞게 설정해주었다.

 

이제 csv파일을 이 구조체에 넣어 보자. 

 

 

콘텐츠 브라우저에서 임포트를 클릭한다.

 

 

 

잘 불러와진다!! 만들어둔 블루프린트 타입으로 임포트 해 오자.

 

(이때 csv파일 경로명에 한글이 포함되어 있으면 임포트가 안 되기도 하는 거 같다. 항상 경로명은 영어가 안전. 다운로드 이런 폴더에 넣어놓고 쓰지 말자)

 

 

 

깔끔하게 잘 불러와졌다. 

 

 

블루프린트에서 CSV 파일 사용하기

마지막으로 게임 속에서 이 데이터를 이용해 보자. 이것도 진짜 쉽다. 

 

블루프린트를 열어준다.

 

 

여기에서 우클릭을 하고 "데이터 테이블 행 가져오기"를 클릭한다.

 

 

 

그러면 아까 만들어둔 데이터 테이블을 가져올 수 있다. (다른 프로젝트를 캡쳐해서 쓰느라 파일명이 다 다른데.. 그냥 같은 거라고 봐주시면 됩니다)

 

 

이제 이걸 게임 코드에 넣을 수 있다!! Row Name은 아까 설정한 열 중 가장 첫번째 열이 되겠다. (이 경우는 Index)

물론 게임 캐릭터나 아이템 등에 임의의 이름을 붙여 사용할 수도 있을 것이다. 여기서는 순서대로 불러와야 하기 때문에 숫자로 이름을 붙였다. 

 

 

 

아웃 행에서 노드를 컨텍스트에 따라 열면 이 구조체를 분해할 수 있다.

 

 

 

아까 만든 5개의 변수가 모두 잘 뜬다. 게임 코드에 넣어 잘 사용해주자.