مدیریت چندین گیم پد
محیط تایید
- ویندوز
-
- ویندوز 11
- ویرایشگر یونیتی
-
- دانلود: 2020.3.25f1
- بسته سیستم ورودی
-
- 1.2.0
پیشنیازهای این نکته
تنظیمات زیر از قبل به عنوان یک فرض برای توصیف این نکته ساخته شده است.
در ابتدا
برای به دست اوردن Gamepad.all
اطلاعات در مورد gamepads متعدد را می توان با به دست اوردن به دست اورد.
ReadOnlyArray
از انجا که در ان foreach
تعریف شده است.
در این نکته، من می خواهم اطلاعات هر گیم پد را در متن نمایش دهم.
Gamepad
از انجا که کلاس استفاده می شود، هنگام اجرا بر روی ویندوز، تنها کنترل کننده هایی که می توانند از "Xinput" استفاده کنند واجد شرایط هستند.
همچنین، لطفا به صفحه زیر برای دست زدن به پایه gamepads مراجعه کنید.
دریافت اطلاعات در مورد چند gamepads
ترتیب یک شیء متن برای نمایش اطلاعات گیم پد. این بار می توانید تا 4 گیم پد را نمایش دهید.
یک اسکریپت ایجاد کنید. این نام خودسرانه است، اما در حال حاضر GamepadAll
ما ان را به عنوان .
فیلمنامه به این شکل است: این بار، هدف این است که لیست گیم پدها را فهرست کنید، بنابراین برای کسب اطلاعات در مورد به دست اوردن هر اطلاعات، "Operating with a gamepad (نسخه بسته سیستم ورودی)" را ببینید.
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
به عنوان یک ارایه تعریف شده است، بنابراین شما می توانید چندین اشیاء متنی را تنظیم کنید.
سعی کنید بازی را اجرا کنید و گیم پد را کنترل کنید. اگر چندین گیم پد متصل داشته باشید، به همان اندازه که می خواهید اطلاعات را مشاهده خواهید کرد.