Mengelola beberapa gamepad

Halaman Diperbarui :
Tanggal pembuatan halaman :

Lingkungan verifikasi

Windows
  • jendela 11
Editor Kesatuan
  • 25f1/3/2020
Paket Sistem Input
  • 1.2.0

Prasyarat untuk tip ini

Pengaturan berikut telah dibuat sebelumnya sebagai premis untuk deskripsi tip ini.

Pada awalnya

Untuk mendapatkan informasi tentang beberapa gamepad dapat dicapai dengan mendapatkan Gamepad.all . ReadOnlyArray Karena didefinisikan foreach dalam .

Dalam tip ini, saya ingin menampilkan informasi dari setiap gamepad dalam teks. Gamepad Karena kelas digunakan, ketika berjalan di Windows, hanya pengontrol yang dapat menggunakan "Xinput" yang memenuhi syarat.

Juga, silakan merujuk ke halaman berikut untuk penanganan dasar gamepad.

Dapatkan informasi tentang beberapa gamepad

Atur objek teks untuk menampilkan informasi gamepad. Kali ini, kamu bisa menampilkan hingga 4 gamepad.

Buat skrip. Namanya sewenang-wenang, tetapi untuk saat ini GamepadAll kami akan membiarkannya sebagai .

Skripnya terlihat seperti ini: Kali ini, tujuannya adalah untuk membuat daftar gamepad, jadi lihat "Beroperasi dengan gamepad (versi paket sistem input)" untuk informasi tentang mendapatkan setiap informasi.

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 Anda dapat menghitung semua gamepad yang terhubung di . ReadOnlyArray Karena didefinisikan for foreach dalam , dapat disebutkan dengan .

Setelah EventSystem Anda menyimpan skrip, lampirkan ke . TextObjects didefinisikan sebagai array, sehingga Anda dapat mengatur beberapa objek teks.

Coba jalankan game dan kendalikan gamepad. Jika Anda memiliki beberapa gamepad yang terhubung, Anda akan melihat informasi sebanyak yang Anda inginkan.