Urus berbilang pad permainan
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.