Διαχείριση πολλών gamepads

Σελίδα ενημέρωση :
Ημερομηνία δημιουργίας σελίδας :

Περιβάλλον επαλήθευσης

παράθυρα
  • Παράθυρα 11
Επεξεργαστής ενότητας
  • 2020.3.25στ1
Πακέτο συστήματος εισόδου
  • 1.2.0

Προϋποθέσεις για αυτήν τη συμβουλή

Οι ακόλουθες ρυθμίσεις έχουν γίνει εκ των προτέρων ως προϋπόθεση για την περιγραφή αυτής της συμβουλής.

Αρχικά

Για να λάβετε Gamepad.all πληροφορίες σχετικά με πολλαπλά gamepads μπορεί να επιτευχθεί με την απόκτηση . ReadOnlyArray foreach Δεδομένου ότι ορίζεται στο .

Σε αυτήν την συμβουλή, θα ήθελα να εμφανίσω τις πληροφορίες κάθε gamepad σε κείμενο. Gamepad Δεδομένου ότι η κλάση χρησιμοποιείται, όταν εκτελείται σε Windows, μόνο οι ελεγκτές που μπορούν να χρησιμοποιήσουν το "Xinput" είναι κατάλληλοι.

Επίσης, ανατρέξτε στην ακόλουθη σελίδα για τον βασικό χειρισμό των gamepads.

Λήψη πληροφοριών σχετικά με πολλά gamepad

Τακτοποιήστε ένα αντικείμενο κειμένου ώστε να εμφανίζει πληροφορίες gamepad. Αυτή τη φορά, μπορείτε να εμφανίσετε έως και 4 gamepads.

Δημιουργήστε ένα σενάριο. Το όνομα είναι αυθαίρετο, αλλά προς το παρόν GamepadAll θα το αφήσουμε ως .

Το σενάριο μοιάζει με αυτό: Αυτή τη φορά, ο σκοπός είναι να παραθέσετε τα gamepads, οπότε ανατρέξτε στην ενότητα "Λειτουργία με gamepad (έκδοση πακέτου συστήματος εισόδου)" για πληροφορίες σχετικά με τη λήψη κάθε πληροφορίας.

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 Μπορείτε να απαριθμήσετε όλα τα συνδεδεμένα gamepads στο . ReadOnlyArray for foreach Δεδομένου ότι ορίζεται στο , μπορεί να απαριθμηθεί από το .

Αφού EventSystem αποθηκεύσετε τη δέσμη ενεργειών, επισυνάψτε την στο . TextObjects ορίζεται ως πίνακας, ώστε να μπορείτε να ορίσετε πολλά αντικείμενα κειμένου.

Δοκιμάστε να εκτελέσετε το παιχνίδι και να ελέγξετε το gamepad. Εάν έχετε συνδέσει πολλά gamepad, θα δείτε όσες πληροφορίες θέλετε.