Unreal Engine - 채팅 (리슨 서버)

2025. 3. 14. 17:54·Unreal Engine

 

 

1. 필요한 것


1 - 1. Level과 Level BP

  • 빈 레벨이 필요
  • 빈 레벨 BP에서는 아래 두가지 동작을 하게 된다.
    • widget BP를 Add To Viewport 하기
    • server인지 체크 후, On Log In with ID 라는 이벤트(PlayerController가 가지고있음) 실행

1 - 2. GameMode

  • Got Message From Client 라는 이벤트를 가진다. (리플리케이트 : 서버에서 실행 / 신뢰성 true)
    • PlayerController를 상속받아 만들어진 actor를 모두 찾은 후
    • 우리가 만든 PlayerController로 cast 후
    • Got Broad Cast 이벤트(PlayerController가 가지고 있음)를 호출한다.

1 - 3. PlayerController

  • BeginPlay 이벤트
    • 우리가 만든 Widget BP를 가져와서 SetMessageToUserController라는 이벤트 디스패처를 bind 해준 후
    • OnSendMsgToServer 이벤트를 만든다.
  • OnSendMsgToServer 이벤트 (리플리케이트 : 서버에서 실행 / 신뢰성 true)
    • GameMode를 가져와서 GotMessageFromClinet라는 이벤트를 call해준다.
  • GotBroadCast 이벤트 (리플리케이트 : 소유중인 클라이언트에서 실행 / 신뢰성 true)
    • Authority 체크 후 PrintString 진행
  • OnLogInWithID 이벤트 (리플리케이트 : 서버에서 실행 / 신뢰성 true)
    • UserId 라는 변수 set

1 - 4. Widge BP

  • 디자이너 탭
    • editable text를 하나 가진다. (변수여부 체크)
  • 그래프 탭  
    • on text committed 이벤트
    • set message to user controller라는 이벤트 디스패처
  • 텍스트 입력 후 enter를 입력하게 되면, set message to user controller라는 이벤트 디스패처를 call 한다
  • 이후 text 를 비워준다.

 

 

2. 흐름


2 - 0. 생성 시

  • Widget BP는 SetMessageToUserController라는 이벤트 디스패처를 가짐

  • GameMode BP는 GotMessageFromClient라는 이벤트를 가진다.
    • 이 이벤트는 우리가 만든 PlayerController를 가져와서 GotBroadCast라는 이벤트를 Call해준다.

 

2 - 1. Level BP

  • 우리가 제작한 Widget BP를 Add To Viewport 한다.
  • 이후 server인지 체크 후, 우리가만든 PlayerController로 캐스팅해 On Log In With ID 이벤트를 call 한다.

  • On Log In With ID 이벤트는 PlayerController에서 User ID라는 변수를 Set하는 동작을한다.

 

2 - 2. PlayerController

  • 생성 시 remote role을 체크하여 None이 아닌 경우(서버/클라가 네트워트 동기화하고있다는 의미) 우리가 만든 Widget BP에 해당하는 widget을 가져와서
    • SetMessageToUserController 이벤트 디스패처를 OnSendMsgToServer라는 이벤트와 바인딩한다.

  • OnSendMsgToServer 이벤트는 우리가 만든 GameMode를 가져와서 GotMessageFromClient 이벤트를 Call한다.

  • GotMessageFromClient 는 다시 PlayerController의 GotBroadCast를 Call한다.
  • GotBroadCast 이 함수는 최종적으로 화면에 PrintString을 해주게 된다.

 

결과 영상

 

 

3. 용어


3 - 1. Authority

  • 액터가 "서버에서 실행되고 있는가" 를 판단하는 기준
  • 즉, 서버가 Authority를 가진다.
  • 리슨 서버의 경우 서버가 클라이언트의 역할도 수행하기 때문에, Authority 체크가 필요하다.

 

3 - 2. Remote Role

해당 액터가 원격에서 어떤 역할을 하는지 나타냄

