Game Develop

[UE5] UPROPERTY 본문

UnrealEngine5/이것저것

[UE5] UPROPERTY

MaxLevel 2024. 3. 3. 13:05

UPROPERTY를 당연히 쓰긴 써왔지만, 사실 각프로퍼티에 대해 좀 헷갈렸었다.

설명은 많지만 아키타입이 뭔지도 헷갈리고, 그냥 적용범위가 넓은 프로퍼티를 써서 되게만 해왔던 것 같다.

하지만 const처럼, 읽기전용으로 할것을 굳이 Edit관련 프로퍼티를 넣을필요가 없기에 한번 싹 정리를 했다.

 

공식문서등에 나오는 아키타입이란 것은, 우리가 어떤 액터를 만들고 해당 액터를 상속받는 블루프린트클래스파일을 만들경우 이 블루프린트파일이 아키타입이라 생각하면 된다.

유니티의 프리팹이랑 매우 비슷한 개념이라고 하며, UPROPERTY에서 아키타입에 관해 Edit이라던가 Visible관한 설명이 나오면 이 블루프린트파일내에서 디테일패널에 표시할건지, 수정까지할건지 등에 대한 속성을 결정하는거라 보면 된다.

 

 

위의 UPROPERTY를 보면 VisibileDefaultsOnly가 선언되어있는 것을 볼 수 있다.

해당 프로퍼티는 변수를 아키타입에서 읽기전용으로 사용할 것이라는 변수이고, 실제로 아래와 같이 나온다.

 

 

블루프린트파일내의 디테일패널에 노출되어있는 것을 볼 수 있다. Visible이기 때문에 읽기전용이다.

 

그리고 UPROPERTY 설명에 나오는 인스턴스에 대한 설명은, 게임이 실행되었을 때

 

 

 

저 우측하단의 빨간색부분의 디테일패널을 의미한다.

만약 EditAnywhere이나 EditInstanceOnly가 선언되어있을 경우, 저 디테일패널에서 실시간으로 값을 수정할 수 있으며 게임에 적용된다. 플레이를 멈출 시 시작했을때 값으로 되돌아간다.

 

그래서 나같은 경우 만약 미세한 조정, 뭐 충돌체같은거에 대해서는 인스턴스상에서 수정이 가능한 프로퍼티를 적용했다.

이외에 위의 예시에 있는 변수중 하나인 m_bIsWalking같은것들은 VisibleDefaultsOnly로 되어있긴 한데, 저거를 아키타입에서 굳이 표현할필요는 없을것같아서 VisibleInstanceOnly로 전부 바꿔주려 한다. 

그러면 실시간으로 상태값들이 잘 변경되고있는지 확인할 수 있기 때문에 괜찮을 것 같다.

 

 

추가적으로, UPROPERTY에는 Transient라는 프로퍼티가 존재한다.

이 프로퍼티를 추가하면 해당 변수를 직렬화에서 제외시킨다는것을 의미한다.