Skip to main content
GameInput은 기본적으로 폴링 모델을 중심으로 설계되었지만, 애플리케이션에 비동기적으로 알리는 것이 더 적합한 경우도 있습니다. 이를 지원하기 위해 IGameInput 인터페이스는 특정 관심 이벤트가 발생할 때 호출되는 콜백 함수를 등록하기 위한 몇 가지 메서드를 제공합니다. 내부적으로 GameInput은 한 번에 하나의 콜백만 실행되도록 콜백 디스패치를 직렬화합니다. GameInput은 콜백이 시간순으로 디스패치됨을 보장합니다. 이러한 보장 덕분에 애플리케이션이 콜백 함수에서 작성해야 하는 코드가 단순해집니다. GameInput은 유형에 관계없이 언제든지 최대 64개의 콜백을 등록할 수 있게 합니다. 콜백은 GameInput의 내부 워커 스레드에서 디스패치됩니다. 이 동작 방식과 이 작업을 수동으로 예약하는 옵션에 대한 자세한 내용은 GameInput 작업 큐를 참조하세요.

장치 콜백

장치 콜백은 다음 구문과 같이 입력 장치의 상태가 변경될 때 애플리케이션이 이를 알 수 있는 방법을 제공합니다. 가장 일반적으로는 장치의 연결 및 연결 해제를 감지하는 데 사용되지만, 다른 상태 변경도 관심 대상이 될 수 있습니다.
장치 콜백은 여러 선택적 필터와 함께 등록할 수 있습니다. 여기에는 특정 종류의 입력을 생성하는 장치로 필터링하기, 특정 상태 변경으로 필터링하기, 특정 장치로 필터링하기 또는 이러한 필터의 임의 조합이 포함됩니다. 예를 들어, 애플리케이션은 장치가 시스템에서 연결 해제될 때 이를 알리도록 콜백을 설정할 수 있습니다. 장치 상태 변경 외에도, RegisterDeviceCallback 메서드는 장치 열거에 사용할 수 있습니다. enumerationKind 매개 변수는 GameInputEnumerationKind 열거형의 값을 취하며, 콜백 등록의 일부로 열거를 수행할지 여부와, 수행한다면 블로킹 방식으로 할지 비동기 방식으로 할지를 나타냅니다. 장치 열거를 이후의 상태 변경과 하나의 원자적 작업으로 결합하면 많은 애플리케이션이 입력 코드에서 의도치 않게 겪는 경합 상태를 피할 수 있습니다.

판독값 콜백

판독값 콜백을 사용하면 다음 구문과 같이 입력 스트림에 새 판독값이 도착할 때마다 애플리케이션에 알림을 받을 수 있습니다. 많은 애플리케이션에서는 입력을 폴링하는 것이 더 나을 수 있지만, 이벤트 기반 입력이 더 적합한 상황도 있습니다. 예를 들어 게임의 메인 메뉴 UI는 이벤트 기반 입력에 더 적합할 수 있습니다. 또 다른 예는 사용자에게 선택을 요청한 뒤 입력을 기다려야 하는 입력 매핑 UI입니다.
장치 콜백과 마찬가지로, 판독값 콜백도 여러 선택적 필터와 함께 등록할 수 있습니다. 애플리케이션이 입력 스트림에서 특정 판독값의 하위 집합에만 관심이 있을 수 있으므로 이는 판독값 콜백에 특히 유용합니다. RegisterReadingCallback 메서드는 특정 종류의 입력을 생성하는 장치로 필터링하거나 특정 장치의 입력으로 필터링할 수 있게 합니다. 또한 애플리케이션은 콜백이 발생하기 전에 최소한의 움직임이 필요한 아날로그 입력 값(예: 게임패드의 썸스틱)에 대한 필터를 지정할 수 있습니다. 이렇게 하면 고해상도 아날로그 상태 변경이 필요하지 않은 경우 콜백 빈도를 크게 줄일 수 있습니다. 좋은 예로는 사용자에게 선택을 요청한 뒤 입력 변경을 기다리는 입력 매핑 UI 구현이 있습니다.

콜백 등록 해제

콜백이 성공적으로 등록된 후에는, 애플리케이션이 콜백을 실행하는 데 필요한 모든 리소스가 유효한 상태로 유지되도록 보장해야 합니다. 여기에는 콜백 코드에서 사용하는 리소스뿐만 아니라 콜백 함수 자체도 포함됩니다. 예를 들어, 콜백 함수가 애플리케이션이 필요에 따라 로드하고 언로드하는 DLL에 호스팅되는 경우입니다. 이러한 리소스를 안전하게 회수하려면, 애플리케이션이 먼저 Register*Callback 메서드에서 받은 토큰을 UnregisterCallback 메서드에 전달하여 콜백을 등록 해제해야 합니다. 이 메서드를 호출할 때 콜백이 실행 중이면 콜백 실행이 완료될 때까지 블록됩니다. 그 결과, 콜백은 자신의 콜백 함수 내에서 자기 자신을 등록 해제할 수 없습니다. 콜백은 StopCallback 메서드를 호출하여 중지할 수도 있습니다. 이렇게 하면 콜백이 등록 해제되지는 않지만, 콜백이 다시 호출되지 않음이 보장됩니다. 콜백이 등록 해제되지 않기 때문에 이 메서드는 콜백 자체의 콜백 함수 내에서 안전하게 호출할 수 있습니다. 현재 콜백은 실행을 완료하지만 다시 호출되지 않습니다. 언제든지 콜백은 64개만 허용되므로 결국 콜백은 등록 해제해야 합니다.

참조 API 문서

함께 보기

GameInput 기본 사항 GameInput 고급 주제 입력 API 참조
마지막 수정일 2026년 8월 13일