게임 개발/학습 일지

언리얼 내배캠 - 언리얼 멀티플레이 기초 채팅 프로젝트 생성

이개 2026. 6. 9. 22:31

패키징을 하기 위해서는 200GB 넘게 필요하기 때문에 넉넉한 용량(웬만하면 2TB이상)이 필요하다.

또한, 경로 문제가 발생할 수 있어서 한 드라이브에 다 설치해주는 것이 좋다.
 
프로젝트 생성
ChatX라는 이름의 프로젝트를 하나 생성한다.
 
새 레벨을 만든다.
 
컨텐츠 폴더 안에 프로젝트와 같은 이름의 폴더를 만든다.
 
Ctrl+Shift+S로 저장해줘야만 전체 상황이 저장된다.
 
맵 & 모드에서 만든 레벨로 레벨을 수정해준다.
 
새 게임모드 베이스를 만들어준다.
 
라이브코딩은 꺼준다.
 
cpp파일 include에서 에러가 뜨는 경우는 경로 오류이다.
같은 폴더 안에 있는 경우 Game/을 지워주면 된다.
 
Build.cs 파일에 PublicIncludePaths,AddRange(new string[] { "ChatX" });를 추가해주어야 경로가 제대로 잡힌다.
 
PlayerController도 생성한다.
 
이름은 CXPlayerController
 
PlayerCharacter는 필요없다.
 
Blueprint 폴더와 그 안에 Game, Player 폴더를 만든다.
보통 C++ 클래스를 상속받기 때문에 C++폴더와 유사한 구조를 가진다고 보면 된다. 
 
 
블루프린트로 CXGameModeBase를 상속받아 새 게임모드 클래스 BP_GameModeBase를 만든다.
 
 
BP_PlayerController도 만들어준다.
 
WorldSettings 탭에서 게임 모드 오버라이드에 BP_GameModeBase를 할당해준다
 
선택된 게임모드에서는 만든 블루프린트를 할당해준다.

그러면 게임 실행 시 아웃라이너에 만든 블루프린트가생성된다.
 
UserWidget C++ 클래스를 만든다.
 
UI 하위에 소스를 만든다.
 
Build.cs에 UMG 모듈을 추가한다.
 
UCXChatInput.h에  멤버를 추가한다.
 
 
UPROPERTY(meta = (BindWidget))에서 BindWidget이 메타 키워드로 들어가면, EditableTextBox_ChatInput이라는 이름의 UEditableTextBox를 구현하는 것을 강제한다.
 

WBP_ChatInput을 만들어준다.
 
EditableTextBox_ChatInput을 만들지 않으면 에러가 뜬다.
 
팔레트에서 캔버스 패널을 하나 만들고, 라이브러리에서 EditableTextBox를 캔버스 패널 밑에 드래그앤드롭으로 생성한다.
 
그리고  이름을 바꿔주면 에러가 사라진다.
 
텍스트박스의 앵커는 하단으로 설정한다.
 
오프셋은 위와 같다.
 
폰트 크기는 24, 컬러는 검정색으로 해준다.
 
플레이어 컨트롤러의 헤더를 수정한다.
코드는 이렇게 쓴다.
 
 
캐릭터 블루프린트에 WBP_ChatInput을 할당한다.
 
게임을 실행하면 이렇게 텍스트 입력창이 나온다.
 
 
Build.cs에 Slate, SlateCore도 추가해준다. 
 
컨트롤러 헤더에 FString타입 ChatMessageString과 Setter를 만들어준다.
 
ChatInput 클래스에 Native 생성자와 소멸자를 넣고 채팅 입력시 실행될 함수를 만든다. 함수에 UFUNCTION() 붙여줘야한다.
 
델리게이트 바인딩 및 텍스트 commit시 동작을 구현한다.
 
EditableTextBox에는 텍스트 커밋 시 이벤트가 발생하는데 이것을 델리게이트로
 
 if (EditableTextBox_ChatInput->OnTextCommitted.IsAlreadyBound(this, &ThisClass::OnChatInputTextCommitted) == false)
{
EditableTextBox_ChatInput->OnTextCommitted.AddDynamic(this, &ThisClass::OnChatInputTextCommitted);
}
 
이렇게 바인딩해서 사용할 수가 있다.
 
이 상태로 실행하면 입력 후 엔터를 누를 시 텍스트가 사라지며 String에 저장된다.
 
 
바인딩이 잘 되었는지 확인하려면 아래와 같이 진행한다.
 
#include "Kismet/KismetSystemLibrary.h"
 
UKismetSystemLibrary::PrintString(this, ChatMessageString, true, true, FLinearColor::Red, 5.0f);으로 SetChatMessageString 실행 시 화면에 출력해본다.
 


SetString이 되면 화면에 입력한 내용이 출력된다.