Verwalten Sie mehrere Gamepads
Verifizierungsumgebung
- Fenster
-
- Windows 11
- Unity-Editor
-
- 2020.3.25f1
- Eingabesystem-Paket
-
- 1.2.0
Voraussetzungen für diesen Tipp
Die folgenden Einstellungen wurden im Vorfeld als Prämisse für die Beschreibung dieses Tipps vorgenommen.
Zuerst
Um Informationen über mehrere Gamepads zu erhalten, erhalten Gamepad.all
Sie .
ReadOnlyArray
Da es foreach
in definiert ist.
In diesem Tipp möchte ich die Informationen der einzelnen Gamepads im Text anzeigen.
Gamepad
Da die Klasse verwendet wird, sind bei der Ausführung unter Windows nur Controller berechtigt, die "Xinput" verwenden können.
Bitte beachten Sie auch die folgende Seite für den grundlegenden Umgang mit Gamepads.
Informationen zu mehreren Gamepads abrufen
Ordnen Sie ein Textobjekt so an, dass Gamepad-Informationen angezeigt werden. Dieses Mal können Sie bis zu 4 Gamepads anzeigen.
Erstellen Sie ein Skript. Der Name ist willkürlich, aber vorerst GamepadAll
belassen wir es bei .
Das Skript sieht wie folgt aus: Dieses Mal geht es darum, Gamepads aufzulisten, also siehe "Arbeiten mit einem Gamepad (Version des Eingabesystempakets)" für Informationen zum Abrufen der einzelnen Informationen.
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
Sie können alle angeschlossenen Gamepads in aufzählen.
ReadOnlyArray
Da es in definiert ist, kann es for
foreach
durch aufgezählt werden.
Nachdem EventSystem
Sie das Skript gespeichert haben, fügen Sie es an .
TextObjects
ist als Array definiert, sodass Sie mehrere Textobjekte festlegen können.
Versuchen Sie, das Spiel auszuführen und das Gamepad zu steuern. Wenn Sie mehrere Gamepads angeschlossen haben, sehen Sie so viele Informationen, wie Sie möchten.