연결

먼저 Login 맵부터 살펴보겠습니다.

  • 콘텐츠 브라우저를 엽니다.

../../../_images/contentbrowser.png
  • Login 폴더에서 LoginLevel을 엽니다.

  • Play를 누르면 로그인 메뉴가 시작됩니다.

../../../_images/loginmenu.png
  • 로그인 메뉴는 인증이 활성화되었을 때 로그인을 하는 곳입니다. 샘플에는 이 설정이 없으므로 아무 사용자이름이나 입력해도 됩니다. 그것이 플레이어 이름이 됩니다. 플레이어 이름 외에 호스트 이름애플리케이션 ID도 추가해야 합니다. 서버의 호스트 이름(마스터 호스트 이름이라고 함)은 Strix Cloud의 서버 애플리케이션 대시보드에서 서버 탭을 보면 확인할 수 있습니다. 애플리케이션 ID는 정보 탭에 있습니다. 호스트 이름과 애플리케이션 ID는 일단 입력하면 저장되어 다음에 게임을 시작할 때 적용됩니다. 로그인을 누르면 메인 메뉴로 이동합니다.

../../../_images/mainmenu.png
  • 메인 메뉴에는 퀵 스타트 버튼이 몇 가지 있습니다. 아무 방에 입장하거나 (방이 없으면) 방을 하나 만들어서 선택된 레벨을 시작합니다. 이 버튼들로 리뷰하고 싶은 레벨로 빠르게 되돌아 올 수 있습니다. 퀵 스타트 버튼 외에 옵션 메뉴에서 옵션을 설정할 수도 있고 로그인으로 되돌아올 수도 있고 서버 브라우저에 액세스할 수도 있습니다. 이 튜토리얼은 서버 브라우저로 이동하여 설명하겠습니다.

../../../_images/serverbrowser.png
  • 서버 브라우저 화면에는 현재 방 목록이 보이고 몇 가지 필터와 Join, Join Random, Create 옵션도 보입니다. 현재 서버에는 방이 없습니다. Create 버튼을 클릭하여 하나 만들어 보겠습니다.

../../../_images/createroom.png
  • 방 만들기 페이지에는 몇 가지 옵션이 있습니다. 그대로 두고 Create를 클릭합니다. 첫 맵으로 이동합니다. 두 번째 플레이어의 화면에서 서버 브라우저를 새로고침하면 새로 만들어진 방이 보이며, 여기에 입장할 수 있습니다.

../../../_images/replicationmap.png ../../../_images/replicationmapbrowser.png
  • 맵에서 플레이를 시작하기 전에 Strix가 어떻게 처음 방 검색과 연결을 실시하는지 살펴보겠습니다. 게임을 멈추고 MenuWidgets 상위 레벨 폴더에서 Login 위젯을 엽니다.

  • 이 위젯의 그래프로 이동하겠습니다. 로그인 버튼을 놓으면 인풋 변수에 필요한 사용자 인풋이 수집되는 것이 보입니다. 게임에서 호출되는 첫 Strix 함수는 Initialize Strix Network로, 여기에는 애플리케이션 ID가 필요합니다. 단, 플레이어가 로그인 버튼을 여러 번 클릭할 수도 있으므로, 대신 Stop Strix Network 함수부터 호출하겠습니다. (Stop Strix Network는 네트워크가 시작하지 않으면 아무것도 하지 않습니다.)

../../../_images/initializenetwork.png
  • 그 후에는 마스터 서버가 Is Master Server Connected 함수와 연결되었는지 확인하고, 연결되지 않았다면 연결을 시도합니다. Strix의 많은 함수가 콜백을 취하는데, 여기에는 성공 콜백과 실패 콜백이 있습니다. 연결되면 다음 화면으로 넘어가고, 연결되지 않으면 오류가 표시됩니다.

../../../_images/masterconnection.png
  • Strix에서 네트워크 기능을 이용하려면 항상 마스터 서버에 연결해야 합니다. 이 연결을 어디에서 할지는 사용자가 결정하지만, 대부분은 사용자 이름/비밀번호 시스템을 이용하기 때문에 로그인 화면을 권장합니다. Strix는 로그인 기능을 통합할 수 있도록 네트워크를 초기화할 때 HTTP 액세스 토큰을 이용할 수 있습니다. 인증은 Strix Cloud 페이지에서 구성할 수 있습니다.

