[Network] 채팅 프로그램 만들기

2025. 3. 17. 15:58·Unreal Engine/이것 저것

[동작 순서]

[작업 순서]

1. Blank 템플릿으로 프로젝트 생성

2. LV_Chat으로 Empty Level 생성

3. GameModeBase를 상속받는 BP_ChatMode를 생성

4. PlayerController를 상속받는 BP_Controller 생성

5. World Settings에서 새로 생성한 BP_ChatMode와 BP_Controller를 지정해준다.

6. MULTIPLYAER OPTIONS(플레이 버튼 옆의 점 3개를 클릭하면 나오는 드롭다운에서 제일 하위에 있음.)에서 Number of Players의 수를 '2'. Net Mode를 'Play As Listen Server'로 설정

7. Project Settings -> Maps & Modes -> Default GameMode, Global Default Server Game Mode, Editor Startup Map, Game Default Map을 각각 새로 생성한 BP_ChatMode와 LV_Chat으로 설정

 

8. Widgets 폴더 생성 후 Widget Blueprint를 생성(Widget_CharWindow로 명명)

8-1. Canvas 추가 후 EditableTextBox를 하위 항목으로 추가.

8-2. isVariable 체크 후 OnTextCommitted 추가하여 이벤트 생성

8-2-1. OnTextCommitted : 사용자의 Enter 키 입력 혹은 텍스트 박스가 포커스를 상실한 경우 호출

8-2-2. Controller에서 Bind목적의 Event Dispatcher 'SetMessageToUserController'를 생성하고 Input으로 OnTextCommiteed에서 전달받은 Text를 입력해 준다.

8-2-3. 최종으로 Editable Text Box의 텍스트 내용을 초기화하여 메세지가 전달된 것과 같은 효과를 부여한다.

8-3. 생성한 위젯을 레벨 블루프린트에서 CreateWidget 노드를 이용하여 생성 후 Add to Viewport 노드로 추가해준다.

 

9. BP_Controller에 Widget_CharWindow의 Event Dispatcher를 바인딩하는 BeginPlay 로직 구현

9-1. GetRemote Role을 통해 해당 컨트롤러가 ROLE_None(네트워크에서 복제되지 않음을 의미)가 아닌 경우에만 로직을 처리한다.

9-2. 위젯의 생성까지 Delay 노드를 통해 수행시점 제어

9-3. 8에서 만든 위젯을 찾아온다. 필요한 위젯은 Widget_ChatWindow이므로 해당 타입으로 캐스팅

9-4. Bind Event to Set Message to User Controller 노드를 추가하고 이 노드와 연결될 이벤트(OnSendMsgToServer)를 생성해준다.

 

10. 메세지를 보냈으면 보낸 메세지를 받을 이벤트도 필요하다. Custom 이벤트(Got Broadcast)를 만들어주고 입력으로는 String 타입 변수(Msg)로 설정해 준다.

 

11. BP_GameMode로 이동하여 Custom 이벤트(GotMessageFromClient)를 생성해준다. 해당 이벤트는 서버와 연결된 모든 Controller에 Msg를 브로드캐스팅하여 유저들의 화면에 메시지를 출력해주는 역할을 할 것이다.

존재하는 모든 Player Controller를 찾아와서 BP_Controller에 11번에서 생성해주었던 Got Broadcast로 전달해준다.

11-1. GotMessageFromClient는 사용자로부터 서버로 메세지가 전달되는 것이므로 서버에서 실행되어야 한다. 따라서 Run on Server로 Replicates를 설정해준다. 그리고 채팅은 순서 보장 및 ACK, 전달 보장이 되어야 하므로 Reliable(신뢰성)을 체크해준다.

11-2. 서버쪽에서 다른 모든 사용자에게 다시 메세지를 전달해 주어야 하기 때문에 BP_Controller의 Got Broadcast를 통해 유저들에게 받은 메세지를 전달해준다.

 

