언리얼 Document를 보다보면 아키타입이라는 말이 자주 나오는데 구글링을 해도 많은 자료가 나오진 않아서 오늘은 아키타입이란 무엇인지 알아보고자 한다. 일단 사전에 Archetype의 단어 뜻에 대해 검색해보았다. 우리나라말로는 "전형"이라고 떠서 의미가 확 와닿진 않았는데 영어 해석을 보면 "A perfect example of something"이라고 쓰여져있다. 무언가의 틀? 원형?과 같은 의미로 쓰이는 것 같다. 언리얼에서 Archetype에 대해 정의한 문서는 존재하지 않았지만, 이 아키타입이라는 말이 제일 많이 나오는 부분인 UPROPERTY의 속성 지정자에 대한 Documents를 통해 단서를 얻을 수 있었다.
- EditAnywhere : 에디터 내의 속성 창, 아키타입 및 인스턴스를 통해 이 속성을 편집할 수 있음을 나타냅니다.
- EditInstanceOnly : 속성 창에서 이 속성을 편집할 수 있지만 아키타입이 아닌 인스턴스에서만 편집할 수 있음을 나타냅니다.
- EditDefaultsOnly : 속성 창에서 이 속성을 편집할 수 있지만 아키타입이에서만 편집할 수 있음을 나타냅니다. 이 연산자는 Visible* 지정자와 호환되지 않습니다.
- VisibleAnywhere : 이 속성이 모든 속성 창에 표시되지만 편집할 수 없음을 나타냅니다.
- VisibleInstanceOnly : 이 속성은 아키타입이 아닌 인스턴스의 속성 창에만 표시되며 편집할 수 없음을 나타냅니다.
- VisibleDefaultsOnly: 이 속성은 아키타입의 인스턴스의 속성 창에만 표시되며 편집할 수 없음을 나타냅니다.
위의 설명들을 유심히 읽어보면 '속성 창'은 '아키타입'과 '아키타입이 아닌 인스턴스' 이렇게 둘로 나뉘어진다. 그리고 아키타입이 아닌 인스턴스는 Instance로 표기되고 아키타입은 Defaults로 표기된다. C++에서는 오브젝트의 원형을 코드에서만 정의하기 때문에 의미가 잘 와닿지 않았던 것인데, 블루프린트를 사용하면 이 '원형'을 에디터에서 볼 수 있다. 그리고 이 원형을 실제 맵에 배치한 것이 인스턴스이다. 이를 이해하기 쉽게 보여주고 증명하기 위해 한 가지 테스트를 진행했다.
간단히 설명하자면 빨간색의 아키타입들은 내가 만든 C++클래스인 MyMonster에서 파생한 블루프린트 클래스이고 이를 각각 맵에 배치한것이 파란색의 인스턴스들이다. 코드에서 이들이 소유하고 있는 변수 두개를 각각 인스턴스/아키타입 에서만 볼수있게 지정자를 변경해보았다.
private:
UPROPERTY(VisibleInstanceOnly, BlueprintReadOnly, Category = Attack, Meta = (AllowPrivateAccess = true))
float AttackRange;//인스턴스에서만 볼 수 있다.
UPROPERTY(VisibleDefaultsOnly, BlueprintReadOnly, Category = Attack, Meta = (AllowPrivateAccess = true))
float AttackRadius;//디폴트(아키타입)에서만 볼 수 있다.
AttackRadius 변수는 VisibleDefaultOnly로 지정자를 변경했기 때문에 인스턴스의 디테일 패널에 나타나지 않는 모습을 볼 수 있다.
이번엔 블루프린트 안으로 들어가서 확인해보았다. 마찬가지로 Attack Range 변수는 VisibleInstanceOnly 로 지정자를 변경했기 때문에 블루프린트의 디테일 패널에 나타나지 않는다.
이를 통해 아키타입이 블루프린트 클래스를 뜻한다고 단정지을 수는 없지만 그래도 UPROPERTY에서의 Visible, Edit 지정자들의 의미에 대해 알게 되었기 때문에 궁금증 해결이었다!!
![](https://t1.daumcdn.net/keditor/emoticon/friends1/large/007.gif)
'UE4' 카테고리의 다른 글
[UE4] UIOnly InputMode에서 Key Input 허용하는 방법 (2) | 2023.03.31 |
---|---|
[UE4] MSB 3073 오류 해결법 (0) | 2023.03.29 |
[UE4] 인터페이스 (Interface) (0) | 2023.02.25 |
[UE4] 스마트 포인터 (Smart Pointer) (0) | 2023.02.24 |
[UE4] 언리얼 ui 최적화 기법 (4) | 2023.02.21 |