[UE4]Struct in Unreal

윤정민·2022년 5월 26일
0

Unreal Engine

목록 보기
2/34

1. Struct in C++

  • 언리얼 엔진 프로젝트에서 정규 구조체는 C++ 코드 내부에서 사용 가능하나, 에디터의 디테일 패널에 노출되지 않고 블루프린트에서도 사용이 불가능함
  • 예시
    struct Potion
    {
        int recoveryHp;
        float cooltime;
        string potionName;
    }

2. Blueprint Struct

  • contents browser에서 [블루프린트 > 구조체] 를 선택해 생성가능
  • C++에서 사용 불가능

3. USTRUCT

  • 생성 방법
    • 범용적으로 사용하는 경우에 헤더 파일을 생성해 사용함
    • C++클래스를 생성 (CustormStructs)
    • "CustormStructs.generated.h"를 include해줌
      include "CustormStructs.generated.h"
    • 일반적인 구조체 생성
      struct CustomStruct
      {
      public:
      	AActor* actor;
          int32 i;
          float f;
      }
    • 구조체 앞에 USTRUCT()를 붙여준다.
      • Atomic : 구조체가 항상 하나의 단위로 직렬화됨을 의미함
      • BlueprintType : 구조체가 블루프린트에서 사용될 수 있음을 의미함
      STRUCT(Atomic,BlueprintType)
      struct FCustomStruct
      {
      public:
      	AActor* actor;
          int32 i;
          float f;
      }
    • 구조체 제일 첫 줄에 GENERATED_USTRUCT_BODY 매크로를 넣어준다.
      • 해당 Struct가 Unreal object임을 알리는 매크로
      STRUCT(Atomic,BlueprintType)
      struct FCustomStruct
      {
      	GENERATED_USTRUCT_BODY
      public:
      	AActor* actor;
          int32 i;
          float f;
      }
    • 댕글링 포인터 문제에 대해 보호받기 위해 구조체의 모든 멤버 변수에 UPROPERTY 매크로를 붙인다.
      • GC의 수집 대상이 되어 가비지 컬렉팅 주기 때 오브젝트가 파괴되며 문제가 발생할 수 있음
      STRUCT(Atomic,BlueprintType)
      struct FCustomStruct
      {
      	GENERATED_USTRUCT_BODY
      public:
      	UPROPERTY(EditAnywhere,BlueprintReadWrite)
      	AActor* actor;
          UPROPERTY(EditAnywhere,BlueprintReadWrite)
          int32 i;
          UPROPERTY(EditAnywhere,BlueprintReadWrite)
          float f;
      }
  • C++에서 사용
    • 새 클래스 생성
    • 클래스 내에서 include "CustormStructs"를 해주어 사용함
  • BluePrint에서 사용
    • 새 블루프린트 생성
      1. 블루프린트 패널에서 변수를 새로 추가
        디테일 패널에서 변수 유형을 클릭한 다음 우리가 만든 구조체를 변수유형으로 선택해준다.
      2. 이벤트 그래프에 우클릭한 뒤 구조체의 이름을 검색하여 사용
        구조체의 변수를 따로 사용할 수도 있음
profile
그냥 하자

0개의 댓글