../../../_images/token.png
  • 주 메뉴와 옵션 위젯은 Strix와 관련이 없으므로 설명을 생략하겠습니다. ServerBrowserRoomItemRoomItemWidget을 엽니다.

  • 이 위젯들은 서버 브라우저에 있는 방 항목을 나타냅니다. ServerBrowserRoomItem에는 해당 항목에 대한 Strix의 NodeRoom 정보가 포함되어 있고, RoomItemWidget에는 그 항목의 시각적 표시가 들어 있습니다.

../../../_images/roomitemvariables.png ../../../_images/roomitemwidget.png
  • 이들 위젯에는 서버 브라우저에서 나온 정보가 채워집니다. 이것을 살펴보겠습니다. ServerBrowser 위젯을 엽니다.

../../../_images/serverbrowserwidget.png
  • 여기서는 몇 가지 항목을 살펴보겠습니다. 화면 상단에는 목록이 있습니다. 그 아래에는 방 입장 시 비밀번호가 필요할 경우 비밀번호를 입력하는 상자가 있습니다. 그 오른쪽에는 All, Unranked, Ranked로 필터링하는 드롭다운 메뉴가 있습니다. 그 아래에는 Join, Join Random, Create, Refresh 옵션이 있습니다.

참고

랭킹은 Strix에서 정의한 속성이 아니며, 이 샘플에서 적용되지도 않습니다. 결과를 필터링하기 위해 방에서 커스텀 속성을 어떻게 구현하는지 보여주는 예일 뿐입니다.

  • 그래프를 보면 이 브라우저의 로직이 보입니다. 다소 복잡해 보이지만, 검색을 필터링하고 특정 방에 연결하는 Strix의 기능을 이용하는 방법을 나타낸 것입니다. 여기서 프로세스는 다음과 같습니다.

    1. 이 멤버의 속성 만들기

    2. 검색 조건 만들기

    3. 조건에 맞는 방 검색, 사용자가 볼 수 있도록 데이터를 서버 브라우저로 변환

    4. 사용자가 선택하는 방 또는 목록에서 선정한 무작위 방에 입장

    각 단계를 차례대로 살펴보겠습니다.

../../../_images/setinitial.png
  • Set initial properties 섹션을 찾습니다. 여기서 멤버 속성과 일부 레벨 이름을 설정합니다. 여기에는 Levels라고 하는 Strix Property Map이 있습니다. 이것은 단지 비주얼 레벨 이름의 맵(Unreal의 맵보다는 약간 더 클린함)을 저장한 것입니다. User Properties 변수에서, String 속성 name을 설정합니다. 로그인 메뉴에서 입력한 플레이어 이름입니다. (다른 멤버 속성은 방 멤버을 참조해 주십시오.)

../../../_images/orderfields.png ../../../_images/rankingfields.png
  • Order search results by different fields 섹션을 찾습니다. 여기서 결과를 리턴하는 순서를 결정합니다. 토글할 수 있는 버튼이 몇 가지 있습니다. Strix 함수를 통해 오름차순 또는 내림차순을 만들고 Search Order 변수를 설정합니다.

  • Set Ranking as a condition to search for 섹션도 있습니다. 여기서 랭킹 드롭다운 값을 구하여 Strix Condition 값을 설정합니다. Strix Condition은 Field Greater Than등 여러 가지 조건 값을 취합니다. 여기에는 key1 값이 있습니다. 방이 Ranked인지 아닌지 나타내는 값입니다. 여기서 정해진 것은 없습니다. 어떤 종류의 필드를 설정하고 여러 방을 어떻게 검색할지는 사용자가 정합니다. 단, Strix에는 memberCountname같은 필드가 몇 가지 있습니다. 방 개요 섹션에 이용 가능한 필드 전체가 목록으로 나와 있습니다.

  • Strix에서는 검색 조건을 조합하여 더 복잡한 필터를 만들 수도 있습니다. 노드 만들기 메뉴에 Field를 입력하면 이용 가능한 여러 조건이 나타납니다.

../../../_images/search.png
  • RoomItemWidget의 컨스트럭션 스크립트는 저장된 Node Room Info를 가져와서 위젯에 맞게 관련 변수를 설정합니다. 이용 가능한 속성은 커스텀 속성 맵 확장판을 포함하여 모두 볼 수 있습니다.

../../../_images/constructitem.png
  • 검색 조건을 업데이트하고 브라우저를 새로고침할 때마다 Search Node Room 함수를 호출하여 현재 조건에 맞는 방을 모두 찾습니다. 여기에는 결과에 대해 선택한 조건과 순서, 한계, 오프셋이 필요합니다. 여기서는 일치하는 결과가 모두 필요하므로 오프셋과 한계가 0으로 설정되어 있습니다. 검색이 성공하면 콜백이 트리거되며, Strix Node Room Info 스트럭트 목록을 받게 됩니다. 그러면 이 배열에서 루프하고 방 항목을 구성한 후 그것을 목록에 추가하여 사용자가 이용 가능한 방을 볼 수 있게 합니다.

