Upravljanje več igralnih ploščic

Stran posodobljena :
Datum ustvarjanja strani :

Okolje za preverjanje

Windows
  • Windows 11
Urejevalnik enotnosti
  • 2020.3.25f1
Paket vhodnega sistema
  • 1.2.0

Predpogoji za to konico

Naslednje nastavitve so bile vnaprej narejene kot predpostavka za opis tega namiga.

Sprva

Če želite pridobiti Gamepad.all informacije o več igralnih ploščicah, lahko dosežete z pridobivanjem . ReadOnlyArray Ker je foreach opredeljena v .

V tem namigu bi rad v besedilu prikazal informacije o vsaki igralni ploščici. Gamepad Ker se razred uporablja, so pri zagonu v sistemu Windows upravičeni le krmilniki, ki lahko uporabljajo »Xinput«.

Prav tako si oglejte naslednjo stran za osnovno ravnanje z igralnih ploščic.

Informacije o več igralnih ploščicah

Razporeditev besedilnega predmeta za prikaz informacij o igralni ploščici. Tokrat lahko prikažete do 4 igralne ploščice.

Ustvarite skript. Ime je samovoljno, za zdaj GamepadAll pa ga bomo pustili kot .

Scenarij izgleda takole: Tokrat je namen navesti igralne ploščice, zato glejte »Delovanje z igralno ploščico (različica paketa vhodnega sistema)« za informacije o pridobivanju vsake informacije.

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 Vse povezane igralne ploščice lahko nakažete v . ReadOnlyArray Ker je for foreach opredeljena v , jo lahko nakažemo z .

Ko skript EventSystem shranite, ga priložite na . TextObjects je določena kot matrika, tako da lahko nastavite več besedilnih predmetov.

Poskusite zagon igre in nadzor igralne ploščice. Če imate povezanih več igralnih ploščic, boste videli toliko informacij, kolikor želite.