200530 Detail Layout 커스텀

2020. 5. 30. 01:32프로그래밍/TIL

TIL 인데 드문드문 글이 작성되어 아쉽긴 하지만, 분량채우기로 간략하게만 타이틀만 적기엔 의미가 부족해 보여서 고민이다.

지금보다는 더 자주 기록하는 습관을 가져야 할 것 같다.

 

 

디테일 레이아웃을 커스텀하며 알게된 정보들을 의식의 흐름대로 정리 !

 

 

1. Layout 의 구성요소들은, PropertyHandle 단위로 접근한다.


구성요소는 class, struct 들의 멤버변수들이라고 생각하면 된다.

PropertyHandle 이 텍스트파일의 fp 로 문자들에 접근하는 느낌이다.

  • IPropertyHandle 이 Base Interface 이다.

  • 구성요소 타입에 따라 Handle Interface 는 다형성을 가진다.

    • IPropertyHandleArray

    • IPropertyHandleSet

    • IPropertyHandleMap

    • ...

  • 구성요소 타입에 따라 Handle 구현부들이 정의된다. ( pimpl )

    • FPropertyHandleBool

    • FPropertyHandleInt

    • FPropertyHandleArray

    • FPropertyHandleSet

    • ...

 

2. 한 가지 특이했던 점은, UPROPERTY() 메타지정자로 지정한 Category 도 PropertyHandle 이 생성된다.

   Category 도 커스텀 할 수 있기 때문인 듯. ( Category 명을 바꾼다거나 등 )

   대신, 실제 멤버변수가 아니기 때문에 PropertyHandle 이 물고있는 PropertyNode 는 없다.

 

3. 구성요소 ( PropertyHandle ) 들은, 선언된 순서 (멤버변수) 에 따라 Tree 구조를 이루고 있다.

 

4. UPROPERTY 메타지정자로 언리얼 에디터에 노출하지 않은 멤버변수는 PropertyHandle 이 생성되지 않는다.

 

5. PropertyHandle 은 PropertyNode 의 Proxy 역할을 한다.

    PropertyNode 가, 실제 멤버변수를 물고있는 매개체이다.

 

6. 최상위 PropertyHandle 은 디테일 레이아웃 에 나타내고자 했던 최상위 class, struct 자체이다.

 

7. 실제 Property 가 아닌 경우 ( Category, 최상위 객체 같은 ) PropertyHandle 은 존재하지만, Property 본체는 없다.

 

8. Skeleton 의 본을 다루는 것은 FAnimNode_ModifyBone 이 좋은 참고가 되었다.

   FBoneReference 구조체를 커스텀 한 것을 보면, SBoneSelectionWidget 를 이용해서 현재 스켈레톤의 특정 본을 드랍다운으로 선택 할 수 있게 해놨다.

 

9. 디테일 커스텀 관련 모듈 - FDetailCustomizationsModule

 

10. 디테일 커스텀 등록 함수

- void RegisterCustomPropertyTypeLayout()
- void RegisterCustomClassLayout()