Verwalten Sie mehrere Gamepads

Diese Seite wurde aktualisiert :
Erstellungsdatum der Seite :

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.