จัดการ gamepad หลายตัว

ปรับปรุงหน้า :
วันที่สร้างเพจ :

สภาพแวดล้อมการตรวจสอบ

หน้าต่าง
  • หน้าต่าง 11
บรรณาธิการ Unity
  • ปี 2020.3.25f1
แพ็คเกจระบบอินพุต
  • 1.2.0

ข้อกําหนดเบื้องต้นสําหรับเคล็ดลับนี้

การตั้งค่าต่อไปนี้ได้ทําไว้ล่วงหน้าเพื่อเป็นหลักฐานสําหรับคําอธิบายของเคล็ดลับนี้

ทีแรก

Gamepad.allในการรับข้อมูลเกี่ยวกับ gamepads หลายสามารถทําได้โดยได้รับ . ReadOnlyArray foreachเนื่องจากมันถูกกําหนดไว้ใน .

ในเคล็ดลับนี้ฉันต้องการแสดงข้อมูลของแต่ละ gamepad เป็นข้อความ Gamepad เนื่องจากคลาสถูกใช้เมื่อทํางานบน Windows เฉพาะคอนโทรลเลอร์ที่สามารถใช้ "Xinput" เท่านั้นที่มีสิทธิ์

นอกจากนี้โปรดดูหน้าต่อไปนี้สําหรับการจัดการพื้นฐานของเกมแพด

รับข้อมูลเกี่ยวกับเกมแพดหลายแผ่น

จัดเรียงวัตถุข้อความเพื่อแสดงข้อมูลเกมแพด คราวนี้คุณสามารถแสดงเกมแพดได้สูงสุด 4 เกม

สร้างสคริปต์ ชื่อนี้เป็นไปตามอําเภอใจ แต่สําหรับตอนนี้ GamepadAll เราจะปล่อยให้เป็น .

สคริปต์มีลักษณะดังนี้: คราวนี้จุดประสงค์คือการแสดงรายการ gamepads ดังนั้นโปรดดู "การทํางานกับ 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 ถูกกําหนดให้เป็นอาร์เรย์ เพื่อให้คุณสามารถตั้งค่าวัตถุข้อความหลายรายการได้

ลองเล่นเกมและควบคุมเกมแพด หากคุณเชื่อมต่อ gamepads หลายตัวคุณจะเห็นข้อมูลได้มากเท่าที่คุณต้องการ