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.
|
Descrizione | REG_SZ | No | 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 | Sì | Vedere Mapping dei pulsanti |
Visualizza | Sì | |
A | Sì | |
B | Sì | |
X | Sì | |
Y | Sì | |
LeftShoulder | Sì | |
RightShoulder | Sì | |
LeftThumbstickButton | Sì | |
RightThumbstickButton | Sì | |
DPadUp | Sì | |
DPadDown | Sì | |
DPadLeft | Sì | |
DPadRight | Sì | |
Paddle1 | No | |
Paddle2 | No | |
Paddle3 | No | |
Paddle4 | No | |
LeftTrigger | Sì | Vedere Mapping degli assi |
RightTrigger | Sì | |
LeftThumbstickX | Sì | |
LeftThumbstickY | Sì | |
RightThumbstickX | Sì | |
RightThumbstickY | Sì |
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 | Sì | Vedere Mapping dei pulsanti |
NextGear | Sì | |
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 | Sì | Vedere Mapping degli assi |
Acceleratore | Sì | |
Freno | Sì | |
Frizione | No | |
Freno a mano | No | |
MaxWheelAngle | Sì | Vedere Mapping delle proprietà |
ArcadeStick
La tabella seguente elenca le sottochiavi necessarie e opzionali nella sottochiave ArcadeStick:
Sottochiave | Obbligatorio? | Info |
---|---|---|
Action1 | Sì | Vedere Mapping dei pulsanti |
Action2 | Sì | |
Action3 | Sì | |
Action4 | Sì | |
Action5 | Sì | |
Action6 | Sì | |
Special1 | Sì | |
Special2 | Sì | |
StickUp | Sì | |
StickDown | Sì | |
StickLeft | Sì | |
StickRight | Sì |
FlightStick
La tabella seguente elenca le sottochiavi necessarie e opzionali nella sottochiave FlightStick:
Sottochiave | Obbligatorio? | Info |
---|---|---|
FirePrimary | Sì | Vedere Mapping dei pulsanti |
FireSecondary | Sì | |
Rollio | Sì | Vedere Mapping degli assi |
Beccheggio | Sì | |
Imbardata | Sì | |
Acceleratore | Sì | |
HatSwitch | Sì | Vedere Mapping dei commutatori |
UINavigation
La tabella seguente elenca le sottochiavi necessarie e opzionali nella sottochiave UINavigation:
Sottochiave | Obbligatorio? | Info |
---|---|---|
Menu | Sì | Vedere Mapping dei pulsanti |
Visualizza | Sì | |
Accetta | Sì | |
Annulla | Sì | |
PrimaryUp | Sì | |
PrimaryDown | Sì | |
PrimaryLeft | Sì | |
PrimaryRight | Sì | |
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 | Sì | Indice nella matrice dei pulsanti RawGameController. |
Asse | AxisIndex | DWORD | Sì | 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 | Sì | 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 | Sì |
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 | Sì | Indice nella matrice dei commutatori RawGameController. |
SwitchPosition | REG_SZ | Sì |
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:
|
|
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 | Sì |
Indice nella matrice dei pulsanti RawGameController che viene convertito nel valore dell'asse unidirezionale mappato.
|
|||||||||||||||
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.
|
||||||||||||||||
Asse | AxisIndex | DWORD | Sì | 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 | Sì | Indice nella matrice dei commutatori RawGameController. | |||||||||||||||
MaxValueSwitchPosition | REG_SZ | Sì |
Una delle stringhe seguenti:
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:
|
||||||||||||||||
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:
|
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:
|
*Valori ButtonIndex
*I valori ButtonIndex vengono indicizzati nella matrice dei pulsanti RawGameController:
ButtonCount | SwitchKind | RequiredMappings |
---|---|---|
2 | TwoWay |
|
4 | FourWay |
|
4 | EightWay |
|
8 | EightWay |
|
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
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per