나만의 작은 도서관
[TIL][C++] 250722 MMO 서버 개발 63일차: 로컬 언리얼 폴더에 함부로 외부 파일을 복붙하지 말자., 언리얼에서 위젯 사용하는 법 본문
Today I Learn
[TIL][C++] 250722 MMO 서버 개발 63일차: 로컬 언리얼 폴더에 함부로 외부 파일을 복붙하지 말자., 언리얼에서 위젯 사용하는 법
pledge24 2025. 7. 23. 03:36주의사항: 해당 글은 일기와 같은 기록용으로, 다듬지 않은 날것 그대로인 글입니다.
로컬 언리얼 폴더에 함부로 외부 파일을 복붙 하지 말자.
- 언리얼 내부에서 관리하는 폴더들이 몇몇 있다. 이것들을 외부 폴더 및 파일들을 끌고 와 복붙 하게 되면 여기저기 문제가 발생할 수 있으므로 되도록이면 하지 않는 것이 좋다. (경험담이다)
개인적인 사례: git 실수로 날린 content 폴더
- 깃헙에 content 폴더가 올라가지 않도록 설정했다가 로컬에 위치한 content 폴더도 함께 날아갔다. 그래서 이전에 남겨둔 폴더에서 필요한 부분을 가져와 붙여 넣었는데, 이상하게도 Visual Studio에서 적용한 내용이 일부만 설정되고 있었다.
- 잘 돌아갔던 코드를 수정한 적이 없었기에 100% 언리얼 에디터 문제라는 것을 알고는 있었지만, 해결 방법을 몰랐다. 그렇게 뭐가 잘못되었는지 찾고 있었는데, 가만 생각해 보니 듣기 싫은 핫 리로드 소리가 안 들림 + visual studio에서 실행할 때는 코드 변경사항이 잘 적용된다는 사실을 알게 되었다.
- 결국 핫 리로드가 실행되지 않아 언리얼 에디터에 적용이 안되고 있었다는 것을 깨달아 결국 다 끄고. 내부 파일 다 날리고 → "Generate Visual Studio project files” → visual studio에서 rebuild 해서 해결하였다.
- 진짜… 내부 파일은 함부로 건드리는 게 아니라는 걸 새삼 깨닫는 사건이었다.
언리얼 펩에서 구매한 에셋을 프로젝트에 적용하는 법
- 에픽게임즈 런처를 실행한다.
- 언리얼 엔진 목록 → 라이브러리 탭을 선택
- 아래로 스크롤하면 팹 라이브러리가 있음
- 다운로드한 팹을 찾아 프로젝트에 추가 버튼 클릭
- 적용하고자 하는 프로젝트를 선택하면 끝
언리얼에서 위젯 사용하는 법
- 언리얼에서 위젯은 유니티의 UI 캔버스와 같다. 따라서, UI를 만들고 싶다면 위젯을 사용하면 된다.
- 위젯 생성하기

- 위젯은 오른쪽 마우스를 클릭했을 때 가장 아래에 있는 “User interface”목록에 있다. 여기서 Widget Blueprint를 선택하면 빈 위젯이 생성된다.
2. 위젯창 구성

- 처음에는 조금 헤매긴 하지만, 유니티를 조금 해 본 사람은 금방 적응할 수 있다. 왼쪽 사이드바에서 위에 있는 Palette에서 원하는 컴포넌트를 검색할 수 있고, 아래 Hierarchy는 배치한 각 컴포넌트들의 계층 관계를 표시해 준다.
- 중앙에 크게 존재하는 캔버스? 같은 부분에서 배치한 컴포넌트를 누르면 오른쪽 사이드바에 있는 Details에 선택한 컴포넌트의 속성이 주욱 나온다.
3. 상호작용 넣기:Designer와 Graph
- 사실 위젯을 구성하는 건 그리 중요하지 않다.(적어도 서버 개발하는 입장에선) 결국은 구성한 컴포넌트들의 상호작용을 어떻게 할 것인지가 중요한데, 상호작용을 하기 위해선 c++코드와 블루프린트가 필요하다.
- c++ 코드와 블루프린트를 사용하려면 1) 현재 BP 위젯을 상속받은 C++ 코드와 2) 위젯창 오른쪽 상단에 있는 Designer에서 Graph를 활용해야 한다. 간단하게 방법을 설명하자면 아래와 같다.
- C++ Classes 폴더에서 C++ 클래스 파일을 만든다. 단, 이미 만들어진 위젯을 상속받아서 만든다.(없으면 UserWidget을 상속받아 쓰는 방법도 있는데 이건 잘 모른다.)
- 아래와 같이 UFUNCTION(BlueprintCallable)을 활용해서 해당 함수가 위젯의 블루프린트에 표시되도록 함수를 정의한다.
3. 함수 정의를 다 했다면, 위젯창에 돌아와 오른쪽 상단에서 Designer → Graph 모드로 변경하고 블루프린트를 작성하면 된다. 작성한 블루프린트의 예시는 아래와 같다.UCLASS() class P1_API ULoginWidget : public UUserWidget { GENERATED_BODY() public: /** 블루프린트에서 호출할 함수 */ UFUNCTION(BlueprintCallable, Category = "Login") void RequestRegister(const FString& Username, const FString& Password); UFUNCTION(BlueprintCallable, Category = "Login") void RequestLogin(const FString& Username, const FString& Password); };

- 만약 3번 과정, 즉, 블루프린트를 작성할 때 컴포넌트 정보를 들고 오고 싶다면, Designer 창에서 컴포넌트를 클릭하여 Detail에서 “is Variable”을 체크해 준 다음, Graph 모드에서 왼쪽 사이드바에 있는 VARIABLES의 표시된 컴포넌트를 블루프린트 창에 Drag 하면 된다.

위젯 쓰는 법 요약
- 위젯을 생성한다.
- 원하는 UI를 만든다.
- 완성된 위젯을 상속받는 C++ 클래스를 만든다.
- 필요한 상호작용을 정의한 함수를 UFUNCTION(BlueprintCallable)를 붙여서 만든다.
- 위젯으로 돌아가서 Graph 모드로 전환한 다음, 정의한 함수와 함께 블루프린트를 작성한다.
추가) 언리얼 위젯에서 알게 된 기능 몇 개
- Anchors: 이거 유니티에 있는 것과 똑같다. 그냥 쓰면 된다.
- Alignment: 이것도 유니티와 비슷하다. 상위 컴포넌트의 앵커를 현재 컨포넌트의 어디에 둘 지 정하는 거다. 써보면 안다.
- Horizontal Box / Vertical Box : 이것도 유니티에 있는 건데, 이 자체보다 안에 있는 기능에 대해 설명하겠다.
- 안에 있는 모든 컴포넌트 선택 후,
- Horizontal Alignment / Vertical Alignment에서 가장 오른쪽에 있는 옵션 (Fill xxx)을 선택하면 배정받은 영역의 수평/수직으로 꽉 채운다.
- 겉에 조금 여유를 두고 싶으면 padding을 넣어주면 된다.
- 배정받은 영역의 비율은 Size의 Fill 오른쪽 숫자를 바꿔주면 된다. 숫자는 비율을 의미한다.
- TextBox: 입력창이다.
- Button의 Events: 이벤트를 클릭(ex. OnClicked)하면 블루 프린트에 해당 이벤트 노드가 생긴다