Gestisci più gamepad
Ambiente di verifica
- Finestre
-
- Windows 11
- Unity Editor
-
- 2020.3.25F1
- Pacchetto del sistema di input
-
- 1.2.0
Prerequisiti per questo suggerimento
Le seguenti impostazioni sono state effettuate in anticipo come premessa per la descrizione di questo suggerimento.
Dapprima
Per ottenere Gamepad.all
informazioni su più gamepad può essere ottenuto ottenendo .
ReadOnlyArray
foreach
Poiché è definito in .
In questo suggerimento, vorrei visualizzare le informazioni di ciascun gamepad nel testo.
Gamepad
Poiché la classe viene utilizzata, quando viene eseguita su Windows, solo i controller che possono utilizzare "Xinput" sono idonei.
Inoltre, fare riferimento alla seguente pagina per la gestione di base dei gamepad.
Ottieni informazioni su più gamepad
Disporre un oggetto di testo per visualizzare le informazioni del gamepad. Questa volta, puoi visualizzare fino a 4 gamepad.
Creare uno script. Il nome è arbitrario, ma per ora GamepadAll
lo lasceremo come .
Lo script è simile al seguente: Questa volta, lo scopo è quello di elencare i gamepad, quindi vedere "Funzionamento con un gamepad (versione del pacchetto del sistema di input)" per informazioni su come ottenere ciascuna informazione.
using System.Text;
using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.UI;
public class GamepadAll : MonoBehaviour
{
<summary>情報を表示させるテキストオブジェクト一覧。</summary>
[SerializeField] private Text[] TextObjects;
StringBuilder Builder = new StringBuilder();
StringBuilder BuilderButton = new StringBuilder();
// 更新はフレームごとに1回呼び出されます
void Update()
{
if (TextObjects == null)
{
Debug.Log($"{nameof(TextObjects)} が null です。");
return;
}
// Gamepad.all で接続されているすべてのゲームパッドを列挙できる
// TextObjects の数以上の情報は載せられないので、少ない方の数で for する
for (int i = 0; i < Gamepad.all.Count || i < TextObjects.Length; i++)
{
var gamepad = Gamepad.all[i];
var textObject = TextObjects[i];
Builder.Clear();
BuilderButton.Clear();
Builder.AppendLine($"deviceId:{gamepad.deviceId}");
Builder.AppendLine($"name:{gamepad.name}");
// 操作されたボタンなどの情報を取得
var leftStickValue = gamepad.leftStick.ReadValue();
var rightStickValue = gamepad.rightStick.ReadValue();
var dpadValue = gamepad.dpad.ReadValue();
if (leftStickValue.magnitude > 0f) Builder.AppendLine($"LeftStick:{leftStickValue.normalized * leftStickValue.magnitude}");
if (rightStickValue.magnitude > 0f) Builder.AppendLine($"RightStick:{rightStickValue.normalized * rightStickValue.magnitude}");
if (dpadValue.magnitude > 0f) Builder.AppendLine($"Dpad:{dpadValue.normalized * dpadValue.magnitude}");
if (gamepad.aButton.isPressed) BuilderButton.Append($"A ");
if (gamepad.bButton.isPressed) BuilderButton.Append($"B ");
if (gamepad.xButton.isPressed) BuilderButton.Append($"X ");
if (gamepad.yButton.isPressed) BuilderButton.Append($"Y ");
if (gamepad.startButton.isPressed) BuilderButton.Append($"Start ");
if (gamepad.selectButton.isPressed) BuilderButton.Append($"Select ");
if (gamepad.leftStickButton.isPressed) BuilderButton.Append($"LeftStickButton ");
if (gamepad.rightStickButton.isPressed) BuilderButton.Append($"RightStickButton ");
if (gamepad.leftShoulder.isPressed) BuilderButton.Append($"LeftShoulder ");
if (gamepad.rightShoulder.isPressed) BuilderButton.Append($"RightShoulder ");
if (BuilderButton.Length >= 1) Builder.AppendLine(BuilderButton.ToString());
var leftTriggerValue = gamepad.leftTrigger.ReadValue();
var rightTriggerValue = gamepad.rightTrigger.ReadValue();
if (leftTriggerValue > 0 || rightTriggerValue > 0)
{
Builder.AppendLine($"Trigger:({leftTriggerValue:f2}, {rightTriggerValue:f2})");
}
// 取得した情報を表示
textObject.text = Builder.ToString();
}
}
}
Gamepad.all
È possibile enumerare tutti i gamepad connessi in formato .
ReadOnlyArray
for
foreach
Poiché è definito in , può essere enumerato da .
Dopo EventSystem
aver salvato lo script, allegarlo a .
TextObjects
è definito come una matrice, quindi è possibile impostare più oggetti di testo.
Prova a eseguire il gioco e controllare il gamepad. Se hai più gamepad collegati, vedrai tutte le informazioni che desideri.