객체를 클릭했을 때 나오는 디테일 창에서 원하는 카테고리 혹은 속성(Property) 을 숨길 수 있는 방법에 대해 공부해보았다.
🚩 카테고리 숨기기
이전에 디테일창에 새로운 카테고리를 추가하는 커스텀 작업을 진행했던 FStaticMesh_Detail 클래스의 CustomizeDetails 함수에 이어서 내용을 추가해보았다.
디테일 창의 레이아웃을 관리할 수 있는 DetailBuilder의 HideCategory 함수를 이용하면 원하는 카테고리를 통째로 숨길 수 있다. 이때 매개변수로 카테고리의 ID를 전달해야 하는데, 나는 언리얼 엔진이 한국어로 설정되어있기 때문에 카테고리의 ID를 바로 확인할 수 없었다.
따라서 에디터 개인설정에서 언어를 영어로 바꿔 카테고리의 ID를 확인하여 전달해야 한다.
입력 카테고리는 Input 이므로 매개변수로 Input을 전달하여 입력 카테고리를 숨겼다.
![]() |
![]() |
컴파일 후 프로그램을 실행시켜보면 입력 카테고리가 사라진 것을 확인할 수 있었다.
🚩 Property 숨기기
이번에는 카테고리 전체가 아닌, 카테고리 안에 특정 속성만 숨겨보았다.
우선 숨기려는 속성이 포함된 카테고리를 받아와야 하기 때문에, IDetailLayoutBuilder 클래스의 EditCategory 함수로 Actor 카테고리를 가져와 IDetailCategoryBuilder 객체로 저장하였다.
이후, 카테고리의 속성에 접근하기 위해 IPropertyHandle 객체를 배열로 선언하였고, GetDefaultProperties 함수로 Actor 카테고리안에 존재하는 모든 속성들의 식별자인 Handle 값을 가져왔다.
전체 Handle의 for문을 돌면서 속성의 GetName과, GetFullName, GetPathName을 로그로 출력해보았다.
![]() |
![]() |
로그를 확인해 본 결과,
GetName 은 변수 이름을 의미하고,
GetFullName 은 변수 전체의 이름,
GetPathName 은 변수가 존재하는 경로를 출력해주었다.
Can be Damaged 부터, Initial Life Span과 Spawn Collision HandlingMethod 등등 Actor 카테고리에 존재하는 속성 순서대로 내용이 출력된 것을 볼 수 있었다.
이후 Handle의 for문을 돌면서 bCanBeDamaged 가 포함된 속성명이 있다면 HideProperty 함수로 해당 속성을 숨기도록 구현해보았다.
![]() |
![]() |
그 결과, 첫번째 속성값이었던 Can be Damaged 속성이 사라진것을 확인할 수 있었다.
💡 Property 용어
카테고리 안에 한 줄 한 줄 나타나는것들은 UPROPERTY로 직렬화된 변수이다.
객체지향에서는 멤버변수를 Property로 부른다.
또한 객체지향에서 함수는 Method라고 부른다. Function은 C언어에서 쓰는 함수의 이름일 뿐이고, 절자지향의 설계상에서 함수는 Procedure라고 부른다.
이처럼 어디서 사용하는가에 따라 용어가 다르기때문에 같은 개념이어도 다양한 용어를 알아두는것이 좋다.