프로그래밍 공부
작성일
2024. 1. 31. 14:47
작성자
WDmil
728x90

값의 정보를 CSV파일로 저장, 불러오기 해보자.

먼저, CSV파일 형태로 저장하기 위해 형식을 만들어야 한다.


데이터 테이블 만들기

데이터 테이블은 위와같이 생성할 수 있다.

 

지정된 데이터 테이블에 대해 형식을 저장하거나, 일정 형식으로 저장되어있는 CSV와 같은 형태로 데아터를 지정하고 불러오면 된다.

 

데이터 테이블을 만들 시에 위와같이 가져올 수 있다. CSV파일 형태로 데이터가 저장되며, 여기서 수정하여 내보낼 수 있다.

 

또는 CSV파일을 가져올 수도 있다.


데이터 테이블 불러오기

형식이 만들어져 있는 CSV파일이다. 이 데이터를 언리얼에서 가져와 사용하려면 다음과 같은 순서를 따른다.

먼저, 가져올 데이터 테이블 CSV의 형식을 전부 지정해주어야 한다.

블루프린트 -> 구조체 로 이동하여, 구조체 블루프린트를 생성해준다.

이 구조체 블루프린트를 사용해서 객체의 구조체값을 활용하여 CSV파일을 로드할 것 이다.

CSV파일을 로드할 때 이 구조체의 순서대로 값을 가져와 기입해준다.

위와 같은 창이 떠있으면 된다.

 

위 창에서 가져올 CSV파일의 형태를 확인해보고, 순서대로 기입해주면 된다.

현재 구조체의 데이터타입은, 1번은 몽타주 두번째는 플롯, 세번째는 이름(FString) 네 번째는 Boolean형태로 이루어져 있음을 알 수 있다.

 

위와같이 설정해준다.

이제 CSV를 로드할 때 이 구조체형태를 지정하면, 위 구조체 형태로 받아오려고 언리얼이 시도할 것 이다.

파일에서 이 폴더로 에셋을 임포트 시도한다.

CSV를 임포트 시도하면 다음과 같은 형태가 나타난다.

위 데이터테이블 옵션에서, 데이터테이블 행 타입 선택을 통해 우리가 방금 만들었던 데이터테이블 행 타입을 선택하여, 순서대로 데이터를 받아와 구조체를 만들면 된다.


결과

위와같은 결과에서 None이 나타난 이유는, 현재 선택된 객체에 대해 참조할 수 없거나, 경로가 존재할 경우 해당 경로 내에 객체가 존재하지 않기 때문이다.

 

CSV에 존재하는 모션대로 데이터의 경로를 바꾸어주거나, 직접 수동으로 해당 위치에 맞는 모션을 기입해주는 방법을 사용하면 된다.


상태값 조정

 

이제 Bool형태로 조정하던 객체의 상태를 Enum형태로 조정하게 바꾸어보자.

우선 블루프린트-> 열거형 을 통해 Enum을 사용할 때 어떤 형태로 사용할 것인지 정의해준다.

생성하고 창에 들어가면 다음과 같은 창이 나타나는데, 창에서 디스플레이 추가, 추가한 디스플레이의 이름을 다음과 같이 변경해준다.

 

플레이어의 상태는, 기본값은 무기를 들던 아니던 Idle형태로 기본을 유지하고, Attacking은 공격중을 의미, Drawing은 무기를 드는과정, Sheathing은 무기를 다시 내려놓는 과정을 의미한다.

 

각각, 모든 형태의 애니메이션은 Idle형태일 때만 재생이 가능하도록 정의할 것 이다.


Enum형태로 관리

 

이제, BP_Player로 이동해보자.

지금까지 만들었던 Bool변수를 모두 Enum형태로 관리할 것 이다.

남길 Bool형태는 Drawn으로 무기를 들고 있는지 아닌지 확인하는 Bool형태만 남겨서 관리할 것 이다.

 

변수 추가후, 디테일창에서 우리가 만든 Enum을 지정해주자.

변수 유형에 우리가 만든 Enum형태가 나타났다면 성공이다.


모든 Bool타입 변환

 

이제, Bool타입을 한개씩 날리면서 Enum으로 변경해주자.

우선, Move에서 CanMove를 통해 무기를 드는과정 내리는 과정에는 이동하지 못하도록 설정하였다.

이걸 State를 통해 관리해보자.

CanMove에 관련되어있는 모든 Branch문을 State가 Idle형태일 때만 동작하도록 바꾸어준다.

 

나머지도 위와같은 방법으로 바꾸어준다.

Jumping
무기 장착 해제,
공격 이벤트

 

위와같이 정의하였다면, 성공이다.

이제 테스트 해보면 캐릭터의 애니메이션이 동작하지 않음을 확인할 수 있다.

 

ABP도 수정해주자.


ABP수정

 

BP에서 했던것 처럼 변수로 State를 가져온 뒤, 해당 State를 통해 ABP의 에니메이션 시퀸스를 관리한다.

변수는 위와같이 데이터를 틱마다 갱신해주면 된다.

 

그리고 애니메이션의 시퀸스가 변환하는 과정에서, 무기를 드는 변수, 뺴는변수를 사용하지 않음으로, 해당 Bool변수가 이어져있는 전환과정을 다음과 같이 수정해주면 된다.

 

기본 Enum값에 대해 == 의 비교연산으로, 지정된 Enum이 맞는지 확인하고, 맞다면 애니메이션을 전환해주면 된다.

 

이미 우리는 애니메이션의 일정조건에 해당할 때, BP_Player의 커스텀 이벤트를 실행하게 해놓았음으로, 해당 커스텀 이벤트가 실행되면 Player State가 Idle로 변하게 만들 수 있다는 걸 알고있다.

무기 들기
무기 장착 해제

위와같이 정의를 바꾸어주면 된다.

 

End_Attacking이 실행되면 Idle로 변환하게 만든다. 이걸 다른 커스텀 이벤트도 전부 해주면된다.

이런 방식이 마음에 들지 않는다면, 커스텀 이벤트를 Set_Idle를 만들어서, 이걸 호출해주어도 무방하다.

어차피 Idle로 설정해주기 때문에 여러개의 커스텀 이벤트를 사용할 필요는 없기 떄문이다.


테스트

 

728x90