언리얼 엔진 - 게임 프로젝트/리슨 서버 기반 배틀 로얄

OnlineSubsystem - 2) Room의 추가

monstro 2026. 10. 22. 15:28
728x90
반응형

- 개요

OnlineSubsystem 플러그인을 프로젝트에 추가하여 플랫폼에 맞춰 마스터 서버를 설정할 수 있도록 구성한다

그리고 타이틀 - 로비 - 인게임의 구성으로 되었던 기존의 레벨 구성에서

타이틀과 로비 레벨 사이에 Room 레벨을 추가하여 방 목록과 입장할 방을 선택하도록 수정한다

따라서 플레이어는 로비 레벨에서 입장한 방에 대한 정보(참여중인 플레이어들)를 확인할 수 있다

 

- 스크립트 작업

1) 플러그인 설정

Build.cs 파일

 

Build.cs 파일에서 PublicDependencyModuleNames 속성을 위와 같이 수정하여

OnlineSubsystem 관련 플러그인을 추가하고 해당 프로젝트는 스팀에서 서비스할 예정이므로

OnlineSubsystemSteam 플러그인을 추가한다

 

Edit - Project Settins - Plugins 설정

 

에디터를 실행시켜 Online Subsystem Steam 플러그인을 추가하여 uproject에서 사용하도록 설정한다

 

2) SOO_Character 클래스

 

생성자의 로직을 위와 같이 수정하여 더 이상 지원되지 않는 멤버변수에 대한 직접접근이 아닌,

Set 함수를 통해 접근하도록 설정한다

 

3) SOO_RoomItemWidget 클래스

 

전체 Room의 UI에서 개별 Room에 대한 열을 의미하는 하위 UI 클래스를 생성한다

멤버변수는 위와 같다

  • Txt_RoomName 멤버변수 : 해당 Room의 이름 텍스트 위젯
  • Txt_PlayerCount 멤버변수 : 해당 Room에 접속한 플레이어들의 수 텍스트 위젯
  • Txt_MapName 멤버변수 : 플레이할 맵의 이름 텍스트 위젯
  • Btn_Join 멤버변수 : 해당 Room에 접속하기 위한 버튼 위젯
  • Result 멤버변수 : OnlineSubsystem을 통해 제공된 개별 세션의 정보에 대한 Wrapper 구조체

 

 

SetInfo 함수를 위와 같이 구성하여 Result 변수의 값을 갱신하고 RefreshUI 함수를 호출한다

 

 

RefreshUI 함수는 임시로 위와 같이 구성하여 텍스트 위젯의 글씨를 갱신한다

 

4) SOO_RoomListWidget 클래스

 

전체 Room UI 클래스를 위와 같이 구성한다

멤버변수는 다음과 같다

  • RoomList 멤버변수 : 개별 Room UI를 들고 있을 박스 위젯
  • Btn_Refresh 멤버변수 : 새로고침을 하기 위한 버튼 위젯
  • Btn_CreateGame 멤버변수 : 게임을 생성하기 위한 버튼 위젯
  • Btn_Close 멤버변수 : 창을 닫을 버튼 위젯
  • RoomItemWidgetClass 멤버변수 : 개별 Room UI에 대한 서브 클래스 타입
  • Rooms 멤버변수 : 개별 Room UI의 오브젝트를 저장할 컨테이너
  • SessionInfos 멤버변수 : 개별 Room의 세션 정보를 저장할 컨테이너

 

 

Initialize 함수를 위와 같이 오버라이드하여 부모 버전의 함수가 문제없이 실행되면 SetInfo 함수를 호출한다

 

 

SetInfo 함수의 로직을 위와 같이 구성한다

총 10개의 개별 Room UI를 생성하고 컨테이너에 추가한다

이후 RefreshUI 함수를 호출한다

 

 

RefreshUI 함수를 위와 같이 구성하여 실제로 동작하는 Room을 제외한 나머지 개별 Room UI를 숨긴다

 

- 블루프린트 작업

1) WBP_Title 위젯 블루프린트

 

버튼 UI의 onClicked 이벤트를 위와 같이 수정하여 OnlineSubsystem의 Create와 Find 함수를 사용하도록 수정한다

따라서 해당 플러그인이 문제없이 동작하는지 확인한다

 

- 최종 실행 결과

 

위와 같이 IP 주소의 입력없이 게임에 접속할 수 있는 것을 확인할 수 있다

728x90
반응형