Skip to main content
게임은 지정된 사용자와 연결된 입력 장치를 알아야 합니다. 이는 다음 질문에 답하는 데 핵심입니다.
  • 누가 게임에서 액션을 취했는가?
  • 누가 성취(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를 통해서입니다. 이 선택기는 이 두 가지 상황에서 다르게 동작합니다.
타이틀에 로그인된 사용자 집합은 항상 시스템에 로그인된 사용자의 하위 집합입니다. 타이틀은 시스템에 로그인되지 않은 사용자를 로그인시킬 수 없습니다. 그러나 시스템은 타이틀이 모르는 사용자를 가질 수 있습니다.
사용자 이벤트는 XUserRegisterForChangeEvent에 등록된 XUserChangeEventCallback을 통해 처리할 수 있습니다. 이벤트는 XUserAddAsync로 로그인된 사용자에 대해서만 호출됩니다. 사용자가 시스템에서 로그아웃하면 타이틀은 그에 따라 반응하고 타이틀에서 사용자를 제거하거나 플레이어가 다시 사용자를 로그인시키려고 시도하도록 허용해야 합니다.

입력 장치 연결

Microsoft Game Development Kit(GDK)에서는 사용자에게 임의의 수의 입력 장치가 연결될 수 있습니다. 이는 사용자와 장치 간에 1:1 매핑을 가정할 수 있는 오래된 타이틀을 이식할 때 어려울 수 있습니다. 장치 연결은 일반적으로 계정 선택기를 통해 이루어집니다. UI에서 사용자를 선택하는 입력 장치가 그 사용자와 연결됩니다. 연결은 사용자가 로그아웃될 때 또는 XUserAddAsyncAddDefaultUserSilentlyAddDefaultUserAllowingUI 옵션을 통해 UI 없이 사용될 때와 같은 다른 경우에서도 변경될 수 있습니다. 계정 선택기는 선택기가 어떻게 표시되었는지에 따라 연결에 대해서도 다르게 동작합니다. 사용자가 계정 선택기 없이 AddDefaultUserSilently 또는 AddDefaultUserAllowingUI 옵션 중 하나를 활용하는 XUserAddAsync에 대한 호출에 의해 자동으로 타이틀에 로그인된 경우, 시스템이 가지고 있던 입력 장치 페어링이 타이틀에 전달됩니다. 사용자 장치 연결 변경을 통보받으려면 XUserRegisterForDeviceAssociationChanged 메서드를 사용하여 XUserDeviceAssociationChangedCallback 콜백을 등록할 수 있습니다. 또한 XUserFindForDevice를 호출하여 특정 장치에 대한 연결을 조회할 수도 있습니다.
타이틀은 XUserAddAsync로 추가된 사용자에 대해서만 알 수 있으므로, 사용자 장치 연결 콜백과 메서드는 타이틀이 이전에 추가한 사용자만 반환할 수 있습니다.

사용자를 기본 오디오 엔드포인트에 매칭

헤드셋이나 마이크는 게임과 함께 자주 제공됩니다. 다음은 몇 가지 중요한 질문입니다.
  • 사용자에게 헤드셋이 있는가? 있다면 어떤 헤드셋을 사용하고 있을 가능성이 있는가? 기본 통신 렌더링 오디오 엔드포인트는 무엇인가?
  • 사용자에게 연결된 마이크가 있는가? 기본 통신 캡처 엔드포인트는 무엇인가?
특정 사용자에 대해 이러한 질문에 답하기 위해 게임은 XUserGetDefaultAudioEndpointUtf16을 호출할 수 있습니다. 사용자-장치 연결이 변경될 수 있는 것처럼, 특정 사용자와 연결된 기본 오디오 엔드포인트도 변경될 수 있습니다. 이러한 연결 변경을 감지하려면 게임은 XUserRegisterForDefaultAudioEndpointUtf16Changed를 호출하고 결과 콜백에 주의를 기울여야 합니다.
마지막 수정일 2026년 8월 24일