여러 게임 패드 관리
페이지 업데이트 :
페이지 생성 날짜 :
검증 환경
- 윈도우
-
- 윈도우 11
- Unity 에디터
-
- 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
는 배열로 정의되므로 여러 텍스트 객체를 설정할 수 있습니다.
게임을 실행하고 게임 패드를 제어해 보십시오. 여러 게임 패드가 연결되어 있으면 원하는만큼 많은 정보를 볼 수 있습니다.