본문 바로가기

언리얼 C++ 정리

09/05 학습정리( Reflection , UPROPERTY() )

Tip)

ㅁ 통합 개발 환경 (Intergrated Development Environment, IDE)

개발 프로세스를 효율적으로 관리하고 개발자의 생산성을 향상시키기 위해 다양한 도구와 기능을 통합한 환경을 제공하는 소프트웨어 언리얼엔진도 IDE

 

ㅁ int32로 쓰는 이유

평소에 int를 4바이트로 정의해서 사용하고 있다고 가정하고 다른 프로그램에서 int의 크기를 2바이트로 정의했을 경우 

2바이트를 넘는 수를 입력시 당연히 오버플로우가 일어난다. 이러한 현상은 int의 크기의 정의가 표준으로 정해져 있는것이 아니라서 int32로 타입 재정의(typedef)를 사용하여 오버플로우를 방지한다.

 

ㅁC++에서 오류가 났을경우

디버그 창에서 출력으로 넘어가면 오류 내용과 몇번째 줄에서 오류가 난건지 쉽게 확인가능하다.

출력에서 오류 위치를 확인했으면 Ctrl + G 를 사용하여 원하는 줄로 이동하면 손쉽게 수정 가능하다.

 

ㅁ범위지정 주석 /* */ 열고 닫기 Ctrl + MM 1인분하는 프로그래머가 되면 사용하자 


Reflection

코드로 작성해놓은 내용을 블루프린트 내부에 반영시키는것을 의미

CPP에서도 리플렉션을 지원을하지만 언리얼에서 먼저 매크로 방식을 사용하여 구현을 하였다.

 

그중에서 하나인 UPROPERTY 매크로로 변수나 식별자 앞에 UPROPERTY()를 붙이고 괄호안에 프로퍼티 지정자를 넣어서 이 변수는 이렇게 처리해라라고 해주는 방식이다.

UPROPERTY([specifier, specifier, ...], [meta(key=value, key=value, ...)])
Type VariableName;

위와 같은 형식으로 작성 가능하며 ,(콤마)를 이용하여 지정자를 여러개 설정 가능하다.

UPROPERTY(EditAnywhere, Category = "ACategory|aCategory", Meta = (AllowPrivateAccess) )  이런식으로

 

  • Edit : 해당 변수의 값을 수정할 수 있음을 나타낸다. (Read & Write 와 같다고 보면 된다.)
  • Visible : 해당 변수의 값을 수정할 수 없고 보여지기만 한다. (ReadOnly 와 같다고 보면 된다.)
  • DefaultsOnly : 블루프린트 에디터 창의 디테일 탭에서만 가능해진다.
  • InstanceOnly : 월드 상에 배치된 오브젝트의 디테일 탭에서만 가능해진다.
  • Anywhere : 위의 두 경우를 모두 포함한다.

위를 조합하여 EditAnywhere, VisibleInstanceOnly와 같이 지정자를 사용하면된다. 


블루프린트 상에서 변수를 사용하려면 아래의 지정자를 UPROPERTY에 넣어주면된다

  • BlueprintReadOnly : 블루프린트 상에서 Get으로는 사용가능하고 Set은 사용불가능
  • BlueprintReadWrite : 블루프린트 상에서 Get으로 사용가능하고 Set으로도 사용가능

메타 태그는 UPROPERTY에서 사용하는 일반 지정자와는 달리 Meta = (...) 의 형식으로 괄호를 쳐줘야하며

UPROPERTY(EditAnywhere , Meta = (Bitmask))

UPROPERTY(EditAnywhere , Meta = (AllowPrivateAccess))의 형식으로 사용가능하다

변수중에서 Private로 설정하고 싶은 변수들을 private: 를 이용하여 private로 만들수 있지만

UPROPERTY(BlueprintReadWrite) int a 와같은 블루프린트에서만 사용가능한 변수들은 존재하지만 에디터에서 보이지않는데 Meta = (AllowPrivateAccess)를 붙여 private에서 접속을 허용시켜 블루프린트에서도 볼수있게 설정가능하다.

 

UCLASS abstract는 내일작성