로비는 게임 및 사용자 상태를 실시간으로 업데이트하기 위해 사용자들을 지속적으로 연결합니다. 사용자는 보통 멀티플레이 전에 팀을 구성하거나, 사전 게임 옵션을 선택하거나, 다른 플레이어의 참가를 기다리기 위해 로비를 생성하거나 로비에 참가할 수 있습니다. 사용자는 로비 인터페이스(Lobby Interface) 로 로비를 생성하고 관리하거나, 로비에 참가하거나, 로비에서 이탈할 수 있습니다.
로비 인터페이스에 액세스하려면 플랫폼 인터페이스(Platform Interface) 함수인 EOS_Platform_GetLobbyInterface
를 통해 EOS_HLobby
핸들을 얻으면 됩니다. 모든 로비 인터페이스 함수는 첫 파라미터로 이 핸들이 필요합니다. EOS_HPlatform
핸들은 반드시 연산 완료 시 트리거할 적절한 콜백을 티킹해야 합니다.
로비 생성하고 소멸시키기
EOS_Lobby_CreateLobby
함수는 로비를 생성합니다. 더 많은 프로퍼티와 자세한 정보는 EOS_Lobby_CreateLobbyOptions를 참고하세요. 다음과 같이 EOS_Lobby_CreateLobbyOptions
를 초기화합니다.
프로퍼티 | 값 |
---|---|
ApiVersion | EOS_LOBBY_CREATELOBBY_API_LATEST |
LocalUserId | 로비를 생성하는 사용자입니다. 이 사용자는 자동으로 로비에 오너로서 참가합니다. |
MaxLobbyMembers | 로비에 동시 참가 가능한 최대 사용자 수입니다. |
PermissionLevel | 로비의 공개 여부입니다. 자세한 내용은 권한 레벨 섹션을 참조하세요. |
BucketId | 로비와 연결된 버킷 ID입니다. |
bPresenceEnabled | true면 이 로비가 현재상태 정보와 연결됩니다. 사용자의 현재상태는 한 번에 하나의 로비에만 연결될 수 있습니다. |
bAllowInvites | 로비 멤버가 다른 사용자를 초대하도록 허용되는지 여부입니다. |
bDisableHostMigration | 호스트 마이그레이션이 허용되는지 / 원래 호스트가 나간 뒤 로비가 계속 열려 있을지 여부입니다. |
bEnableRTCRoom | 이 로비의 모든 멤버를 위한 리얼타임 커뮤니케이션(Real-time Communication, RTC) 룸을 생성합니다. 로비의 모든 멤버는 로비에 연결할 때 자동으로 RTC 룸에 참가하며, 로비에서 나가거나 로비에서 제거될 때 자동으로 RTC 룸에서 나가게 됩니다. RTC 룸의 참가와 이탈은 자동으로 처리되지만, 애플리케이션에서 룸의 다른 모든 기능을 처리할 때는 여전히 EOS RTC 인터페이스를 사용해야 합니다. |
작업이 끝나면 EOS_Lobby_OnCreateLobbyCallback
이 EOS_Lobby_CreateLobbyCallbackInfo
데이터 구조로 실행됩니다. 해당 데이터 구조의 ResultCode
필드가 성공인 경우, LobbyId
필드에 새로운 로비의 ID 값이 포함됩니다. 이 ID 값은 로비와의 더 많은 인터랙션에 필요합니다.
로비를 소멸시키려면, 로비의 오너가 다음과 같은 정보로 초기화된 EOS_Lobby_DestroyLobbyOptions
구조가 있는 EOS_Lobby_DestroyLobby
를 호출해야 합니다.
프로퍼티 | 값 |
---|---|
ApiVersion | EOS_LOBBY_DESTROYLOBBY_API_LATEST |
LocalUserId | 로비의 소멸을 요청한 사용자입니다. 이 사용자는 반드시 로비의 현재 오너여야 합니다. |
LobbyId | 소멸시킬 로비의 ID입니다. |
완료되면 소멸이 성공했을 경우 로비의 ID를 표시하는 EOS_Lobby_DestroyLobbyCallbackInfo
데이터 구조를 가진 EOS_Lobby_OnDestroyLobbyCallback
콜백 함수가 실행됩니다. 로비가 폐쇄되면 남은 멤버를 전부 자동으로 제거하고, 멤버 상태를 EOS_LMS_CLOSED
상태로 업데이트하도록 트리거합니다.
로비 수명 주기
로비의 수명 주기는 보통 다음 순서를 따릅니다.
- 사용자가 로비를 생성합니다. 이 사용자는 자동으로 로비에 참가하게 되며, 로비의 첫 멤버이자 오너가 됩니다.
- 오너가 로비의 초기 상태를 설정하고, 다른 사용자를 로비에 참가하도록 초대할 수 있습니다.
- 다른 사용자가 로비에 참가하거나 이탈할 수 있습니다. 연결된 상태에서 멤버는 자신의 상태 정보를 업데이트하고 다른 사용자를 초대할 수 있습니다.
- 로비 오너는 게임 상태에 해당하는 데이터를 업데이트할 수 있습니다.
- 오너는 로비에서 멤버를 제거하거나 오너 자격을 다른 멤버에게 양도할 수 있습니다.
- 사용자는 로비를 이탈하거나 소멸시키지 않고 여러 라운드의 게임을 플레이할 수 있습니다. 로비의 수명은 게임 로직으로 결정됩니다.
- 최종적으로 오너가 로비를 소멸시킵니다.
로비 참가 또는 이탈하기
유효한 EOS_HLobbyDetails
핸들로 EOS_Lobby_JoinLobby
를 호출하면, 핸들이 참조하는 로비에 사용자가 참가하려고 시도하게 됩니다. 사용자는 동시에 여러 개의 로비에 상주할 수 있습니다. 다른 로비에 참가하기 위해 기존 로비에서 이탈할 필요가 없습니다. 새 로비에 참가해도 기존 로비에서 나가지지 않습니다. 로비의 이탈 또는 소멸은 명시적이어야 합니다.
로비에서 나가려면 EOS_Lobby_LeaveLobby
를 호출합니다. 이탈하는 사용자가 현재 로비의 오너(Owner)라면, EOS는 나머지 사용자 중에서 새로운 오너를 선택합니다. 사용자가 한 명이라도 이탈하거나 오너가 바뀌면 모든 멤버가 알림을 받습니다.
로비에 사용자 초대하기
로비에 있는 사용자는 EOS_Lobby_SendInvite
함수로 다른 사용자를 초대할 수 있습니다. 초대 보내기에 성공하면 로컬에서 EOS_Lobby_OnSendInviteCallback
이 트리거됩니다. 타깃 사용자에게 초대가 도착하면 해당 사용자는 알림을 받습니다. 게임은 EOS_Lobby_AddNotifyLobbyInviteAccepted
를 사용하여 플레이어가 오버레이에서 수락(Accept) 을 클릭하는 시기를 파악합니다. 초대(Invite) 버튼, 소셜 오버레이(Social Overlay), 로비 간의 인터랙션에 관해 자세히 알아보려면 소셜 오버레이 통합: 로비 사용을 참고하세요. 에픽게임즈 런처의 초대 기능을 실행하려면 디플로이를 아티팩트에 매핑해야 합니다.
초대 거부하기
초대를 거부하려면 다음과 같은 정보가 포함된 EOS_Lobby_RejectInviteOptions
구조를 가진 EOS_Lobby_RejectInvite
를 호출합니다.
프로퍼티 | 값 |
---|---|
ApiVersion | EOS_LOBBY_REJECTINVITE_API_LATEST |
LobbyId | 초대와 관련된 로비의 ID |
LocalUserId | 초대를 거절한 사용자의 ID |
완료되면 EOS_Lobby_RejectInviteCallbackInfo
데이터 구조를 가진 EOS_Lobby_OnRejectInviteCallback
함수가 로컬로 트리거됩니다. 성공하면 해당 초대는 시스템에서 영구 삭제됩니다.
모든 초대 업데이트하기
보류 중인 모든 초대를 로컬 캐시에 포함시키려면 다음과 같은 정보가 포함된 EOS_Lobby_QueryInvitesOptions
구조를 가진 EOS_Lobby_QueryInvites
를 호출합니다.
프로퍼티 | 값 |
---|---|
ApiVersion | EOS_LOBBY_QUERYINVITES_API_LATEST |
LocalUserId | 얻으려는 초대를 보낸 사용자의 ID |
작업이 끝나면 EOS_Lobby_OnQueryInvitesCallback
이 EOS_Lobby_QueryInvitesCallbackInfo
데이터 구조로 실행됩니다. 성공 시 로컬 캐시에 해당 사용자의 보류 중인 초대가 모두 포함되어 초대를 검색할 수 있습니다. 스타트업 때 사용자가 오프라인 상태일 동안 받은 초대를 확인하기에 유용한 기능입니다. 알림을 등록한 사용자가 플레이 도중에 이 함수를 호출할 필요는 거의 없습니다.
캐시에서 초대 가져오기
캐시에 저장된 초대를 보려면 우선 다음과 같이 초기화된 EOS_Lobby_GetInviteCountOptions
구조의 EOS_Lobby_GetInviteCount
를 호출해야 합니다.
프로퍼티 | 값 |
---|---|
ApiVersion | EOS_LOBBY_GETINVITECOUNT_API_LATEST |
LocalUserId | 내가 초대 횟수를 파악하려는 로컬 사용자 |
이 함수는 로컬 캐시에서 실행되며, 실행하는 즉시 캐시 내 보류 중인 초대 횟수 uint32_t
를 반환합니다. 그러면 아래와 같은 데이터를 가진 EOS_Lobby_GetInviteIdByIndexOptions
구조의 EOS_Lobby_GetInviteIdByIndex
를 호출할 수 있습니다.
프로퍼티 | 값 |
---|---|
ApiVersion | EOS_LOBBY_GETINVITEIDBYINDEX_API_LATEST |
LocalUserId | 초대를 소유한 로컬 사용자 |
Index | 얻을 초대의 인덱스 |
EOS_Lobby_GetInviteIdByIndex
는 로컬 캐시에서도 실행되며, 호출에 성공하는 즉시 EOS_Success
를 반환합니다. 성공 시, 제공하는 출력 파라미터에 초대 데이터의 사본과 그 크기가 포함됩니다. 필요 없어진 버퍼는 비워야 합니다.
알림
사용자가 EOS_Lobby_AddNotifyLobbyInviteReceived
를 통해 콜백을 등록한 상태라면 실시간으로 초대를 받을 수 있습니다. 콜백 데이터에는 초대와 연관성이 있는 정보가 전부 포함되어 있습니다. 이 시점에서 사용자는 EOS_Lobby_CopyLobbyDetailsHandleByInviteId
를 사용하여 EOS_HLobbyDetails
형식으로 초대를 얻을 수 있습니다. 로비에 참가하려면 EOS_HLobbyDetails
를 반드시 보유해야 합니다. 애플리케이션을 닫거나 오프라인 상태가 되면 EOS_Lobby_RemoveNotifyLobbyInviteReceived
를 사용하여 알림 목록에서 콜백을 제거합니다.
로비에서 멤버 제거하기
로비의 오너는 언제든지 로비 멤버를 제거할 수 있습니다. 멤버를 제거하려면 다음과 같이 초기화된 EOS_Lobby_KickMemberOptions
데이터 구조를 가진 EOS_Lobby_KickMember
를 호출합니다.
프로퍼티 | 값 |
---|---|
ApiVersion | EOS_LOBBY_KICKMEMBER_API_LATEST |
LobbyId | 멤버를 제거할 로비의 ID. |
LocalUserId | 제거를 요청한 로비 멤버의 ID. 반드시 로비 오너(Owner)여야 합니다. |
EOS_ProductUserId TargetUserId | 제거될 로비 멤버의 ID. |
작업이 끝나면 EOS_Lobby_KickMemberCallbackInfo
데이터 구조를 가진 EOS_Lobby_OnKickMemberCallback
함수에 대한 호출을 받습니다. 또한, 나머지 로비 멤버 전원은 EOS_LMSC_KICKED
이벤트의 알림을 받습니다.
로비 검색하기
EOS_Lobby_CreateLobbySearch
는 검색이 허용된 로비를 찾을 때 사용할 수 있는 EOS_HLobbySearch
타입 핸들을 생성합니다. 자세한 내용은 '권한 레벨(Permission Level)'을 참조하세요. 아래 함수를 사용하여 이 핸들을 구성한 다음, EOS_LobbySearch_Find
를 호출하여 실행합니다. 완료에 성공하면 애플리케이션이 검색 결과를 탐색할 수 있습니다. 여러 핸들로 복수의 검색 작업을 동시에 실행할 수 있습니다.
검색 완료 후 EOS_LobbySearch_GetSearchResultCount
를 사용하면 지정된 EOS_HLobbySearch
핸들의 검색 결과를 얻을 수 있습니다. 그리고 EOS_LobbySearch_CopySearchResultByIndex
로 개별 결과의 사본을 요청할 수 있습니다. 데이터 사본이 필요 없어지면 EOS_LobbyDetails_Release
로 제거해서 소모한 메모리를 수거합니다.
로비 ID로 검색하기
사용자가 정확한 로비 ID(Lobby ID)를 가지고 있다면, EOS_LobbySearch_SetLobbyId
로 직접 검색할 수 있습니다. 이 API로 다른 사용자와 로비 ID를 공유할 수는 없습니다.
사용자 ID로 검색하기
EOS_LobbySearch_SetTargetUserId
는 알려진 사용자 ID를 가져온 후, 타깃 사용자가 멤버로 소속된 로비를 나타내는 검색 결과를 반환합니다.
어트리뷰트로 검색하기
로비를 찾는 가장 강력한 방법은 원하는 세팅의 서브셋을 검색하는 것입니다. 사용자가 유저 인터페이스에서 선택하는 필터 컬렉션에 따를 수도 있고, 사용자의 기술과 다른 인수를 베이스로 사용자에게 보이지 않도록 자동 처리할 수도 있고, 두 메서드를 결합할 수도 있습니다.
EOS_LobbySearch_SetParameter
는 사용자가 EOS_Lobby_AttributeData
를 구성할 수 있게 하고, 서비스에 저장된 기존의 모든 로비를 상대로 어트리뷰트를 어떻게 비교할지 정하는 EOS_EComparisonOp
를 제공합니다. 이러한 호출이 하나 이상이면 묵시적인 부울 AND
를 사이에 두고 검색 파라미터를 설정합니다.
비교 연산자
연산자 | 설명 |
모든 어트리뷰트 타입에 작동하는 비교 연산자 | |
EOS_CO_EQUAL | 검색값이 어트리뷰트와 정확히 같습니다. |
EOS_CO_NOTEQUAL | 검색값이 어트리뷰트와 정확히 같지 않습니다. |
숫자 타입에 작동하는 비교 연산자 | |
EOS_CO_GREATERTHAN | 어트리뷰트가 검색값을 초과합니다. |
EOS_CO_GREATERTHANOREQUAL | 어트리뷰트가 검색값 이상입니다. |
EOS_CO_LESSTHAN | 어트리뷰트가 검색값 미만입니다. |
EOS_CO_LESSTHANOREQUAL | 어트리뷰트가 검색값 이하입니다. |
EOS_CO_DISTANCE | 어트리뷰트가 abs(attribute - searchvalue) = 0 공식에 따라 검색값과 유사합니다. |
스트링 타입에 작동하는 비교 연산자 | |
EOS_CO_ANYOF | 어트리뷰트가 세미콜론으로 구분된 스트링 값 목록에 있습니다. 예: "This;OrThis;MaybeThis" |
EOS_CO_NOTANYOF | 어트리뷰트가 스트링값 목록에 없습니다. 예: "NotThis;OrThisEither" |
검색 결과 제한하기
얻을 수 있는 최대 검색 결과 개수의 한도를 정하려면 EOS_LobbySearch_SetMaxResults
함수를 사용합니다.
로비 정보 얻기
로비의 정보를 얻으려면 EOS_HLobbyDetails
핸들을 요청합니다. 이 정보를 제공하는 함수는 로컬 사용자와 로비의 연결에 따라 세 가지가 있습니다.
EOS_Lobby_CopyLobbyDetailsHandle
은 현재 로비에 연결된 사용자가 사용할 수 있습니다.EOS_Lobby_CopyLobbyDetailsHandleByInviteId
는 로비 초대가 필요합니다.EOS_LobbySearch_CopySearchResultByIndex
는 로컬 사용자가 검색해서 발견한 로비에 사용 가능합니다.
이 작업 중 하나를 성공적으로 완료하면 다음 정보에 액세스할 수 있는 EOS_HLobbyDetails
핸들을 받게 됩니다.
- 로비 ID(Lobby ID): 로비의 고유 식별자
- 로비 오너(Lobby Owner): 로비의 현재 오너
- 로비 멤버(Lobby Members) : 로비의 현재 멤버
- 귄한 레벨(Permission Level): 누가 로비를 찾거나 참가할 수 있는지에 대한 제한. 아래 '권한 레벨'을 참고하세요.
- 가용 공간(Space Available): 현재 이용할 수 있는 개방 슬롯의 수
- 최대 멤버(Max Members): 로비에 동시에 수용 가능한 최대 사용자 수
- 멤버 수(Member Count): 로비에 있는 현재 멤버 수
- 로비 어트리뷰트(Lobby Attributes): 로비와 관련된 키-값 쌍
- 로비 멤버 어트리뷰트(Lobby Member Attributes): 각각의 개별 사용자와 관련된 키-값 쌍
- 로비 멤버 플랫폼(Lobby Member Platform): 서버가 식별하는 개인 사용자에 대한 하드웨어 플랫폼입니다. 이 값은 콘솔 플랫폼을 사용하는 로비 멤버에게만 제공됩니다. 콘솔 사용자가 아니면 자리표시자를 반환합니다. 자리표시자 값은 해당 사용자의 하드웨어 플랫폼을 신뢰할 만하게 식별할 수 없다는 의미입니다.
로비 오너(Owner)의 ID를 찾으려면 EOS_LobbyDetails_GetLobbyOwner
를 호출합니다. 로비 멤버의 ID를 찾으려면 우선 EOS_LobbyDetails_GetMemberCount
를 호출하여 현재 멤버 수를 얻은 다음, 현재 멤버 수만큼 반복작업하여 EOS_LobbyDetails_GetMemberByIndex
를 호출합니다. EOS_LobbyDetails_Info
데이터 구조 형식의 로비 세부사항은 EOS_LobbyDetails_CopyInfo
함수로 확인할 수 있습니다. 획득하는 EOS_LobbyDetails_Info
는 EOS SDK의 캐시로 저장된 정보의 사본입니다. 이 데이터를 소유하게 되므로, 메모리 누수를 막으려면 반드시 EOS_LobbyDetails_Info_Release
함수로 해제해야 합니다. 해당 데이터는 스냅샷으로, 받은 후에 로비 정보가 변경되어도 업데이트되지 않습니다.
권한 레벨
로비의 권한 레벨(Permission Level)은 사용자가 로비를 발견하고 참가하는 조건을 제어합니다. 오너(Owner)는 EOS_LobbyModification_SetPermissionLevel
을 호출하여 언제든지 권한 레벨을 바꿀 수 있습니다. 사용 가능한 세팅은 다음과 같습니다.
권한 레벨(매크로) | 로비 행동 |
---|---|
EOS_LPL_PUBLICADVERTISED | 공개(Public) 로비입니다. 정원이 차지만 않았다면 모든 사용자가 언제든 찾거나 이용할 수 있습니다. |
EOS_LPL_JOINVIAPRESENCE | 친구 전용 로비입니다. 공개 검색에 나오지 않으며, 오너의 친구만 참가할 수 있습니다. 하지만 비공개 로비가 아니므로 로비 ID를 알면 찾을 수 있습니다. |
EOS_LPL_INVITEONLY | 비공개(Private) 타입의 로비입니다. 검색에 나오지 않습니다. 기존 멤버인 사용자의 초대를 받아야만 참가할 수 있습니다. |
로비 또는 사용자 정보 수정하기
EOS_Lobby_UpdateLobbyModification
을 호출하여 로비 수정 핸들(EOS_HLobbyModification
입력)을 얻으면, 로비 오너(Lobby Owner)가 로비를 수정하거나 멤버가 자신의 사용자 정보를 변경할 수 있습니다.
오너 변경하기
오너는 EOS_Lobby_PromoteMember
를 호출하여 로비의 다른 멤버를 승격할 수 있습니다. 로비마다 한 명의 오너만 존재할 수 있으므로, 호출자는 이 프로세스에서 오너 지위를 잃게 됩니다. 모든 멤버는 이 이벤트에 대한 알림을 받습니다.
로비 및 로비 멤버 프로퍼티
로비와 각 멤버는 EOS_Lobby_Attribute
데이터 타입이 지원하는 애플리케이션별 키-값 어트리뷰트를 가질 수 있습니다. 이러한 어트리뷰트는 숫자, 스트링 또는 부울 데이터로 표시되어야 합니다. EOS_Lobby_Attribute
데이터 구조는 다음과 같은 정보를 포함합니다.
로비 및 로비 멤버 어트리뷰트에는 공개 및 비공개 비저빌리티가 있습니다. 공개 비저빌리티의 경우, 로비 밖의 모든 멤버에게 데이터가 공개되어 로비 어트리뷰트를 확인할 수 있으며, 로비 안에서 로비 멤버 어트리뷰트 데이터를 볼 수 있습니다. 비공개 비저빌리티의 경우, 로비 안에서 데이터가 공개되어 로비 어트리뷰트를 확인할 수 있으며, 멤버만이 로비 멤버 어트리뷰트 데이터를 볼 수 있습니다.
필드 | 콘텐츠 |
---|---|
Key | 어트리뷰트를 식별하기 위한 스트링입니다. 어트리뷰트 검색 시 시스템이 어트리뷰트를 이 스트링과 비교합니다. |
Value | Key 와 관련된 숫자, 스트링 또는 부울 데이터입니다. |
ValueType | Value 에 포함된 데이터 타입을 나타냅니다. |
Visibility | EOS_ELobbyAttributeVisibility 세션으로 노출되거나 단순히 로컬에 저장되는 어트리뷰트입니다. |
로비 내 한 명의 사용자 또는 로비 자체는 최대 EOS_LOBBYMODIFICATION_MAX_ATTRIBUTES
개의 어트리뷰트를 가질 수 있습니다. Key
안의 어트리뷰트 이름 필드는 EOS_LOBBYMODIFICATION_MAX_ATTRIBUTE_LENGTH
글자 수를 넘으면 안 됩니다.
로비의 현재 오너(Owner)는 다음과 같은 함수로 로비를 변경할 수 있습니다.
함수 | 효과 |
---|---|
EOS_LobbyModification_SetPermissionLevel | 로비의 권한 레벨(Permission Level)을 설정하는 데 사용합니다. |
EOS_LobbyModification_SetMaxMembers | 이 함수는 로비에 동시에 입장할 수 있는 최대 인원을 변경합니다. 이 값의 허용 범위는 현재 로비에 있는 인원수와 EOS_LOBBY_MAX_LOBBY_MEMBERS 사이입니다. |
EOS_LobbyModification_AddAttribute | 로비 데이터에 새로운 키-값 쌍을 추가합니다. |
EOS_LobbyModification_RemoveAttribute | 로비 데이터에서 키-값 쌍을 제거합니다. |
연결된 사용자는 누구나 다음과 같은 함수로 자신의 데이터를 수정할 수 있습니다.
함수 | 효과 |
---|---|
EOS_LobbyModification_AddMemberAttribute | 로비의 특정 멤버에게 새로운 키-값 한 쌍을 추가합니다. |
EOS_LobbyModification_RemoveMemberAttribute | 로비의 특정 멤버에게서 키-값 한 쌍을 제거합니다. |
어트리뷰트를 모두 원하는 대로 수정한 후에는 로비에 커밋해야 변경 사항이 적용됩니다. EOS_Lobby_UpdateLobby
를 호출하면 됩니다. 작업을 마치면 수정 사항이 적용되고 로비의 다른 멤버들이 알림을 받습니다. 콜백 함수에 대한 호출도 받게 됩니다.
이벤트 알림
사용자는 로비와 지속적으로 연결되며, 로비의 수명이 유지되는 동안 발생하는 이벤트의 알림을 받게 됩니다. 영향받는 로비를 자세히 설명하는 충분한 정보가 각 콜백과 함께 제공되므로 스타트업 시 알림을 등록할 수 있습니다.
로비 데이터 업데이트
로비의 오너가 로비 프로퍼티를 변경하면 모든 로비 멤버가 알림을 받습니다. 알림은 뭔가가 변경되었다는 단순한 정보를 전달합니다. 게임은 로비의 현재 데이터를 전부 평가하고 게임에 재적용할 것입니다.
사용자 데이터 업데이트
로비의 멤버가 자신의 데이터 프로퍼티를 변경하면 모든 로비 멤버가 알림을 받습니다. 알림은 뭔가가 변경되었다는 단순한 정보를 전달합니다. 게임은 로비 멤버의 현재 데이터를 전부 평가하고 게임에 재적용할 것입니다.
로비 멤버 상태
사용자가 로비 내에서 다음과 같은 활동을 하면 로비의 다른 모든 사용자가 알림을 받습니다.
이벤트 타입 | 의미 |
---|---|
EOS_LMS_JOINED | 신규 사용자가 로비에 참가했습니다. 곧 로비 멤버가 업데이트됩니다. |
EOS_LMS_LEFT | 기존 사용자가 로비에서 이탈했고, 그 사용자의 데이터가 제거되었습니다. |
EOS_LMS_DISCONNECTED | 기존 사용자가 예기치 않게 로비에서 이탈했습니다. |
EOS_LMS_KICKED | 로비 오너(Lobby Owner)가 특정 사용자를 로비에서 제거했습니다. |
EOS_LSM_PROMOTED | 이전 오너가 기존 사용자를 명시적으로 승격했거나, 로비 오너가 로비를 떠나면서 기존 사용자가 묵시적으로 승급되었습니다. |
EOS_LMS_CLOSED | 오너가 로비를 소멸시켰거나, 오류로 인해 로비가 소멸되었습니다. |
보이스 커뮤니케이션
EOS 로비를 사용하는 에픽 서버나 자체 백엔드 서버에서 EOS 보이스(EOS Voice) 채팅방을 호스팅할 수 있습니다. 사용자는 매치 중일 때나 제품의 로비에 있을 때 다양한 플랫폼을 사용하는 다른 플레이어와 일대일로 또는 그룹끼리 통신할 수 있습니다. 자세한 내용은 로비에 사용하는 보이스 및 보이스 인터페이스를 참고하세요.
연결 상태 유지
애플리케이션이 EOS 로비(EOS Lobby)의 RTC 룸(RTC Room) 기능을 사용하는 경우 수동으로 보이스 룸에 입장하거나 룸에서 나갈 필요가 없습니다. 로비 시스템이 내부에서 그 작업을 자동으로 처리하기 때문입니다. RTC 룸이 활성화된 채로 로비를 만들면, 로컬 사용자가 로비에 있는 동안 로비 시스템이 자동으로 RTC 룸에 입장하여 연결 상태를 유지합니다.
원한다면 애플리케이션이 정보 제공 목적으로 EOS_Lobby_IsRTCRoomConnected
, EOS_Lobby_AddNotifyRTCRoomConnectionChanged
, EOS_Lobby_RemoveNotifyRTCRoomConnectionChanged
함수를 사용하도록 선택할 수 있습니다. 적절한 예시는 멀티플레이어 로비에 있는데 로비 RTC 서비스의 연결이 끊겼을 때 연결 해제 아이콘을 표시하는 것입니다.
RTC 함수와 상호 작용
애플리케이션이 EOS_RTC_
* 또는 EOS_RTCAudio_
* 함수 툴세트와 상호작용하려면 먼저 EOS_Lobby_GetRTCRoomName
함수를 사용하여 로비와 연결된 채팅룸 이름을 구해야 합니다. 결과(Result) 파라미터가 EOS_Success
일 때 EOS_Lobby_GetRTCRoomName
을 가장 빠르게 호출할 수 있는 지점은 EOS_Lobby_OnJoinLobbyCallback
또는 EOS_Lobby_OnCreateLobbyCallback
내부입니다. 또한 애플리케이션은 로비의 RTC 룸(RTC Room)에 해당하는 모든 RTC 알림을 등록해야 이런 알림 직후에 발생할 수 있는 기존 룸 멤버 같은 알림이 누락되는 것을 방지할 수 있습니다.
RTC 룸 이름 사용 예시:
- 대화 상태, 룸 멤버 목록 같은 알림을 등록할 때
- 룸에서 로컬 사용자의 오디오 출력을 뮤트하거나 뮤트 해제할 때
- 룸 참여자를 차단하거나 차단 해제할 때
- 로컬 오디오 디바이스 세팅을 설정할 때
로비 RTC 대체 함수
EOS_RTC_
* 함수가 일반적으로 사용되지만, 이 기능이 내부적으로 처리되거나, 애플리케이션이 더 이상 데이터를 제공하지 않거나, EOS_RTCAdmin_
* 함수를 사용해서 이 함수가 로비와 호환되지 않는 경우 다음 함수를 대신 사용합니다.
함수 | 효과 |
---|---|
EOS_Lobby_GetRTCRoomName | 로컬 사용자가 입장해 있는 특정 로비와 연결된 RTC 룸의 이름을 구합니다. |
EOS_Lobby_IsRTCRoomConnected | 로비와 연결된 RTC 룸의 현재 연결 상태를 구합니다. |
EOS_Lobby_AddNotifyRTCRoomConnectionChanged | 모든 로비와 연결된 RTC 룸의 연결 상태가 변경될 때마다 알림을 받도록 등록합니다. 알림 콜백 정보에는 알림과 관련된 RTC 룸과 로컬 사용자가 포함됩니다. |
EOS_Lobby_RemoveNotifyRTCRoomConnectionChanged | RTC 룸의 연결 상태가 변경되어도 알림을 받지 않도록 등록을 취소합니다. |
EOS_Lobby_HardMuteMember | 로비 호스트가 특정 로비 멤버를 방 전체에서 뮤트하거나 뮤트 해제하도록 허용합니다. |
하드 뮤트
로비 오너는 EOS_Lobby_HardMuteMemberOptions
데이터 구조를 가진 EOS_Lobby_HardMuteMember
를 호출하여 로비의 기존 멤버를 하드 뮤트(Hard Mute)할 수 있습니다. 이 구조에는 해당 멤버를 뮤트할지에 대한 정보가 포함됩니다. 하드 뮤트는 특정 로비 멤버의 소리가 모든 멤버에게 들릴지 여부를 각자의 로컬 뮤트 상태와 무관하게 변경합니다.
프로퍼티 | 값 |
---|---|
ApiVersion | EOS_LOBBY_HARDMUTEMEMBER_API_LATEST |
LobbyId | 로비의 ID입니다. |
LocalUserId | 하드 뮤트를 요청하는 사용자입니다. 이 사용자는 로비 오너여야 합니다. |
TargetUserId | 하드 뮤트하거나 뮤트 해제할 사용자입니다. |
bHardMute | 사용자의 하드 뮤트 상태(뮤트 켜짐 또는 꺼짐)입니다. |
작업이 끝나면 EOS_Lobby_OnHardMuteMemberCallback
이 EOS_Lobby_HardMuteMemberCallbackInfo
데이터 구조로 실행됩니다. 데이터 구조의 ResultCode
필드가 성공이라면, LobbyId
필드에 로비의 ID 값이 포함되고 TargetUserId
에 하드 뮤트 상태가 업데이트된 멤버가 포함됩니다.
사용 제한
로비는 게임 및 사용자 상태를 실시간으로 업데이트하기 위해 사용자들을 지속적으로 연결합니다. 사용자는 보통 멀티플레이 전에 팀을 구성하거나, 다른 사용자와 채팅하거나, 사전 게임 옵션을 선택하거나, 다른 플레이어의 참가를 기다리기 위해 로비를 생성하거나 로비에 참가할 수 있습니다. 스로틀 조절, 사용 할당량, 모범 사례에 대한 일반적인 정보는 서비스 사용 제한을 참고하세요.
다음은 로비 서비스의 일반적인 제한 사항입니다.
기능 | 서비스 제한 |
---|---|
로비 내 최대 플레이어 | 64 |
최대 세션 어트리뷰트 | 100 |
최대 멤버 어트리뷰트 | 100 |
스트링 어트리뷰트 길이 | 1,000자 |
추가로 사용자당 사용 제한도 있습니다. 스로틀링을 방지하려면 다음 제한 사항을 고려하세요.
기능 | 사용자 제한 |
---|---|
연결 | 분당 요청 30건 |
로비 생성 | 분당 요청 30건 |
로비 삭제 | 분당 요청 30건 |
로비 참가 | 분당 요청 30건 |
사용자 한 명이 동시에 참가할 수 있는 로비 수 | 16 |
로비 데이터 읽기 | 분당 요청 100건 |
로비 어트리뷰트 업데이트 | 분당 요청 100건 |
멤버 어트리뷰트 업데이트 | 분당 요청 100건 |
로비 세팅 변경 | 분당 요청 30건 |
사용자 초대 | 분당 요청 30건 |
초대 삭제 | 분당 요청 30건 |
플레이어 추방 | 분당 요청 30건 |
멤버를 로비 오너로 승격 | 분당 요청 30건 |
로비 찾기 | 분당 요청 30건 |
ID로 로비 찾기 | 분당 요청 100건 |
사용자의 로비 찾기 | 분당 요청 30건 |
사용자의 초대 찾기 | 분당 요청 30건 |
초대로 로비 찾기 | 분당 요청 30건 |
쿼리당 최대 검색 결과 | 256개 |