مدیریت چندین گیم پد

صفحه به روز شده :
تاریخ ایجاد صفحه :

محیط تایید

ویندوز
  • ویندوز 11
ویرایشگر یونیتی
  • دانلود: 2020.3.25f1
بسته سیستم ورودی
  • 1.2.0

پیشنیازهای این نکته

تنظیمات زیر از قبل به عنوان یک فرض برای توصیف این نکته ساخته شده است.

در ابتدا

برای به دست اوردن Gamepad.all اطلاعات در مورد gamepads متعدد را می توان با به دست اوردن به دست اورد. ReadOnlyArray از انجا که در ان foreach تعریف شده است.

در این نکته، من می خواهم اطلاعات هر گیم پد را در متن نمایش دهم. Gamepad از انجا که کلاس استفاده می شود، هنگام اجرا بر روی ویندوز، تنها کنترل کننده هایی که می توانند از "Xinput" استفاده کنند واجد شرایط هستند.

همچنین، لطفا به صفحه زیر برای دست زدن به پایه gamepads مراجعه کنید.

دریافت اطلاعات در مورد چند gamepads

ترتیب یک شیء متن برای نمایش اطلاعات گیم پد. این بار می توانید تا 4 گیم پد را نمایش دهید.

یک اسکریپت ایجاد کنید. این نام خودسرانه است، اما در حال حاضر GamepadAll ما ان را به عنوان .

فیلمنامه به این شکل است: این بار، هدف این است که لیست گیم پدها را فهرست کنید، بنابراین برای کسب اطلاعات در مورد به دست اوردن هر اطلاعات، "Operating with a 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 شما می توانید تمام گیم پد های متصل را در . ReadOnlyArray از انجا که در تعریف for foreach شده است، می توان ان را برشمرد.

بعد از EventSystem اینکه فیلمنامه را ذخیره کردید، ان را به ان وصل کنید. TextObjects به عنوان یک ارایه تعریف شده است، بنابراین شما می توانید چندین اشیاء متنی را تنظیم کنید.

سعی کنید بازی را اجرا کنید و گیم پد را کنترل کنید. اگر چندین گیم پد متصل داشته باشید، به همان اندازه که می خواهید اطلاعات را مشاهده خواهید کرد.