Urus berbilang pad permainan

Laman dikemaskini :
Tarikh penciptaan halaman :

Persekitaran pengesahan

Windows
  • Windows 11
Penyunting Perpaduan
  • 2020.3.25f1
Pakej Sistem Input
  • 1.2.0

Prasyarat untuk petua ini

Tetapan berikut telah dibuat terlebih dahulu sebagai premis untuk penerangan petua ini.

Pada mulanya

Untuk mendapatkan maklumat tentang berbilang pad permainan boleh dicapai dengan mendapatkan Gamepad.all . ReadOnlyArray Oleh kerana ia foreach ditakrifkan dalam .

Dalam petua ini, saya ingin memaparkan maklumat setiap pad permainan dalam teks. Gamepad Oleh kerana kelas digunakan, apabila berjalan di Windows, hanya pengawal yang boleh menggunakan "Xinput" yang layak.

Juga, sila rujuk halaman berikut untuk pengendalian asas gamepad.

Dapatkan maklumat tentang berbilang pad permainan

Susun objek teks untuk memaparkan maklumat pad permainan. Kali ini, anda boleh memaparkan sehingga 4 pad permainan.

Buat skrip. Nama itu sewenang-wenangnya, tetapi buat masa ini GamepadAll kita akan meninggalkannya sebagai .

Skrip kelihatan seperti ini: Kali ini, tujuannya adalah untuk menyenaraikan pad permainan, jadi lihat "Beroperasi dengan pad permainan (versi pakej sistem input)" untuk maklumat mengenai mendapatkan setiap maklumat.

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 boleh menghitung semua pad permainan yang disambungkan dalam . ReadOnlyArray Oleh kerana ia ditakrifkan dalam , ia for foreach boleh dihitung oleh .

Selepas EventSystem anda menyimpan skrip, lampirkannya kepada . TextObjects ditakrifkan sebagai tatasusunan, jadi anda boleh mengesetkan berbilang objek teks.

Cuba jalankan permainan dan kawal pad permainan. Jika anda mempunyai berbilang pad permainan yang disambungkan, anda akan melihat seberapa banyak maklumat yang anda mahu.