다음을 통해 공유


사용자 및 입력 장치

게임에서 특정한 사용자와 연결된 입력 장치가 무엇인지 알아야 합니다. 이는 다음 질문에 대답하는 데 중요합니다.

  • 누가 게임에서 동작을 했는가?

  • 누가 성과를 얻는가?

  • 누가 구매할 것인가?

이 항목에서는 이러한 연결을 처리하고 이러한 질문에 대답하는 데 도움이 되는 몇 가지 주요 개념에 대해 설명합니다.

Xbox One ERA 및 Microsoft GDK(게임 개발 키트)의 사용자 모델 차이점

Microsoft GDK(게임 개발 키트) 새 타이틀을 개발하든 Xbox One ERA에서 이전 타이틀을 포팅하든 Xbox One ERA의 사용자 모델에 익숙해지면 사용자 및 입력 장치 관리 구현에 혼동을 일으킬 수 있습니다.

  • 게임 저장 또는 업적이 필요한 경우와 같이 사용자가 필요한 타이틀은 기본 사용자를 설정해야 합니다. 이 기본 사용자는 타이틀 전용 구문으로 시스템에서 제공되지 않습니다.

  • 타이틀은 XUserAddAsync에 대한 호출을 통해서 추가된 사용자에 대한 정보만 알 수 있습니다. 이 타이틀은 해당 타이틀이 추가하지 않은 사용자에 대해 시스템에서 수행한 모든 작업의 알림을 받지 않습니다.

  • 이전에 타이틀 사용자와 연결된 장치가 타이틀이 인식할 수 없는 사용자에게 연결된 경우 해당 타이틀은 새 사용자 없이 장치 연결 이벤트에 대한 알림만 받습니다.

  • 타이틀 사용자와 연결되지 않은 장치가 XUserAddAsync로 추가되지 않은 다른 사용자에게 연결되는 경우 해당 타이틀은 연결 이벤트에 대한 알림을 받지 않습니다.

  • 계정 선택기는 가져온 방식에 따라 다르게 작동합니다.(System Guide vs XUserAddAsync)

참고 항목

UserManagement 샘플은 다양한 게임 상황에서 사용자 관리 및 입력 장치 페이링 동작을 다루고 있습니다. 사용자 및 입력 장치와 관련하여 XR 요구 사항 또한 처리합니다. 샘플에 대한 자세한 내용은 Microsoft 게임 개발 키트를 참조하세요.

특정한 사용자를 식별하는 방법

게임은 로컬 ID를 사용하여 입력 장치와 상호 작용합니다. 로컬 ID는 게임 세션 내에서 해당 사용자의 수명 동안 사용자와 함께 하는 식별자입니다. 로컬 ID는 게임이 생성하는 모든 프로세스에서 사용하거나 게임이 XLaunchNewGame을 호출하는 경우에 사용할 수 있습니다. 모든 게임 세션에서 사용자를 식별하는 일에 로컬 ID를 사용하지 마세요.

사용자에 대한 로컬 ID를 받으려면 XUserGetLocalId 기능을 사용합니다.

특정한 입력 장치를 식별하는 방법

게임 패드, 아케이드 스틱 및 휠 등의 게임 장치는 모두 APP_LOCAL_DEVICE_ID 구문으로 표현되는 고유한 장치 ID가 있습니다. 이 장치 ID는 게임을 여러 번 실행하거나 시스템을 여러 번 다시 시작해도 그대로 유지됩니다. 장치 ID는 동일한 시스템에서 실행되는 두 가지 다른 게임에서 서로 다릅니다.

콘솔에서 XInput을(를) 사용하는 경우 XInputGetDeviceId를 사용하여 해당 장치 ID를 얻을 수 있습니다.

GameInput을 사용하는 경우 IGameInputDevice::GetDeviceInfo에 대한 호출에서 반환된 GameInputDeviceInfo 개체의 deviceId 구성원으로부터 장치 ID를 얻을 수 있습니다.

사용자 모델

예를 들어 게임 저장이나 업적이 필요한 경우 타이틀이 사용자가 필요할 때 타이틀은 기본 사용자를 설정해야 할 완전한 책임이 있습니다. 여러 사용자가 로그인할 수 있도록 허용하는 경우에도 이 기본 사용자를 유지해야 합니다. 또한 타이틀은 필요에 따라 기본 사용자를 변경할 수 있도록 허용해야 합니다. 해당 방법에는 XUserAddAsync로 계정 선택기를 가져오는 스위치 사용자 프롬프트를 사용하는 것이 있습니다.

계정 선택기는 이전에 콘솔에 로그인했던 모든 사용자를 나열하고 새 계정에 로그인할 수 있는 새로 추가 버튼을 가지고 있으며 임시 게스트 사용자로 로그인할 수 있도록 허용하고 있습니다. 사용자의 실제 ID와 상관없이 해당하는 모든 사용자 계정을 선택할 수 있습니다. 시스템은 해당 방법에서 다른 사용자로 플레이하려고 선택하는 사용자를 지원합니다.

Microsoft GDK(게임 개발 키트) 타이틀은 시스템의 사용자에 대한 모든 정보를 가지고 있지 않습니다. 그 대신 XUserAddAsync에 대한 호출을 통해서만 사용자를 타이틀에 추가할 수 있습니다. 해당 방법으로 추가된 사용자만 타이틀이 상호작용할 수 있습니다. 시스템은 타이틀에서 추가하지 않은 사용자에 대해 수행된 작업 정보를 타이틀에 알리지 않습니다. 따라서 타이틀은 고유한 사용자 목록을 유지해야 합니다.

