Dati di registro per controller di gioco

Nota

Questo argomento è destinato ai produttori di controller di gioco compatibili con Windows 10 e non si applica alla maggior parte degli sviluppatori.

Lo spazio dei nomi Windows.Gaming.Input consente ai fornitori di hardware indipendenti (IHV) di aggiungere dati al Registro di sistema del PC, consentendo la visualizzazione dei propri dispositivi come Gamepads, RacingWheels, ArcadeSticks, FlightSticks e UINavigationControllers in base alle esigenze. Tutti gli IHV devono aggiungere questi dati per i loro controller compatibili. In questo modo, tutti i giochi UWP (e tutti i giochi desktop che utilizzano l'API WinRT) saranno in grado di supportare il controller di gioco.

Schema di mapping

I mapping per un dispositivo con ID fornitore (VID) VVVV, ID prodotto (PID) PPPP, pagina di utilizzo UUUU e ID utilizzo XXXX, verranno letti da questa posizione nel Registro di sistema:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\VVVVPPPPUUUUXXXX

La tabella seguente illustra i valori previsti nella posizione radice del dispositivo:

Nome Tipo Obbligatorio? Info
Disabilitato DWORD No

Indica che questo particolare dispositivo deve essere disabilitato.

  • 0: Il dispositivo non è disabilitato.
  • 1: Il dispositivo è disabilitato.
Descrizione REG_SZNo Breve descrizione del dispositivo.

Il programma di installazione del dispositivo deve aggiungere questi dati al Registro di sistema (tramite il programma di installazione o un file INF).

Le sottochiavi nella posizione radice del dispositivo sono descritte in dettaglio nelle sezioni seguenti.

Gamepad

La tabella seguente elenca le sottochiavi necessarie e opzionali nella sottochiave Gamepad:

Sottochiave Obbligatorio? Info
Menu Vedere Mapping dei pulsanti
Visualizza
A
B
X
Y
LeftShoulder
RightShoulder
LeftThumbstickButton
RightThumbstickButton
DPadUp
DPadDown
DPadLeft
DPadRight
Paddle1 No
Paddle2 No
Paddle3 No
Paddle4 No
LeftTrigger Vedere Mapping degli assi
RightTrigger
LeftThumbstickX
LeftThumbstickY
RightThumbstickX
RightThumbstickY

Nota

Se si aggiunge un controller di gioco come Gamepad supportato, consigliamo vivamente di aggiungerlo anche come UINavigationController supportato.

RacingWheel

La tabella seguente elenca le sottochiavi necessarie e opzionali nella sottochiave RacingWheel:

Sottochiave Obbligatorio? Info
PreviousGear Vedere Mapping dei pulsanti
NextGear
DPadUp No
DPadDown No
DPadLeft No
DPadRight No
Button1 No
Button2 No
Button3 No
Button4 No
Button5 No
Button6 No
Button7 No
Button8 No
Button9 No
Button10 No
Button11 No
Button12 No
Button13 No
Button14 No
Button15 No
Button16 No
FirstGear No
SecondGear No
ThirdGear No
FourthGear No
FifthGear No
SixthGear No
SeventhGear No
ReverseGear No
Volante Vedere Mapping degli assi
Acceleratore
Freno
Frizione No
Freno a mano No
MaxWheelAngle Vedere Mapping delle proprietà

ArcadeStick

La tabella seguente elenca le sottochiavi necessarie e opzionali nella sottochiave ArcadeStick:

Sottochiave Obbligatorio? Info
Action1 Vedere Mapping dei pulsanti
Action2
Action3
Action4
Action5
Action6
Special1
Special2
StickUp
StickDown
StickLeft
StickRight

FlightStick

La tabella seguente elenca le sottochiavi necessarie e opzionali nella sottochiave FlightStick:

Sottochiave Obbligatorio? Info
FirePrimary Vedere Mapping dei pulsanti
FireSecondary
Rollio Vedere Mapping degli assi
Beccheggio
Imbardata
Acceleratore
HatSwitch Vedere Mapping dei commutatori

UINavigation

La tabella seguente elenca le sottochiavi necessarie e opzionali nella sottochiave UINavigation:

Sottochiave Obbligatorio? Info
Menu Vedere Mapping dei pulsanti
Visualizza
Accetta
Annulla
PrimaryUp
PrimaryDown
PrimaryLeft
PrimaryRight
Context1 No
Context2 No
Context3 No
Context4 No
PageUp No
PageDown No
PageLeft No
PageRight No
ScrollUp No
ScrollDown No
ScrollLeft No
ScrollRight No
SecondaryUp No
SecondaryDown No
SecondaryLeft No
SecondaryRight No

Per maggiori informazioni sui controller di navigazione dell'interfaccia utente e sui comandi precedenti, vedere Controller di navigazione dell'interfaccia utente.

Chiavi

Le seguenti sezioni illustrano il contenuto di ciascuna delle sottochiavi sotto i tasti Gamepad, RacingWheel, ArcadeStick, FlightStick e UINavigation.

Mapping dei pulsanti

La tabella seguente elenca i valori necessari per eseguire il mapping di un pulsante: Ad esempio, se si preme DPadUp sul controller di gioco, il mapping per DPadUp deve contenere il valore ButtonIndex (Source è Button). Se DPadUp deve essere mappato da una posizione di commutatore, il mapping DPadUp deve contenere i valori SwitchIndex e SwitchPosition (Source è Switch).

Origine Nome valore Tipo valore Obbligatorio? Info valore
Pulsante ButtonIndex DWORD Indice nella matrice dei pulsanti RawGameController.
Asse AxisIndex DWORD Indice nella matrice degli assi RawGameController
Invert DWORD No Indica che il valore dell'asse deve essere invertito prima dell'applicazione dei fattori Threshold Percent e DebouncePercent.
ThresholdPercent DWORD Indica la posizione dell'asse in corrispondenza della quale il valore del pulsante mappato passa tra gli stati premuto e rilasciato. L'intervallo valido di valori è compreso tra 0 e 100. Il pulsante viene considerato premuto se il valore dell'asse è maggiore o uguale a questo valore.
DebouncePercent DWORD

Definisce le dimensioni di una finestra intorno al valore ThresholdPercent, che viene utilizzato per il debounce dello stato segnalato del pulsante. L'intervallo valido di valori è compreso tra 0 e 100. Le transizioni di stato del pulsante possono verificarsi solo quando il valore dell'asse supera i limiti superiori o inferiori della finestra di debounce. Ad esempio, un valore ThresholdPercent di 50 e DebouncePercent di 10 comporta limiti di debounce al 45% e al 55% dei valori dell'intero intervallo dell'asse. Il pulsante non può passare allo stato premuto finché il valore dell'asse non raggiunge almeno il 55% e non può tornare allo stato rilasciato fino a quando il valore dell'asse non raggiunge almeno il 45%.

I limiti calcolati della finestra di debounce sono bloccati tra 0% e 100%. Ad esempio, una soglia del 5% e una finestra di debounce del 20% comportano una caduta dei limiti della finestra di debounce pari allo 0% e al 15%. Lo stato del pulsante per valori di asse dello 0% e del 100% viene sempre segnalato rispettivamente come rilasciato e premuto, indipendentemente dai valori di soglia e debounce.

Commutatore SwitchIndex DWORD Indice nella matrice dei commutatori RawGameController.
SwitchPosition REG_SZ

Indica la posizione del commutatore che farà sì che il pulsante mappato segnali che è stato premuto. I valori di posizione possono essere una delle seguenti stringhe:

  • Su
  • In alto a destra
  • Destra
  • In basso a destra
  • Giù
  • In basso a sinistra
  • Sinistra
  • In alto a sinistra
IncludeAdjacent DWORD No Indica che anche le posizioni del commutatore adiacenti faranno sì che il pulsante mappato segnali che è stato premuto.

Mapping degli assi

La tabella seguente elenca i valori necessari per eseguire il mapping di un asse:

Origine Nome valore Tipo valore Obbligatorio? Info valore
Pulsante MaxValueButtonIndex DWORD

Indice nella matrice dei pulsanti RawGameController che viene convertito nel valore dell'asse unidirezionale mappato.

MaxButton AxisValue
FALSE 0.0
TRUE 1.0
MinValueButtonIndex DWORD No

Indica che l'asse mappato è bidirezionale. I valori di MaxButton e MinButton vengono combinati in un singolo asse bidirezionale, come illustrato di seguito.

MinButton MaxButton AxisValue
FALSE FALSE 0.5
FALSE TRUE 1.0
TRUE FALSE 0.0
TRUE TRUE 0.5
Asse AxisIndex DWORD Indice nella matrice degli assi RawGameController
Invert DWORD No Indica che il valore dell'asse mappato deve essere invertito prima che venga restituito.
Commutatore SwitchIndex DWORD Indice nella matrice dei commutatori RawGameController.
MaxValueSwitchPosition REG_SZ

Una delle stringhe seguenti:

  • Su
  • In alto a destra
  • Destra
  • In basso a destra
  • Giù
  • In basso a sinistra
  • Sinistra
  • In alto a sinistra

Indica la posizione del commutatore che fa sì che il valore dell'asse mappato venga segnalato come 1.0. La direzione opposta di MaxValueSwitchPosition viene considerata come 0.0. Ad esempio, se MaxValueSwitchPosition è Su, la conversione del valore dell'asse è illustrata di seguito:

Posizione commutatore AxisValue
Su 1.0
Centro 0.5
Giù 0.0
IncludeAdjacent DWORD No

Indica che anche le posizioni del commutatore adiacenti faranno sì che l'asse mappato segnali 1.0. Nell'esempio precedente, se IncludeAdjacent è impostato, la conversione dell'asse viene eseguita come segue:

Posizione commutatore AxisValue
Su 1.0
In alto a destra 1.0
In alto a sinistra 1.0
Centro 0.5
Giù 0.0
In basso a destra 0.0
In basso a sinistra 0.0

Mapping dei commutatori

È possibile eseguire il mapping delle posizioni dei commutatori da una serie di pulsanti nella matrice dei pulsanti di RawGameController o da un indice nella matrice dei commutatori. Non è possibile eseguire il mapping delle posizioni dei commutatori dagli assi.

Origine Nome valore Tipo valore Info valore
Pulsante ButtonCount DWORD 2, 4 o 8
SwitchKind REG_SZ TwoWay, FourWay o EightWay
UpButtonIndex DWORD Vedere *Valori ButtonIndex
DownButtonIndex DWORD
LeftButtonIndex DWORD
RightButtonIndex DWORD
UpRightButtonIndex DWORD
DownRightButtonIndex DWORD
DownLeftButtonIndex DWORD
UpLeftButtonIndex DWORD
Asse SwitchKind REG_SZ TwoWay, FourWay o EightWay
XAxisIndex DWORD YAxisIndex è sempre presente. XAxisIndex è presente solo quando SwitchKind è FourWay o EightWay.
YAxisIndex DWORD
XDeadZonePercent DWORD Indicare le dimensioni della zona morta intorno alla posizione centrale degli assi.
YDeadZonePercent DWORD
XDebouncePercent DWORD Definire le dimensioni delle finestre intorno ai limiti superiore e inferiore della zona morta, che vengono utilizzate per il debounce dello stato segnalato del commutatore.
YDebouncePercent DWORD
XInvert DWORD Indicare che i valori dell'asse corrispondenti devono essere invertiti prima che vengano applicati i calcoli della zona morta e della finestra di debounce.
YInvert DWORD
Commutatore SwitchIndex DWORD Indice nella matrice dei commutatori RawGameController.
Invert DWORD Indica che il commutatore segnala le relative posizioni in un ordine in senso antiorario anziché nel senso orario predefinito.
PositionBias DWORD

Sposta il punto iniziale del modo in cui le posizioni vengono segnalate dall'importo specificato. PositionBias viene sempre conteggiato in senso orario dal punto iniziale originale e viene applicato prima che l'ordine dei valori venga invertito.

Ad esempio, un commutatore che segnala le posizioni a partire da DownRight in ordine antiorario può essere normalizzato impostando il flag Invert e specificando un PositionBias di 5:

Posizione Valore segnalato Dopo i flag PositionBias e Invert
In basso a destra 0 3
Destra 1 2
In alto a destra 2 1
Su 3 0
In alto a sinistra 4 7
Sinistra 5 6
In basso a sinistra 6 5
Giù 7 4

*Valori ButtonIndex

*I valori ButtonIndex vengono indicizzati nella matrice dei pulsanti RawGameController:

ButtonCount SwitchKind RequiredMappings
2 TwoWay
  • UpButtonIndex
  • DownButtonIndex
4 FourWay
  • UpButtonIndex
  • DownButtonIndex
  • LeftButtonIndex
  • RightButtonIndex
4 EightWay
  • UpButtonIndex
  • DownButtonIndex
  • LeftButtonIndex
  • RightButtonIndex
8 EightWay
  • UpButtonIndex
  • DownButtonIndex
  • LeftButtonIndex
  • RightButtonIndex
  • UpRightButtonIndex
  • DownRightButtonIndex
  • DownLeftButtonIndex
  • UpLeftButtonIndex

Mapping delle proprietà

Si tratta di valori di mapping statici per diversi tipi di mapping.

Mapping Nome valore Tipo valore Info valore
RacingWheel MaxWheelAngle DWORD Indica l'angolo fisico massimo supportato dal volante in una singola direzione. Ad esempio, un volante con una possibile rotazione da -90 gradi a 90 gradi specificherebbe 90.

Etichette

Le etichette devono essere presenti sotto la chiave Labels nella radice del dispositivo. Le etichette possono avere 3 sottochiavi: pulsanti, assi e commutatori.

Etichette dei pulsanti

La chiave Buttons esegue il mapping di ciascuna delle posizioni del pulsante nella matrice dei pulsanti di RawGameController in una stringa. Ogni stringa viene mappata internamente al valore di enumerazione GameControllerButtonLabel corrispondente. Ad esempio, se un gamepad ha dieci pulsanti e l'ordine in cui il RawGameController analizza i pulsanti e li presenta nel report pulsanti è simile al seguente:

Menu,               // Index 0
View,               // Index 1
LeftStickButton,    // Index 2
RightStickButton,   // Index 3
LetterA,            // Index 4
LetterB,            // Index 5
LetterX,            // Index 6
LetterY,            // Index 7
LeftBumper,         // Index 8
RightBumper         // Index 9

Le etichette dovrebbero essere visualizzate in questo ordine sotto la chiave Buttons:

Nome Valore (tipo: REG_SZ)
Button0 Menu
Button1 Visualizza
Button2 LeftStickButton
Button3 RightStickButton
Button4 LetterA
Button5 LetterB
Button6 LetterX
Button7 LetterY
Button8 LeftBumper
Button9 RightBumper

Etichette degli assi

La chiave Axes eseguirà il mapping di ciascuna delle posizioni dell'asse nella matrice degli assi di RawGameController in una delle etichette elencate in GameControllerButtonLabel Enum esattamente come le etichette dei pulsanti. Vedere l'esempio in Etichette dei pulsanti.

Etichette dei commutatori

La chiave Switches esegue il mapping delle posizioni dei commutatori nelle etichette. I valori seguono questa convenzione di denominazione: per etichettare una posizione di un commutatore, il cui indice è x nella matrice dei commutatori di RawGameController, aggiungere questi valori nella sottochiave Switches:

  • SwitchxUp
  • SwitchxUpRight
  • SwitchxRight
  • SwitchxDownRight
  • SwitchxDown
  • SwitchxDownLeft
  • SwitchxUpLeft
  • SwitchxLeft

La tabella seguente mostra un esempio di set di etichette per le posizioni di un commutatore a 4 vie che viene visualizzato in corrispondenza dell'indice 0 in RawGameController:

Nome Valore (tipo: REG_SZ)
Switch0Up XboxUp
Switch0Right XboxRight
Switch0Down XboxDown
Switch0Left XboxLeft

File di Registro di sistema di esempio

Per mostrare come tutti questi mapping e valori si uniscono, di seguito è riportato un file di Registro di sistema di esempio per un RacingWheel generico:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004]
"Description" = "Example Wheel Device"

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\Labels\Buttons]
"Button0" = "LetterA"
"Button1" = "LetterB"
"Button2" = "LetterX"
"Button3" = "LetterY"
"Button6" = "Menu"
"Button7" = "View"
"Button8" = "RightStickButton"
"Button9" = "LeftStickButton"

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\Labels\Switches]
"Switch0Down" = "Down"
"Switch0Left" = "Left"
"Switch0Right" = "Right"
"Switch0Up" = "Up"

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel]
"MaxWheelAngle" = dword:000001c2

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel\Brake]
"AxisIndex" = dword:00000002
"Invert" = dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel\Button1]
"ButtonIndex" = dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel\Button2]
"ButtonIndex" = dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel\Button3]
"ButtonIndex" = dword:00000002

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel\Button4]
"ButtonIndex" = dword:00000003

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel\Button5]
"ButtonIndex" = dword:00000009

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel\Button6]
"ButtonIndex" = dword:00000008

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel\Button7]
"ButtonIndex" = dword:00000007

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel\Button8]
"ButtonIndex" = dword:00000006

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel\Clutch]
"AxisIndex" = dword:00000003
"Invert" = dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel\DPadDown]
"IncludeAdjacent" = dword:00000001
"SwitchIndex" = dword:00000000
"SwitchPosition" = "Down"

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel\DPadLeft]
"IncludeAdjacent" = dword:00000001
"SwitchIndex" = dword:00000000
"SwitchPosition" = "Left"

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel\DPadRight]
"IncludeAdjacent" = dword:00000001
"SwitchIndex" = dword:00000000
"SwitchPosition" = "Right"

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel\DPadUp]
"IncludeAdjacent" = dword:00000001
"SwitchIndex" = dword:00000000
"SwitchPosition" = "Up"

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel\FifthGear]
"ButtonIndex" = dword:00000010

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel\FirstGear]
"ButtonIndex" = dword:0000000c

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel\FourthGear]
"ButtonIndex" = dword:0000000f

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel\NextGear]
"ButtonIndex" = dword:00000004

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel\PreviousGear]
"ButtonIndex" = dword:00000005

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel\ReverseGear]
"ButtonIndex" = dword:0000000b

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel\SecondGear]
"ButtonIndex" = dword:0000000d

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel\SixthGear]
"ButtonIndex" = dword:00000011

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel\ThirdGear]
"ButtonIndex" = dword:0000000e

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel\Throttle]
"AxisIndex" = dword:00000001
"Invert" = dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\GameInput\Devices\1234567800010004\RacingWheel\Wheel]
"AxisIndex" = dword:00000000
"Invert" = dword:00000000

Vedere anche