참고

Strix 검색 함수는 몇 가지가 있습니다. 여기서는 Search Node Room을 이용하고 있습니다. 방 서버마다 찾을 수 있는 방을 방 서버 정보와 함께 목록으로 보여주는 함수입니다. 대신 방 서버만 검색해도 되고, 특정 방 서버 하나에 있는 방만 검색해도 됩니다. 어느 것을 할지는 서버 아키텍처의 구성과 사용자의 방 연결 방식에 따라 달라집니다.

../../../_images/setroom.png
  • 검색은 훌륭하고 명확합니다. 여기서 복잡성은 대부분 데이터를 시각적 표시로 바꿔야 하기 때문에 생기는 것입니다. 이용 가능한 방 목록이 있으면 하나에 연결하기는 쉽습니다. 플레이어가 목록에서 항목을 하나 선택하면 Room To Join 변수를 그 방으로 설정하는 콜백이 하나 생깁니다. 플레이어가 Join을 선택하면 그 방을 이용합니다. Join Random에서 목록에 있는 아무 방이나 연결합니다.

../../../_images/join.png
  • 방에 입장할 때는 Join Node Room 함수를 호출한 후, 연결하고자 하는 방의 방 정보로 전달합니다. 이때 앞서 설정해 둔 멤버의 속성도 함께 전달합니다. 또, 이 방에 비밀번호가 설정되어 있다면 비밀번호도 전달할 수 있습니다. 콜백이 성공하면 이 방의 레벨을 열 수도 있습니다. 레벨은 Level 맵에 매핑된 방 정보 stringKey에서 얻을 수 있습니다.

참고

전과 같이, Join 함수가 다르면 형태도 다를 수 있습니다. 여기서는, 방 서버에서 방에 바로 입장합니다. 물론 방 서버에 연결한 후 방에 연결해도 됩니다. 서버 아키텍처와 게임 설계에 따라 방법을 선택하면 됩니다.

  • 끝으로, 실제로 연결할 방이 필요하므로 방 만들기 위젯을 살펴보겠습니다.

../../../_images/createroom.png
  • 이 위젯에는 방을 설정할 수 있는 옵션이 몇 가지 있습니다. 이름, 비밀번호, 레벨, 랭크전 여부가 그것입니다.

  • 그래프에 방 만드는 방법이 나와 있습니다. 여기에는 방과 멤버 속성이 필요합니다. 멤버 속성이 필요한 이유는 방 만들기 함수가 호출자를 방의 첫 멤버로 자동 연결하기 때문입니다.

../../../_images/createproperties.png
  • Create Room and User properties 섹션을 보면 속성 맵을 몇 가지 만들었고 그 안에 서로 다른 값을 설정했음을 알 수 있습니다. 이 값들은 기본 값과 커스텀 값을 조합한 것으로, 그 목적에 관해서는 본 문서의 다른 부분에서 확인할 수 있습니다.

../../../_images/createcall.png
  • 설정이 끝나면 설정해 둔 속성을 이용하여 방을 만들 수 있습니다. Create Node Room은 무작위 노드(방 서버)에 방을 만들기 때문에 방 서버에 먼저 연결하지 않아도 됩니다. 콜백이 성공하면 자동으로 연결되고 레벨이 열립니다.

Strix 서버에 연결하는 방법은 사용자의 선택입니다. 단, 다음 순서를 따를 것을 권장합니다.

  1. 마스터 서버에 연결

  2. 검색 조건 지정

  3. 방 서버에 연결하여 방 목록 검색 또는 노드 방 목록 검색

  4. 방 정보를 이용하여 방 입장

Strix 연결은 백엔드에서 일어나며, Strix Unreal SDK에는 이 연결로 클라이언트 간에 액터를 동기화하는 액터 요소가 몇 가지 있습니다. 액터들은 또 블루프린트 함수를 이용하여 연결에서 정보를 불러오거나 다른 클라이언트에 메시지를 보냅니다. 이 게임 내 기능을 지금부터 살펴보겠습니다.

참고

앞서 일부 함수에서 채널 ID 매개변수를 보셨을지도 모르겠습니다. 한 번에 여러 방에 연결할 때 필요한 것들입니다. 이것은 나중에 설명하겠습니다. 일단은 기본 값 0을 이용하겠습니다.