管理多個遊戲手柄
更新頁 :
頁面創建日期 :
驗證環境
- 窗戶
-
- 視窗 11
- 統一編輯器
-
- 2020.3.25f1
- 輸入系統包
-
- 1.2.0
此提示的先決條件
作為此提示描述的前提,已預先進行了以下設置。
起先
要獲取有關多個遊戲手柄的資訊,可以通過獲取 Gamepad.all
來實現。
ReadOnlyArray
由於它是 foreach
在 中定義的。
在此提示中,我想以文本形式顯示每個遊戲手柄的資訊。
Gamepad
由於使用了該類,因此在Windows上運行時,只有可以使用“Xinput”的控制器才有資格。
另外,有關遊戲手柄的基本處理,請參閱以下頁面。
獲取有關多個遊戲手柄的資訊
排列文字物件以顯示遊戲手柄資訊。 這一次,您最多可以顯示 4 個遊戲手柄。
創建腳本。 名稱是任意的,但現在 GamepadAll
我們將它保留為 .
文稿如下所示: 這次的目的是列出遊戲手柄,因此有關獲取每個信息的資訊,請參閱“使用遊戲手柄進行操作(輸入系統包版本)”。
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
您可以在 中枚舉所有連接的遊戲手柄。
ReadOnlyArray
由於它是for
foreach
在 中定義的,因此可以通過 枚舉。
儲存文稿後 EventSystem
,將其附加到 。
TextObjects
定義為陣列,因此您可以設置多個文字物件。
嘗試運行遊戲並控制遊戲手柄。 如果您連接了多個遊戲手柄,您將看到任意數量的資訊。