참고) 현재 동작하는 application에서의 동작은 Role이라고 한다.

  • None
    • 역할 없음, 복제되지 않는 액터
  • Simulated Proxy
    • 다른 클라이언트의 원격 제어를 받는 액터
    • 시뮬레이션만 수행하는 객체
    • 상태를 변경하거나 원격 함수 호출 불가능
  • Autonomous Proxy
    • 플레이어가 직접 컨트롤 하는 액터
    • 상태 변경 및 원격 함수 호출 가능
  • Authority
    • 서버에서 실행

 

3 - 3. Replicate

네트워크 환경에서 서버와 클라이언트 간의 함수 호출을 동기화 하는 방식

RPC라고도 한다. 

이때, 실행의 주체(서버 or 클라)가 누구인지 Replicate될 액터의 소유권(게임모드, 플레이어 컨트롤러 등) 이 무엇인지를 체크해야 한다.

  • Not Replicated
  • Multicast
    • 이 이벤트를 서버에서 실행하면, 모든 클라이언트에서 실행
    • 클라이언트에서 실행하면, 호출한 클라이언트에서만 실행
  • Run On Server
    • 실행 주체에 관계없이 서버에서 실행
  • Run on owning Client
    • 모든 클라이언트가 Replicate된 액터를 소유하지 않기 때문 
    • 액터를 소유한 클라이언트에서만 실행

 

 

4. 트러블 슈팅


채팅을 구현한 후 플레이하니 아래와 같은 warning이 출력되는 문제가 있었다.

 

구글링을 하다가 아래 글을 참고하게 되었고,

https://www.reddit.com/r/unrealengine/comments/16ticsp/error_on_a_new_empty_project_53/?rdt=46350

 

From the unrealengine community on Reddit

Explore this post and more from the unrealengine community

www.reddit.com

에디터 개인설정에서 login에 credential에 추가해주니 warning이 사라졌다.

 

 

 

5. 참고자료


https://velog.io/@singery00/UE5-%EB%A9%80%ED%8B%B0%ED%94%8C%EB%A0%88%EC%9D%B4-Replication-1

 

[UE5] 🖧 멀티플레이 Replication (1)

🖧 Unreal의 Replication 개념을 알아보고 멀티플레이를 만들어보자.

velog.io

https://tithingbygame.tistory.com/53

 

[언리얼5/UE5] Authority, Simulated Proxy, Autonomous Proxy

멀티플레이어 게임을 만들다가 중간 중간 헷갈리니 정리를 해놓자!Controller은 simulated proxy에서 유효하지 않는다!  에서 시작된 정리...1. AuthorityAuthority는 오브젝트를 제어하는 주체를 의미한다.

tithingbygame.tistory.com

 

'Unreal Engine' 카테고리의 다른 글

Unreal Engine - Gameplay Framework  (0) 2025.03.24
Unreal Engine - UObject  (0) 2025.03.24
Unreal Engine - Main Menu (흐름 위주의 정리)  (0) 2025.03.07
UE5 Issues : ADS (Aim Offset 1D)  (0) 2025.03.05
Unreal Engine - Sound play & Effect spawn  (0) 2025.03.05
'Unreal Engine' 카테고리의 다른 글
  • Unreal Engine - Gameplay Framework
  • Unreal Engine - UObject
  • Unreal Engine - Main Menu (흐름 위주의 정리)
  • UE5 Issues : ADS (Aim Offset 1D)
gbleem
gbleem
gbleem 님의 블로그 입니다.
  • gbleem
    gbleem 님의 블로그
    gbleem
  • 전체
    오늘
    어제
    • 분류 전체보기 (184)
      • Unreal Engine (73)
      • C++ (19)
      • 알고리즘(코딩테스트) (27)
      • TIL (60)
      • CS (4)
      • 툴 (1)
  • 블로그 메뉴

    • 홈
    • 카테고리
  • 링크

    • 과제용 깃허브
    • 깃허브
    • velog
  • 공지사항

  • 인기 글

  • 태그

    motion matching
    map을 vector로 복사
    blend pose
    additive animation
    applydamage
    const
    character animation
    addonscreendebugmessage
    Vector
    상속
    actor 클래스
    enhanced input system
    DP
    템플릿
    cin함수
    C++
    gamestate
    BFS
    싱글턴
    매크로 지정자
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
gbleem
Unreal Engine - 채팅 (리슨 서버)
상단으로

티스토리툴바