UE4

[UE4] 아키타입(Archetype)

Honey Badger 2023. 3. 2. 14:58

   언리얼 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 지정자들의 의미에 대해 알게 되었기 때문에 궁금증 해결이었다!!