- 누가 게임에서 액션을 취했는가?
- 누가 성취(achievement)를 얻는가?
- 누가 구매를 하는가?
XBOX One ERA와 Microsoft Game Development Kit(GDK)의 사용자 모델 차이
새로운 Microsoft Game Development Kit(GDK) 타이틀을 개발하든 이전 XBOX One ERA 타이틀을 이식하든, XBOX One ERA의 사용자 모델에 익숙해져 있으면 사용자 및 입력 장치 관리 구현이 혼란스러울 수 있습니다.- 게임 저장이나 성취가 필요한 경우와 같이 사용자가 필요한 타이틀은 주(primary) 사용자를 설정해야 합니다. 이 주 사용자는 타이틀 전용 구성이며 시스템에서 제공되지 않습니다.
- 타이틀은 XUserAddAsync 호출을 통해 추가된 사용자에 대해서만 알고 있습니다. 타이틀은 추가하지 않은 사용자에 대해 시스템이 취한 어떤 작업도 통보받지 않습니다.
- 이전에 타이틀 사용자와 연결되었던 장치가 타이틀이 모르는 사용자와 연결되면, 타이틀은 새 사용자 없이 장치 연결 이벤트만 통보받습니다.
- 타이틀 사용자와 연결되지 않았던 장치가 XUserAddAsync로 추가되지 않은 다른 사용자와 연결되면 타이틀은 연결 이벤트를 통보받지 않습니다.
- 계정 선택기는 어떻게 표시되었는지(시스템 가이드 vs XUserAddAsync)에 따라 다르게 동작합니다.
UserManagement 샘플은 다양한 게임 상황에서 사용자 관리와 입력 장치 페어링
동작을 다룹니다. 또한 사용자 및 입력 장치와 관련된 XR 요구 사항을 처리합니다. 샘플에 대한 자세한 내용은
Microsoft Game Development Kit 샘플을
참조하세요.
지정된 사용자를 식별하는 방법
게임은 입력 장치와 상호 작용하기 위해 로컬 ID를 사용합니다. 로컬 ID는 게임 세션 내에서 그 사용자의 수명 동안 사용자와 함께 유지되는 식별자입니다. 로컬 ID는 게임이 생성하는 모든 프로세스 또는 게임이 XLaunchNewGame을 호출할 때 사용할 수 있습니다. 게임 세션 간에 사용자를 식별하기 위해 로컬 ID를 사용하지 마세요. 사용자의 로컬 ID를 얻으려면 XUserGetLocalId 함수를 사용하세요.특정 입력 장치를 식별하는 방법
게임패드, 아케이드 스틱, 휠과 같은 게이밍 장치는 모두 APP_LOCAL_DEVICE_ID 구조체로 표현되는 고유한 장치 ID를 갖습니다. 이 장치 ID는 게임의 여러 실행 또는 시스템 재시작에 걸쳐 유지됩니다. 장치 ID는 동일한 시스템에서 실행되는 두 개의 서로 다른 게임 사이에서 다릅니다. 콘솔에서XInput을 사용하는 경우
XInputGetDeviceId를 사용하여 장치 ID를 얻을 수 있습니다.
GameInput을 사용하는 경우
IGameInputDevice::GetDeviceInfo 호출에서 반환되는
GameInputDeviceInfo 개체의
deviceId 멤버에서 장치 ID를 얻을 수 있습니다.
사용자 모델
타이틀에 사용자가 필요한 경우(예: 게임 저장이나 성취가 필요한 경우) 타이틀은 주 사용자를 설정할 전적인 책임이 있습니다. 이 주 사용자는 여러 사용자의 로그인을 허용할 때에도 유지되어야 합니다. 타이틀은 또한 필요에 따라 주 사용자를 변경할 수 있도록 허용해야 합니다. 이를 수행하는 방법은 XUserAddAsync로 계정 선택기를 여는 Switch User 프롬프트를 갖는 것입니다. 계정 선택기는 이전에 콘솔에 로그인한 모든 사용자를 나열하고, 새 계정에 로그인하기 위한 Add new 버튼이 있으며, 임시 게스트 사용자의 로그인을 허용합니다. 사용자의 실제 신원과 관계없이 이러한 사용자 계정 중 어느 것이든 선택할 수 있습니다. 시스템은 이러한 방식으로 다른 사용자로 플레이하기로 선택하는 사용자를 지원합니다. Microsoft Game Development Kit(GDK) 타이틀은 시스템의 사용자에 대한 완전한 지식을 갖지 않습니다. 대신 사용자는 XUserAddAsync 호출을 통해서만 타이틀에 추가될 수 있습니다. 이러한 방식으로 추가된 사용자는 타이틀이 상호 작용할 수 있는 유일한 사용자입니다. 시스템은 타이틀이 추가하지 않은 사용자에 대해 취한 작업을 타이틀에 알리지 않습니다. 결과적으로 타이틀은 자체 사용자 목록을 유지해야 합니다. 계정 선택기는 두 가지 다른 방법으로 표시될 수 있습니다. 시스템 가이드에서와 XUserAddAsync를 통해서입니다. 이 선택기는 이 두 가지 상황에서 다르게 동작합니다.타이틀에 로그인된 사용자 집합은 항상 시스템에 로그인된 사용자의 하위 집합입니다.
타이틀은 시스템에 로그인되지 않은 사용자를 로그인시킬 수 없습니다.
그러나 시스템은 타이틀이 모르는 사용자를 가질 수 있습니다.
입력 장치 연결
Microsoft Game Development Kit(GDK)에서는 사용자에게 임의의 수의 입력 장치가 연결될 수 있습니다. 이는 사용자와 장치 간에 1:1 매핑을 가정할 수 있는 오래된 타이틀을 이식할 때 어려울 수 있습니다. 장치 연결은 일반적으로 계정 선택기를 통해 이루어집니다. UI에서 사용자를 선택하는 입력 장치가 그 사용자와 연결됩니다. 연결은 사용자가 로그아웃될 때 또는 XUserAddAsync가 AddDefaultUserSilently 및 AddDefaultUserAllowingUI 옵션을 통해 UI 없이 사용될 때와 같은 다른 경우에서도 변경될 수 있습니다. 계정 선택기는 선택기가 어떻게 표시되었는지에 따라 연결에 대해서도 다르게 동작합니다.
사용자가 계정 선택기 없이 AddDefaultUserSilently 또는
AddDefaultUserAllowingUI 옵션 중 하나를 활용하는 XUserAddAsync에 대한 호출에 의해
자동으로 타이틀에 로그인된 경우, 시스템이 가지고 있던 입력 장치 페어링이
타이틀에 전달됩니다.
사용자 장치 연결 변경을 통보받으려면
XUserRegisterForDeviceAssociationChanged 메서드를 사용하여
XUserDeviceAssociationChangedCallback 콜백을 등록할 수 있습니다.
또한 XUserFindForDevice를 호출하여 특정 장치에 대한 연결을 조회할 수도 있습니다.
타이틀은 XUserAddAsync로 추가된 사용자에 대해서만 알 수 있으므로,
사용자 장치 연결 콜백과 메서드는 타이틀이 이전에 추가한 사용자만 반환할 수 있습니다.
사용자를 기본 오디오 엔드포인트에 매칭
헤드셋이나 마이크는 게임과 함께 자주 제공됩니다. 다음은 몇 가지 중요한 질문입니다.- 사용자에게 헤드셋이 있는가? 있다면 어떤 헤드셋을 사용하고 있을 가능성이 있는가? 기본 통신 렌더링 오디오 엔드포인트는 무엇인가?
- 사용자에게 연결된 마이크가 있는가? 기본 통신 캡처 엔드포인트는 무엇인가?
