플레이어가 가능한 행동들을 Widget을 통해서 선택할 수 있는 기능을 만들어보려고 한다.
현재 프로세스는
1. Action Widget을 호출하는 버튼 Input
2. Action Widget 할당 후 Add View Port
3. Action Struct에서 행동 가능한 Structure 정제
4. 행동 가능한 Structure 수 만큼 버튼에 할당 후 버튼 생성
5. 버튼 클릭 시 플레이어 캐릭터가 해당 행동 실행
이런 식으로 진행된다.
2번까지는 구축을 해놨고
3번부터 구축해야한다.
나머지 작업을 위한 순서
1. Action Structure 만들기
2. Action Button 만들기
3. Action Widget 만들기
먼저 Action Structure를 만들어보자.

C++로 클래스 None으로 만들어준다.

#include "CoreMinimal.h"
밑에 ActionStruct.generated.h를 include해준다.
여기서 CoreMinial.h란
CoreMinimal.h : 언리얼 오브젝트가 동작할 수 있는 최소 기능만 선언된 헤더 파일 (기본적인 타입, 연산 등)
generated.h는 가장 밑부분에서 include 해야한다.
클래스.generated.h : 리플렉션을 위한 헤더파일이다. 소스 코드를 컴파일 하기 이전에 Unreal Header Tool(UHT)를 사용해 클래스 선언을 분석하고 언리얼 실행 환경에 필요한 부가 정보를 해당 파일에 생성한다. 해당 헤더를 포함하는 것으로 UENUM, UCLAS, UPROPERTY 등과 같은 키워드를 사용 가능하고 스크립트로 관리하던 다양한 정보를 엔진 에디터에서 다룰 수 있다.
구조체 이름 또한 F를 붙여 FActionStruct로 수정해준다.

USTRUCT를 추가하고 BlueprintType 애트리뷰트를 사용하여 블루프린트에서도 이 Structure를 사용할 수 있게 한다.
GENERATED_BODY() 매크로를 추가하여 UHT가 생성하는 코드를 삽입한다.
#include "Engine/DataTable.h"로 DataTable을 include하고
FTableRowBase를 상속받는다.

데이터 테이블에 해당 구조체를 할당할 수 있게 됐다.

AllowPrivateAccess : protected나 private로 선언된 변수를 에디터에서 확인과 수정을 가능하게 한다.
NativeOnInitialized() : 위젯이 생성될 때 딱 한번 호출하는 함수.
BlueprintCallable : C++ 코드로 만든 함수를 레벨 블루 프린트나 블루 프린트에서 호출 가능하게 하는 매크로
#include "ActionStruct.h" 로 구조체 헤더파일을 include 하고 ActionStruct 변수를 선언했다.