나만의 작은 도서관

[TIL][C++] 251027 MMO 서버 개발 123일차: [언리얼] 에디터에서 초기화 로직을 정의하고 싶다면? Construction Script, SizeBox에 대해 본문

Today I Learn

[TIL][C++] 251027 MMO 서버 개발 123일차: [언리얼] 에디터에서 초기화 로직을 정의하고 싶다면? Construction Script, SizeBox에 대해

pledge24 2025. 10. 27. 23:06
주의사항: 해당 글은 일기와 같은 기록용으로, 다듬지 않은 날것 그대로인 글입니다. 

[언리얼] 에디터에서 초기화 로직을 정의하고 싶다면? Construction Script

  • Construction Script는 Actor가 에디터 내에서 생성되거나 속성이 변경될 때 자동으로 실행되는 스크립트이다.
  • C++에서 생성자가 있는 것처럼 BP가 가지는 생성자 정도로 보면 된다.

 

Construction Script의 용도

  • C++ 클래스를 상속받아 사용하는 BP의 경우 BeginPlay에 초기화 로직을 넣게 되면, 에디터 상에서 변경된 사안을 보기 위해 매번 에디터를 Play 해야 한다는 단점이 있다.
  • 이럴 때 사용하라고 존재하는 것이 바로 Construction Script이며, Construction Script에 초기화 로직을 넣게 되면 해당 로직에 따른 변경사항을 BP의 뷰포트에서 바로 확인이 가능해진다.

Q. 그냥 디테일 패널에서 바꾸면 그만 아닌가?

  • 디테일 패널에서 바꿀 수 있다면 그냥 그렇게해도 된다. 하지만 많은 경우에서, 커스텀 BP나 컴포넌트들은 디테일 패널에 표시되도록 설정하는 경우가 많지 않기 때문에 이런 경우에는 이벤트 그래프에서 따로 설정을 해야 한다.
  • ⇒ 즉, 커스텀 BP(또는 C++ 클래스)를 상속하거나 커스텀 컴포넌트를 포함하는 상황에서 현재 BP에 고유한 세팅을 해야 하는 경우 Construction Script를 사용해야 한다.

 

[언리얼] SizeBox에 대해

  • SizeBox는 자식 위젯 하나를 감쌀 수 있으며, 정확히 직속 자식의 크기 딱 하나만 제어할 수 있다.
  • 즉, SizeBox는 아래 계층의 위젯들 전체가 아닌, 바로 한 단계 아래 위젯의 레이아웃 크기에만 영향을 준다.
    • 여러 위젯의 크기를 조정하려면 Canvas Panel이나 overlay와 같은 상위 컨테이너를 사용해야 한다.

Q. 왜 갑자기 SizeBox에 대해 다루는가?

  • 이전에 SizeBox가 적용되지 않아서 고생을 한 적이 있었기 때문. 대부분의 경우 WBP는 Canvas Panel을 먼저 깔아 두고 그 아래에 위젯들을 배치하는 방식을 많이 사용하는데, 이렇게 사용할 경우, 다른 WBP에서 해당 WBP를 사용하려고 할 때 SizeBox로 감싸 크기를 조절하려고 해도 Canvas Panel의 크기만 바뀌고, 내부 콘텐츠의 크기는 바뀌지 않았기 때문.
  • 결론적으로 중간에 Canvas Panel이 끼어있었던 것이 원인이라, Canvas Panel을 SizeBox로 교체했더니 정상적으로 다른 WBP에서 해당 WBP의 크기가 조절되는 것을 확인할 수 있었다.