Quản lý nhiều gamepad
Môi trường xác minh
- Windows
-
- cửa sổ 11
- Biên tập viên Unity
-
- 2020.3.25f1
- Gói hệ thống đầu vào
-
- 1.2.0
Điều kiện tiên quyết cho mẹo này
Các cài đặt sau đây đã được thực hiện trước làm tiền đề cho mô tả về mẹo này.
Lúc đầu
Để có được thông tin về nhiều gamepad có Gamepad.all
thể đạt được bằng cách lấy .
ReadOnlyArray
Vì nó foreach
được định nghĩa trong .
Trong mẹo này, tôi muốn hiển thị thông tin của từng gamepad dưới dạng văn bản.
Gamepad
Vì lớp được sử dụng, khi chạy trên Windows, chỉ những bộ điều khiển có thể sử dụng "Xinput" mới đủ điều kiện.
Ngoài ra, vui lòng tham khảo trang sau để biết cách xử lý cơ bản của gamepad.
Nhận thông tin về nhiều gamepad
Sắp xếp một đối tượng văn bản để hiển thị thông tin gamepad. Lần này, bạn có thể hiển thị tối đa 4 gamepad.
Tạo tập lệnh. Tên là tùy ý, nhưng bây giờ GamepadAll
chúng tôi sẽ để nó là .
Kịch bản trông như thế này: Lần này, mục đích là để liệt kê gamepad, vì vậy hãy xem "Hoạt động với gamepad (phiên bản gói hệ thống đầu vào)" để biết thông tin về việc lấy từng thông tin.
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
Bạn có thể liệt kê tất cả các gamepad được kết nối trong .
ReadOnlyArray
Vì nó được định nghĩa trong , nó for
foreach
có thể được liệt kê bởi .
Sau khi EventSystem
bạn lưu tập lệnh, hãy đính kèm tập lệnh vào .
TextObjects
được định nghĩa là một mảng, vì vậy bạn có thể đặt nhiều đối tượng văn bản.
Hãy thử chạy trò chơi và điều khiển gamepad. Nếu bạn có nhiều gamepad được kết nối, bạn sẽ thấy bao nhiêu thông tin tùy thích.