계정 선택기는 시스템 가이드 및 XUserAddAsync의 두 가지 방법 중에서 선택할 수 있습니다. 해당 선택기는 다음과 같은 두 가지 경우에 다르게 작동합니다.

사례 XUserAddAsync 계정 선택기 계정 선택기 지침
타이틀에 로그인하지 않은 사용자 선택 사용자는 시스템과 타이틀에 모두 로그인됩니다. 사용자는 시스템에만 로그인됩니다. 타이틀은 로그인에 대한 알림을 받지 않습니다.
타이틀에 이미 로그인되어 있는 사용자 선택 사용자가 이미 타이틀에 로그인되어 있으므로 더 이상 사용자 상태가 변경되지 않습니다. 사용자가 이미 타이틀에 로그인되어 있으므로 더 이상 사용자 상태가 변경되지 않습니다.

참고 항목

타이틀에 로그인되어 있는 사용자 집합은 항상 시스템에 로그인되어 있는 사용자의 하위 집합입니다. 시스템에 로그인되어 있지 않은 사용자는 타이틀에 로그인할 수 없습니다. 하지만 타이틀에서 알지 못하는 사용자가 시스템에 있을 수 있습니다.

사용자 이벤트는 XUserRegisterForChangeEvent에 등록된 XUserChangeEventCallback을 통해 처리될 수 있습니다. 이벤트는 XUserAddAsync를 사용하여 로그인되어 있는 사용자만 호출할 수 있습니다. 사용자가 시스템에서 로그아웃하는 경우 타이틀은 그에 따라 반응해야 하며 사용자를 타이틀에서 제거하거나 플레이어가 다시 로그인할 수 있도록 허용할 수 있습니다.

입력 장치 연결

Microsoft GDK(게임 개발 키트)를 사용하여 사용자는 원하는 수의 입력 장치를 연결할 수 있습니다. 사용자와 장치 간의 1:1 매핑을 가정할 수 있는 이전 타이틀을 복사하는 경우 해당 작업에 어려움이 있을 수 있습니다.

장치 연결은 일반적으로 계정 선택기를 통해 수행됩니다. UI에서 사용자를 선택하는 입력 장치는 해당 사용자와 연결됩니다. 사용자가 로그아웃되는 경우 또는 UI 없이 AddDefaultUserSilentlyAddDefaultUserAllowingUI 옵션을 통해 XUserAddAsync가 사용되는 경우 등 기타 사례에서 연결은 변경될 수 있습니다.

선택기를 가져오는 방법에 따라 계정 선택기는 연결에 대해서도 다르게 작동합니다.

사례 XUserAddAsync 계정 선택기 계정 선택기 지침
타이틀에 로그인하지 않은 사용자 선택 사용자가 타이틀에 로그인한 후에 해당 프롬프트를 완료한 장치가 사용자에게 연결됩니다. 사용자는 시스템에 로그인되며(아직 로그인하지 않은 경우) 해당 프롬프트를 완료한 장치가 해당 사용자와 연결됩니다. 타이틀은 이 사용자에 대한 정보를 알 수 없으므로 장치가 연결되지 않았다는 알림이 나타납니다.
타이틀에 이미 로그인되어 있는 사용자 선택 해당 프롬프트를 완료한 장치가 시스템 및 타이틀 사용자에게 연결됩니다. 해당 프롬프트를 완료한 장치가 시스템 및 타이틀 사용자에게 연결됩니다.

사용자가 계정 선택기를 사용하지 않고 AddDefaultUserSilently 또는 AddDefaultUserAllowingUI 옵션을 활용하는 XUserAddAsync를 호출하여 자동으로 로그인하는 경우 시스템에서 보유하는 입력 장치 쌍이 타이틀에 전달됩니다.

사용자 장치 연결 변경에 대한 알림을 받기 위해 XUserDeviceAssociationChangedCallback 콜백을 XUserRegisterForDeviceAssociationChanged 메서드에 등록할 수 있습니다. XUserFindForDevice를 호출하여 특정 장치에 대한 연결을 조회할 수도 있습니다.

참고 항목

타이틀은 XUserAddAsync를 사용하여 추가된 사용자에 대한 정보만 알 수 있으므로 사용자 장치 연결 콜백과 메서드는 타이틀에서 이전에 추가한 사용자만 반환할 수 있습니다.

사용자를 기본 오디오 끝점과 일치

게임과 함께 헤드셋 또는 마이크가 제공되는 경우가 많습니다. 다음은 몇 가지 중요한 질문입니다.

  • 사용자에게 헤드셋이 있나요? 그렇다면 어떤 헤드셋을 사용하고 있을 수 있나요? 기본 통신 렌더링 오디오 끝점은 무엇인가요?

  • 사용자가 마이크에 연결되어 있나요? 기본 통신 캡처링 끝점은 무엇인가요?

특정 사용자에 대한 이러한 질문에 대답하기 위해 게임은 XUserGetDefaultAudioEndpointUtf16을 호출할 수 있습니다. 사용자 장치 간 연결이 변경될 수 있듯이 특정한 사용자와 연결된 기본 오디오 끝점도 변경될 수 있습니다. 이러한 연결 변경 내용을 감지하려면 게임은 XUserRegisterForDefaultAudioEndpointUtf16Changed를 호출하고 그로 인한 콜백에 주의를 기울여야 합니다.