Gérer plusieurs manettes de jeu

Page mise à jour :
Date de création de la page :

Environnement de vérification

Windows
  • Fenêtres 11
Éditeur Unity
  • 2020.3.25f1
Package système d’entrée
  • 1.2.0

Conditions préalables à cette astuce

Les paramètres suivants ont été définis à l’avance comme prémisse pour la description de cette astuce.

Au début

Pour obtenir des informations sur plusieurs manettes de jeu, il est possible d’obtenir Gamepad.all . ReadOnlyArray Puisqu’il foreach est défini dans .

Dans cette astuce, je voudrais afficher les informations de chaque manette de jeu en texte. Gamepad Étant donné que la classe est utilisée, lors de l’exécution sous Windows, seuls les contrôleurs qui peuvent utiliser « Xinput » sont éligibles.

Veuillez également vous référer à la page suivante pour la manipulation de base des manettes de jeu.

Obtenir des informations sur plusieurs manettes de jeu

Organisez un objet texte pour afficher les informations de la manette de jeu. Cette fois, vous pouvez afficher jusqu’à 4 manettes de jeu.

Créez un script. Le nom est arbitraire, mais pour l’instant GamepadAll nous allons le laisser comme .

Le script ressemble à ceci : Cette fois, le but est de lister les manettes de jeu, donc voir « Fonctionnement avec une manette de jeu (version du package système d’entrée) » pour plus d’informations sur l’obtention de chaque information.

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 Vous pouvez énumérer toutes les manettes de jeu connectées dans . ReadOnlyArray Puisqu’il est défini dans , il for foreach peut être énuméré par .

Après EventSystem avoir enregistré le script, joignez-le à . TextObjects est défini comme un tableau, de sorte que vous pouvez définir plusieurs objets texte.

Essayez d’exécuter le jeu et de contrôler la manette de jeu. Si vous avez plusieurs manettes connectées, vous verrez autant d’informations que vous le souhaitez.