무기를 위해서 UStaticMeshComponent 를 상속하는 UStaticWeaponComponent 를 만들었다고 가정합시다.



다음으로 나서 내가 정의한 커스텀 캐릭터의 멤버로 넣습니다.



다음으로 생성자에서 Weapon 컴포넌트를 생성해 줍니다.



그리고 나서 ACustomCharacter 를 가지고 플루프린트 클래스를 만듭니다. 그 다음 컴포넌트 리스트에서 Weapon 컴포넌트를 선택하면 Details 패널에 다음과 같이 나옵니다.


그림1. EditAnywhere 를 지정했을 때 Details 패널.


뭔가 평소에 보던 것과는 다릅니다. 이는 EditAnywhere 라는 속성 지정자 때문입니다. 보통 VisibleAnywhere 와 EditAnywhere 를 사용하는데, 이는 서로 배타적입니다. 만약 이것을 VisibleAnywhere 로 변경한다면 다음과 같은 Details 패널을 볼 수 있습니다.


그림2. VisibleAnywhere 를 지정했을 때 Details 패널.


그렇다면 EditAnywhere 와 VisibleAnywhere 의 차이는 무엇일까요? 언리얼 엔진 공식 문서에서는 다음과 같이 설명합니다.


EditAnywhere


이 속성이 아키타입( archetype )이나 인스턴스의 속성창에서 편집될 수 있음을 의미합니다.


출처 : https://docs.unrealengine.com/latest/INT/Programming/UnrealArchitecture/Reference/Properties/Specifiers/EditAnywhere/index.html


VisibleAnywhere


이 속성이 속성창에서 보이지만, 편집할 수 없음을 의미합니다. 이 연산은 Edit* 지정자들과 호환되지 않습니다.


출처 : https://docs.unrealengine.com/latest/INT/Programming/UnrealArchitecture/Reference/Properties/Specifiers/VisibleAnywhere/index.html


일단 편집이 된다와 안 된다가 가장 큰 차이인 것 같지만, 실제로는 둘 다 편집이 가능합니다. 설명이 참 이상한 것 같습니다.


추가 : 언리얼 까페의 나가놀자 님에 따르면 두 옵션의 차이는 다음과 같다고 합니다.


Edit은 포인터 자체를 수정하겠다는 의미가 됩니다.

반면 Visible은 포인터의 멤버를 노출하겠다는 의미가 됩니다.


출처: http://cafe.naver.com/unrealenginekr/7259


어쨌든 UI 상에 있어 핵심적인 차이는 아키타입이나 인스턴스 속성창에서 편집될 수 있다는 것입니다. 언리얼에서 아키타입은 다른 엔진들의 프리팹 정도라고 생각하시면 될 것 같습니다. 어쨌든 중요한 것은 인스턴스별로 편집이 가능하다는 것입니다.


예를 들어 EditAnywhere 를 지정하고 만든 클래스의 인스턴스를 생성하면 그 인스턴스의 Details 패널에서 다음과 같은 항목을 볼 수 있습니다. VisibleAnywhere 를 지정하면 나오지 않습니다.



그림3. EditAnywhere 를 지정했을 때 인스턴스의 Details 패널.


정리하자면, EditAnywhere 는 속성을 인스턴스별 속성으로 만들 때 필요하며, VisibleAnywhere 는 속성을 블루프린트 자체의 속성으로만 사용할 때 필요합니다. EditAnywhere 를 지정했을 때 그림1 처럼 접혀 있는 이유는 인스턴스의 Details 패널이 너무 위아래로 길어지지 않도록 하기 위함으로 보입니다( 그래도 저같으면 블루프린트 안에서는 펼쳐져 있도록 구현했을 것 같은데요 ㅡㅡ;; ).


인스턴스별 속성이 뭐냐고 질문하는 분도 계실 겁니다. 그냥 인스턴스별로 속성을 재정의( overriding )할 수 있다는 의미입니다. 만약 EditAnywhere 를 지정한 경우라면 블루프린트 클래스를 여러 개 만들지 않고 하나만 만든 다음에 씬에 배치한 후에 속성을 편집할 수 있겠죠. 만약 VisibleAnywhere 를 지정한 경우라면 생성할 인스턴스 개수마다 블루프린트 클래스를 만들어야만 합니다.


물론 프로그래밍이나 스크립팅을 통해서 이를 제어한다면 상관없지만, 아티스트나 디자이너가 뭔가 하나씩 배치하고 속성을 바꾸기를 원한다면 EditAnywhere 를 사용하는 것을 고려해야 합니다.

+ Recent posts