[Unreal] 채팅 서버 구현

개요

Listen 서버를 이용해 RPC를 호출하는 채팅 구현

서버 사용자는 Host, 클라이언트는 Guest로 UserID를 할당

언리얼 구성 요소 관계

PlayerController에 다 연결되어있다.

네트워크 에서는

GameMode는 서버에만

GameState, PlayerState, Pawn 1~* 은 서버 + 각 클라이언트에

PlayerController는 서버 + 해당 클라이언트

HUD, UMG는 해당 클라이언트에

구성요소

BP_ChatMode - GameMode

BP_Controller - PlayerController

WBP_ChatWindow - Widget Blueprint

Text 입력 바인드

WBP_ChatWindow

화면에 텍스트 창을 띄우고 텍스트를 입력하면 Enter로 이벤트를 Call할 수 있도록 구성한다.

입력창은 Text는 Commit 이벤트를 바인딩해야하므로 EditableText로 만든다.

IsVariable을 체크하고 OnTextCommited를 바인딩한다.

Enter를 눌렀을 때 SetMessageToUserController 이벤트 디스패처에 등록된 이벤트를 호출하고 Text 창을 비워준다. 

BP_Controller

Controller가 처음 실행될때 Chat Window에 구독하도록 해준다.

가지고 있는 생성된 Widget 중 ChatWindow인 Widget을 가져와서 Text 입력 시 호출될 이벤트를 바인드 해준다.

Text 입력시 Message를 보내도록 해준다.

서버에서 실행되도록 Replication을 설정하고 GameMode의 Got Message From Client를 호출하도록 한다.

이때 Reliable을 true로 해 신뢰할 수 있도록 만든다.

Got MessageFromClient는 다음과 같다. Run to Server로 설정해준다.

모든 PlayerController의 Got Broadcast를 호출해서 Msg를 각 Client에 전달해준다.

Got Broadcast는 각 Client에 전달되야하므로 Run to owning client로 설정해준다.

서버에서 요청해서 각 Client에서 실행되어야하므로

 

 

User ID로 로그인

Level Blueprint에서 서버라면 Host, Client라면 guest로 ID 설정

On Login with ID는 각 클라이언트에 Id를 보내주는 것이므로 Run to Server?

'Unreal' 카테고리의 다른 글

[Unreal] Role, Remote Role  (0) 2025.04.04
[Unreal] 서버 개요  (0) 2025.04.04
[Unreal] 온라인 게임의 네트워크 구성  (0) 2025.03.11
[Unreal] 패키징 시 체크리스트  (0) 2025.03.10
[Unreal] OnlineSubsystemSteam 사용하기  (0) 2025.03.10