[내일배움캠프 Day58] 채팅 따라하기

2025. 3. 13. 23:31·내일배움캠프/TIL

Listen Server를 이용해 RPC를 호출해서 채팅을 만드는 강의를 듣고 정리해보았습니다.

 

전체 Flow

  • 서버 사용자가 Host, 클라이언트 사용자는 Guest로 UserID를 할당한다.
  • 채널에 참가하면 사용자의 ID를 출력한다.
  • 메시지를 입력하면 서버 측에서 클라이언트 측으로 브로드캐스팅된다.

 

결과물

 

레벨 블루프린트

  1. 시작이 되면 Widget_ChatWindow 를 Viewport에 할당한다.
  2. 현재 실행 중인 인스턴스가 서버인지 확인. BP_Controller가 확인되면 OnLoginWithID 이벤트를 실행한다.
    1. 서버일 경우: "Host"라는 ID를 전달한다.
    2. 클라이언트일 경우: "Guest"라는 ID를 전달한다.

 

Widget_ChatWindow

UI 위젯이 생성될 때 BP_Controller로 캐스팅하고 On User Login 이벤트를 바인딩한다. BP_Controller에서 "On User Login" 이벤트가 발생하면, OnLoginEvent가 실행된다.

바인딩된 이벤트가 실행되면 User ID를 받아 Editable Text Box에 표시한다.

 

플레이어가 텍스트를 입력하고 엔터를 누르면 Set Message to User Controller 이벤트 디스패처를 호출하고, 입력창을 비워준다.

 


이벤트 디스패처에 대해 간단하게 설명하면,

이벤트 디스패처(Event Dispatcher)는 A에게 등록된 이벤트 디스패처를 B와 C가 구독하고 있다가, A의 이벤트 디스패처가 호출(Call) 됐을 때, B와 C에게 바인딩 된 이벤트를 호출하므로 빠른 처리가 가능

생성한 이벤트의 Replicates 속성을 Multicast, Run on Server , Run on owning Client로 설정하면, 바로 RPC가 된다.

  • Not Replicated : 네트워크 객체가 아님
  • Multicast : 서버가 모든 클라이언트한테 뿌림
  • Run on Server : 서버에 있는 이벤트 객체
  • Run on owning Client : 내 로컬에 있는 이벤트 객체

 

BP_Controller

Remote Role이 None이 아니라면 모든 Widget Class를 가져와서 Widget_ChatWindow Class로 변환하고, 변환이 성공적이라면 Widget_ChatWindow에서 특정 이벤트(OnSendMsgToServer)가 발생하면 Set Message to User Controller가 실행되도록 이벤트를 바인딩한다.

  • Remote Role이 None이 아니라면 : 멀티플레이에서 서버/클라이언트 간 네트워크 동기화가 이루어지고 있다는 의미. 리슨 서버는 Remote Role 체크 해야됨!

 


Remote Role에 대해 간단하게 설명하면,

Listen Server의 경우 플레이어로서 게임에도 참여하므로, Application의 게임 로직을 사용한다. 이를 구분하기 위해 현재 동작하는 Application에서의 역할을 Local Role, Connection으로 연결된 Application에서의 역할을 Remote Role이라고 한다.

 

액터 역할의 종류

  • None : 액터가 존재하지 않는다.
  • Authority : 서비스를 대표하는 신뢰할 수 있는 역할. 게임 로직을 수행한다.
  • AutonomousProxy : Authority를 가진 오브젝트의 복제품. 일부 게임 로직을 수행한다.
  • SimulatedProxy : Authority를 가진 오브젝트의 복제품. 게임 로직을 전혀 수행하지 않는다.

출처 : 이득우의 언리얼 프로그래밍 Part3 강의


 

위의 OnSendMsgToServer 는 서버에만 존재하는 GameMode인 BP_ChatMode를 가져와서 GotMessageFromClient 를 실행한다.

 

서버에서 UserID를 설정하고 Call On User Login 실행한다. (Widget_ChatWindow 에 나왔던 이벤트 디스패처)

 

Has Authority 를 통해 서버 권한이 있는 경우만 화면에 메시지 출력한다.

 

BP_ChatMode

모든 PlayerController을 가져와서 BP_Controller의 Get Broadcast 이벤트를 호출한다.

GotMessageFromClient(Custom Event) 또한 서버에서 작동하도록 Run on Server, Reliable 체크

 

즉, 클라이언트에서 서버로 데이터를 보내고, 서버가 모든 클라이언트에게 데이터를 공유하는 구조

 

 

 

'내일배움캠프 > TIL' 카테고리의 다른 글

[내일배움캠프 Day75] 1주차 멀티플레이 팀플  (0) 2025.04.07
[내일배움캠프 Day59] 숫자 야구 게임 과제  (2) 2025.03.14
[내일배움캠프 Day56] 브루트포스 과제  (1) 2025.03.11
[내일배움캠프 Day55] GGF 프로젝트 1주차 WIL  (0) 2025.03.10
[내일배움캠프 Day46] AI 무리지어 이동 구현(Boids Algorithm)  (0) 2025.02.24
'내일배움캠프/TIL' 카테고리의 다른 글
  • [내일배움캠프 Day75] 1주차 멀티플레이 팀플
  • [내일배움캠프 Day59] 숫자 야구 게임 과제
  • [내일배움캠프 Day56] 브루트포스 과제
  • [내일배움캠프 Day55] GGF 프로젝트 1주차 WIL
개발자 밍
개발자 밍
dev0404 님의 블로그 입니다.
  • 개발자 밍
    Developer
    개발자 밍
  • 전체
    오늘
    어제
    • 분류 전체보기 (88)
      • 강의 (8)
        • UE Climbing System (3)
        • UE Dungeon (1)
        • HCI (4)
      • 책 (18)
        • 객체지향의 사실과 오해 (5)
        • Effective C++ (3)
        • 이득우의 게임 수학 (4)
        • 이것이 취업을 위한 컴퓨터 과학이다 (4)
        • 리뷰 (2)
      • C++ (2)
      • 알고리즘 (2)
      • 자료구조 (1)
      • Unreal (4)
      • 내일배움캠프 (52)
        • TIL (52)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    알고리즘
    자료구조
    컴퓨터 구조
    그래픽스
    게임수학
    객체지향
    컴퓨터구조
    언리얼
    c++
    내일배움캠프
    Effective
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
개발자 밍
[내일배움캠프 Day58] 채팅 따라하기
상단으로

티스토리툴바