주요 기능
Multiplayer Manager API의 주요 기능은 다음과 같습니다.- 간편한 세션 관리 및 XBOX services 매치메이킹
- 상태 기반 및 이벤트 기반 프로그래밍 모델
- XBOX services 모범 사례 준수 및 Multiplayer XR 규정 준수
- 2015 멀티플레이어 흐름도 구현
- 대규모 MPSD 세션(100명 이상의 멤버)은 지원되지 않습니다.
- P2P 호스팅 멀티플레이어 디자인만 대상으로 합니다. 전용 서버가 있는 타이틀은 대신 Multiplayer Activity Service 또는 Multiplayer Service API 및 서비스 간 호출(NDA 항목)을 사용해야 합니다.
인증을 통과하려면 게임에서 여전히 온라인 멀티플레이어에 대한 필수 이벤트를 구현해야 합니다.
개요
Multiplayer Manager는 다음 주요 개념을 중심으로 합니다.- 로비 세션: 디바이스에 로컬인 사용자와 함께 플레이하려는 초대된 친구를 관리하는 데 사용되는 영구 세션입니다. 그룹은 여러 라운드, 맵, 레벨과 같은 게임을 플레이할 수 있습니다. 로비 세션은 이 핵심 친구 그룹(디바이스에 로컬인 플레이어 포함)을 추적합니다. 일반적으로 이 그룹은 호스트가 메뉴를 탐색하고 그룹 멤버와 채팅하며 어떤 게임 모드를 플레이할지 결정할 때 형성됩니다.
- 게임 세션: 게임의 특정 인스턴스를 플레이하는 플레이어를 추적합니다. 예를 들어 레이스, 맵 또는 레벨입니다. XblMultiplayerManagerJoinGameFromLobby를 통해 로비 세션의 멤버를 포함하는 새 게임 세션을 만들 수 있습니다. 멤버가 초대를 수락하면 그들은 로비와 (자리가 있으면) 게임 세션에 추가됩니다. 매치메이킹이 활성화된 경우 게임 세션에 추가 플레이어를 추가할 수 있지만 이러한 추가 플레이어는 로비 세션에 추가되지 않습니다. 즉, 게임이 종료되면 로비 세션의 플레이어는 여전히 함께 있지만 매치메이킹에서 온 추가 플레이어는 함께 있지 않습니다.
- XblMultiplayerManagerMember: 로컬 또는 원격 디바이스에 로그인된 개별 사용자를 나타냅니다.
- XblMultiplayerManagerDoWork: 타이틀과 XBOX services 멀티플레이어 서비스 간에 적절한 게임 상태 업데이트가 유지되도록 합니다. 최상의 성능을 보장하려면 XblMultiplayerManagerDoWork를 프레임당 한 번씩과 같이 자주 호출해야 합니다. XblMultiplayerManagerDoWork는 게임이 처리할 XblMultiplayerEvent 콜백 이벤트 배열을 제공합니다.
상태 머신
XblMultiplayerManagerDoWork 호출은 상태를 최신 상태로 유지하기 위해 필요합니다. Multiplayer Manager가 작업을 수행하려면 XblMultiplayerManagerDoWork 메서드를 정기적으로 호출해야 합니다. 이를 수행하는 가장 안정적인 방법은 프레임당 최소 한 번 호출하는 것입니다. XblMultiplayerManagerDoWork는 수행할 작업이 없을 때 빠르게 반환되므로 너무 자주 호출하는 것에 대해 걱정할 필요가 없습니다.스레딩
Multiplayer Manager API에서 반환된 모든 객체는 스레드 안전으로 간주되어서는 안 됩니다. 그러나 여러 스레드에서 호출하는 경우 스레드 동기화를 수행할 수 있는 제어권을 제공합니다. 라이브러리에는 내부 다중 스레드 보호가 있습니다. 그러나 한 스레드가 특정 값에 액세스해야 하는 경우 여전히 자체 잠금을 구현해야 합니다. 예를 들어 다른 스레드가 XblMultiplayerManagerDoWork를 호출하는 동안 멤버 목록을 순회하는 경우 등이 있습니다.상태 기반 모델 업데이트
Multiplayer Manager는 플레이어가 참여, 이탈 또는 세션이 업데이트될 때 백그라운드에서 세션을 업데이트하는 상태 기반 모델을 유지합니다. UI 스레드와 게임 스레드 간의 스레드 동기화 문제를 피하기 위해 Multiplayer Manager는 XblMultiplayerManagerDoWork 메서드를 호출할 때까지 세션의 앱에서 볼 수 있는 상태를 업데이트하지 않습니다. 전통적으로는 백그라운드 스레드에서 세션 변경과 같은 이벤트에 대한 알림을 받은 다음, 이러한 변경 사항을 표시하기 위해 UI 스레드와 동기화해야 합니다. Multiplayer Manager를 사용하면 이러한 백그라운드 작업이 자동으로 수행됩니다. 원하는 시점에 메인 스레드에서 XblMultiplayerManagerDoWork를 호출하여 Multiplayer Manager가 뒤에서 버퍼링하고 있는 상태의 최신 스냅샷을 얻을 수 있습니다.이벤트 및 알림
Multiplayer Manager는 중요한 이벤트 집합(XblMultiplayerEvent 참조)을 정의하고 이벤트가 발생하면 XblMultiplayerManagerDoWork 메서드를 통해 타이틀에 알립니다. 예를 들어 이벤트에는 원격 플레이어의 참여 또는 이탈, 멤버 속성 변경, 세션 상태 변경 등이 포함됩니다. 모든 Multiplayer Manager API는 비동기적입니다. XblMultiplayerManagerDoWork 메서드는 이러한 비동기 작업이 완료되면 이벤트 목록을 반환합니다. 타이틀은 상황에 맞게 이러한 이벤트를 적절히 처리해야 합니다. 자세한 내용은 XblMultiplayerEvent 클래스 문서를 참조하세요. 반환된 각 XblMultiplayerEvent에는 이벤트 유형에 대한 적절한args를 가져오기 위해 사용해야 하는 EventArgsHandle이 포함됩니다.
예를 들어 XblMultiplayerEventType이 MemberJoined인 경우, XblMultiplayerEventArgsMembersCount 및 XblMultiplayerEventArgsMembers를 호출할 수 있습니다.
다음 예제는 이벤트를 처리하기 위해 XblMultiplayerManagerDoWork를 사용하는 방법을 보여줍니다.
Flat C API
- XblMultiplayerEvent
- XblMultiplayerEventArgsMembers
- XblMultiplayerEventArgsMembersCount
- XblMultiplayerEventArgsPropertiesJson
- XblMultiplayerEventType
- XblMultiplayerManagerDoWork
- XblMultiplayerManagerMember
시나리오
이 섹션에서는 일반적인 시나리오와 각 시나리오에서 호출할 API를 다룹니다. Multiplayer Manager가 뒤에서 수행하는 작업에 대한 일부 정보도 제공됩니다.- Multiplayer Manager를 사용하여 친구와 멀티플레이어 게임 플레이 활성화
- Multiplayer Manager를 사용한 SmartMatch로 멀티플레이어 게임 찾기
- Multiplayer Manager를 사용하여 게임 초대 보내기
- Multiplayer Manager를 사용하여 게임을 시작하기 위한 프로토콜 활성화 처리
Multiplayer Manager가 수행하지 않는 작업
Multiplayer Manager는 멀티플레이어 시나리오를 훨씬 쉽게 구현할 수 있게 해주고 일부 데이터를 추상화합니다. 그러나 Multiplayer Manager는 다음을 처리하지 않습니다.- MMO(대규모 다중 사용자 온라인) 게임 또는 대규모 세션(세션당 100명 이상의 플레이어)이 필요한 기타 게임 유형과 같은 지속적인 온라인 서버 게임
- 서버 대 서버 세션 관리
- 세분화된 속도 제한을 준수하기 위한 MPSD 호출 조절
- Multiplayer 서비스 API와 Multiplayer Manager API 혼합
Multiplayer Manager는 특정 네트워크 기술에 제한되지 않으며 모든 네트워크 통신 계층과 함께 작동해야 합니다.
리소스
API 작동 예제는 NetRumble 샘플을 참조하세요. API 문서는 multiplayer_manager_c를 참조하세요.multiplayer_manager_c.h 헤더 파일도 볼 수 있습니다.
질문, 피드백이 있거나 Multiplayer Manager 사용에 문제가 있는 경우, 개발자 계정 관리자(DAM)에게 문의하거나 https://forums.xboxlive.com 포럼에 지원 스레드를 게시하세요.