Quản lý nhiều gamepad

Trang Cập Nhật :
Ngày tạo trang :

Môi trường xác minh

Windows
  • cửa sổ 11
Biên tập viên Unity
  • 2020.3.25f1
Gói hệ thống đầu vào
  • 1.2.0

Điều kiện tiên quyết cho mẹo này

Các cài đặt sau đây đã được thực hiện trước làm tiền đề cho mô tả về mẹo này.

Lúc đầu

Để có được thông tin về nhiều gamepad có Gamepad.all thể đạt được bằng cách lấy . ReadOnlyArray Vì nó foreach được định nghĩa trong .

Trong mẹo này, tôi muốn hiển thị thông tin của từng gamepad dưới dạng văn bản. Gamepad Vì lớp được sử dụng, khi chạy trên Windows, chỉ những bộ điều khiển có thể sử dụng "Xinput" mới đủ điều kiện.

Ngoài ra, vui lòng tham khảo trang sau để biết cách xử lý cơ bản của gamepad.

Nhận thông tin về nhiều gamepad

Sắp xếp một đối tượng văn bản để hiển thị thông tin gamepad. Lần này, bạn có thể hiển thị tối đa 4 gamepad.

Tạo tập lệnh. Tên là tùy ý, nhưng bây giờ GamepadAll chúng tôi sẽ để nó là .

Kịch bản trông như thế này: Lần này, mục đích là để liệt kê gamepad, vì vậy hãy xem "Hoạt động với gamepad (phiên bản gói hệ thống đầu vào)" để biết thông tin về việc lấy từng thông tin.

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 Bạn có thể liệt kê tất cả các gamepad được kết nối trong . ReadOnlyArray Vì nó được định nghĩa trong , nó for foreach có thể được liệt kê bởi .

Sau khi EventSystem bạn lưu tập lệnh, hãy đính kèm tập lệnh vào . TextObjects được định nghĩa là một mảng, vì vậy bạn có thể đặt nhiều đối tượng văn bản.

Hãy thử chạy trò chơi và điều khiển gamepad. Nếu bạn có nhiều gamepad được kết nối, bạn sẽ thấy bao nhiêu thông tin tùy thích.