Administrer flere gamepads
Miljø til bekræftelse
- Windows
-
- Windows 11
- Enhedslistens redaktør
-
- 2020.3.25f1
- Input System Pakke
-
- 1.2.0
Forudsætninger for dette tip
Følgende indstillinger er foretaget på forhånd som en forudsætning for beskrivelsen af dette tip.
Først
For at få Gamepad.all
oplysninger om flere gamepads kan opnås ved at opnå .
ReadOnlyArray
Da det foreach
er defineret i .
I dette tip vil jeg gerne vise oplysningerne om hver gamepad i tekst.
Gamepad
Da klassen bruges, når den kører på Windows, er kun controllere, der kan bruge "Xinput", berettigede.
Se også den følgende side for den grundlæggende håndtering af gamepads.
Få oplysninger om flere gamepads
Arranger et tekstobjekt for at vise gamepad-oplysninger. Denne gang kan du vise op til 4 gamepads.
Opret et script. Navnet er vilkårligt, men for nu GamepadAll
vil vi lade det være som .
Scriptet ser sådan ud: Denne gang er formålet at liste gamepads, så se "Betjening med en gamepad (input system package version)" for information om at få hver information.
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
Du kan opregne alle tilsluttede gamepads i .
ReadOnlyArray
Da det er defineret i , kan det for
foreach
opregnes ved .
Når EventSystem
du har gemt scriptet, skal du vedhæfte det til .
TextObjects
er defineret som en matrix, så du kan angive flere tekstobjekter.
Prøv at køre spillet og styre gamepad. Hvis du har flere gamepads tilsluttet, vil du se så mange oplysninger, som du vil.