Birden fazla gamepad'i yönetme
Doğrulama ortamı
- Windows
-
- Pencereler 11
- Birlik Editörü
-
- 2020.3.25f1
- Giriş Sistemi Paketi
-
- 1.2.0
Bu ipucu için önkoşullar
Aşağıdaki ayarlar, bu ipucunun açıklaması için bir öncül olarak önceden yapılmıştır.
İlk başta
Birden fazla gamepad hakkında bilgi almak Gamepad.all
için elde edilerek elde edilebilir.
ReadOnlyArray
foreach
'de tanımlandığı için .
Bu ipucunda, her gamepad'in bilgilerini metin içinde görüntülemek istiyorum.
Gamepad
Sınıf kullanıldığından, Windows'ta çalışırken, yalnızca "Xinput" kullanabilen denetleyiciler uygundur.
Ayrıca, gamepad'lerin temel kullanımı için lütfen aşağıdaki sayfaya bakın.
Birden fazla gamepad hakkında bilgi edinin
Gamepad bilgilerini görüntülemek için bir metin nesnesi düzenleyin. Bu sefer en fazla 4 gamepad görüntüleyebilirsiniz.
Bir komut dosyası oluşturun. Adı keyfi, ama şimdilik GamepadAll
olarak bırakacağız .
Komut dosyası şöyle görünür: Bu kez, amaç gamepad'leri listelemektir, bu nedenle her bir bilgiyi edinme hakkında bilgi için "Bir gamepad ile çalışma (giriş sistemi paketi sürümü)" bölümüne bakın.
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
Bağlı tüm gamepad'leri .
ReadOnlyArray
for
foreach
'de tanımlandığı için, .
Komut dosyasını kaydettikten sonra EventSystem
konumuna ekleyin.
TextObjects
bir dizi olarak tanımlanır, böylece birden çok metin nesnesi ayarlayabilirsiniz.
Oyunu çalıştırmayı ve gamepad'i kontrol etmeyi deneyin. Bağlı birden fazla gamepad'iniz varsa, istediğiniz kadar bilgi görürsünüz.