Gestionați mai multe gamepad-uri
Mediul de verificare
- Windows
-
- Ferestre 11
- Unity Editor
-
- 2020.3.25F1
- Pachet sistem de intrare
-
- 1.2.0
Cerințe preliminare pentru acest sfat
Următoarele setări au fost făcute în avans ca premisă pentru descrierea acestui sfat.
La început
Pentru a obține Gamepad.all
informații despre mai multe gamepad-uri se poate realiza prin obținerea .
ReadOnlyArray
foreach
Deoarece este definit în .
În acest sfat, aș dori să afișez informațiile fiecărui gamepad în text.
Gamepad
Deoarece clasa este utilizată, atunci când rulează pe Windows, sunt eligibile numai controlerele care pot utiliza "Xinput".
De asemenea, vă rugăm să consultați următoarea pagină pentru manipularea de bază a gamepad-urilor.
Obțineți informații despre mai multe gamepaduri
Aranjați un obiect text pentru a afișa informații despre gamepad. De data aceasta, puteți afișa până la 4 gamepad-uri.
Creați un script. Numele este arbitrar, dar deocamdată GamepadAll
îl vom lăsa ca .
Scenariul arată astfel: De data aceasta, scopul este de a lista gamepad-urile, așa că consultați "Operarea cu un gamepad (versiunea pachetului sistemului de intrare)" pentru informații despre obținerea fiecărei informații.
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
Puteți enumera toate gamepadurile conectate în .
ReadOnlyArray
for
foreach
Deoarece este definit în , poate fi enumerat prin .
După ce EventSystem
salvați scriptul, atașați-l la .
TextObjects
este definită ca o matrice, astfel încât să puteți seta mai multe obiecte text.
Încercați să rulați jocul și să controlați gamepad-ul. Dacă aveți mai multe gamepad-uri conectate, veți vedea câte informații doriți.