12. OnSendMsgToServer, GotBroadcast 이벤트의 구현

12-1. OnSendMsgToServer는 Client에서 Server로 향하는 RPC이기 때문에 Replicate를 Server에서 실행으로 선택해준다. GotBroadcast의 경우 Server에서 Client로 향하는 RPC이기 때문에 소유 중인 Client에서 실행을 선택한다.

12-2. OnSendMsgToServer의 경우 최종으로 BP_ChatMode를 통해 다른 유저에게 메세지를 전파해야 하므로 GotMessageFromClient 노드를 호출해준다.

12-3. GotBroadcast의 경우 전달받은 메세지를 Print String으로 출력해주면 된다. 이 때, HasAuthority 노드를 이용해서 권한 확인을 해 주어야 한다. 현재 만든 로직은 Listen Server에서 동작할 것을 감안하고 제작했기 때문에 체크해주지 않으면 Server측에서 String을 출력해주는 것과 Client측에서 String을 출력하는 것으로 두 개가 출력되게 된다.

 

13. PlayerController에 OnUserLogin으로 Event Dispatcher를 생성한다. 그리고 OnLoginWithID라는 커스텀 이벤트를 서버에서 실행하기, Reliable로 설정해준다.

14. 레벨 블루프린트에서는 아래와 같이 노드를 추가해준다. 이 구현에서는 Host와 Guest 두 명으로만 가정하고 구현했다.

'Unreal Engine > 이것 저것' 카테고리의 다른 글

[강의] Haker UE5 소스코드 분석#1(게임 프레임워크) - 2.환경설정  (0) 2025.12.08
[엔진 소스 코드 분석] 1 - LaunchWindows.cpp  (0) 2025.03.26
게임 언패킹과 리타게팅, 그리고 머티리얼에 대하여 ( 1 )  (0) 2025.02.07
에디터에서 FVector 수정을 위한 UPROPERTY 사용  (0) 2025.02.03
유튜브 레퍼런스  (0) 2025.02.01
'Unreal Engine/이것 저것' 카테고리의 다른 글
  • [강의] Haker UE5 소스코드 분석#1(게임 프레임워크) - 2.환경설정
  • [엔진 소스 코드 분석] 1 - LaunchWindows.cpp
  • 게임 언패킹과 리타게팅, 그리고 머티리얼에 대하여 ( 1 )
  • 에디터에서 FVector 수정을 위한 UPROPERTY 사용
DevJoo1120
DevJoo1120
  • DevJoo1120
    Jin's Programming
    DevJoo1120
  • 전체
    오늘
    어제
    • 분류 전체보기 (142)
      • 포트폴리오 (7)
        • Castlevania: Aria of Sorrow.. (7)
        • [UE5] KILL Everything (0)
      • C++ (0)
      • 라이브러리 (1)
      • 다이렉트X11 (0)
      • Unreal Engine (11)
        • Unreal Document (1)
        • 이것 저것 (8)
        • UI (1)
      • 자료구조 및 알고리즘 (0)
      • 책 정리 (3)
        • 코딩 테스트 합격자 되기 C++ 편 (10)
      • 코딩 테스트 (32)
        • 프로그래머스 (32)
      • 스파르타 코딩 언리얼 1기 (9)
        • 특강 (0)
        • C++와 Unreal Engine으로 3D .. (2)
      • TIL(Today I Learned) (63)
      • 영어 공부 (0)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    정렬
    반복문
    팀 프로젝트
    과제
    책 정리
    map
    코딩 테스트 합격자 되기 c++ 편
    Study
    스파르타 코딩 클럽
    코딩 테스트
    배열
    코딩테스트
    이중 반복문
    문자열
    정리
    프로그래머스
    Unreal Engine 5
    WINAPI
    C++
    Til
  • hELLO· Designed By정상우.v4.10.5
DevJoo1120
[Network] 채팅 프로그램 만들기
상단으로

티스토리툴바