Gestionar diversos gamepads
Entorn de verificació
- Windows
-
- Finestres 11
- Editor d'unitat
-
- 25.3.2020
- Paquet del sistema d'entrada
-
- 1.2.0
Requisits previs per a aquest consell
La configuració següent s'ha fet amb antelació com a premissa per a la descripció d'aquest consell.
Al principi
Per obtenir Gamepad.all
informació sobre múltiples gamepads es pot aconseguir obtenint .
ReadOnlyArray
Ja que foreach
es defineix en .
En aquest consell, m'agradaria mostrar la informació de cada gamepad en text.
Gamepad
Com que la classe s'utilitza, quan s'executa a Windows, només els controladors que poden utilitzar "Xinput" són elegibles.
A més, consulteu la pàgina següent per al maneig bàsic dels gamepads.
Obtenir informació sobre diversos gamepads
Organitzeu un objecte de text per mostrar informació del gamepad. Aquesta vegada, podeu mostrar fins a 4 gamepads.
Creeu un script. El nom és arbitrari, però de moment GamepadAll
ho deixarem com .
El guió té aquest aspecte: Aquesta vegada, el propòsit és llistar gamepads, així que vegeu "Operar amb un gamepad (versió del paquet del sistema d'entrada)" per obtenir informació sobre com obtenir cada informació.
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
Podeu enumerar tots els gamepads connectats a .
ReadOnlyArray
Com que for
foreach
està definit en , es pot enumerar per .
Després EventSystem
de desar l'script, adjunteu-lo a .
TextObjects
es defineix com una matriu, de manera que podeu establir diversos objectes de text.
Proveu d'executar el joc i controlar el gamepad. Si tens diversos gamepads connectats, veuràs tanta informació com vulguis.