एकाधिक गेमपैड प्रबंधित करें
सत्यापन वातावरण
- विंडोज़
-
- विंडोज 11
- एकता संपादक
-
- 2020.3.25f1
- इनपुट सिस्टम पैकेज
-
- 1.2.0
इस टिप के लिए आवश्यक शर्तें
इस टिप के विवरण के लिए एक आधार के रूप में निम्नलिखित सेटिंग्स पहले से बनाई गई हैं।
पहले
कई गेमपैड के बारे में जानकारी प्राप्त करने के लिए प्राप्त Gamepad.all
किया जा सकता है।
ReadOnlyArray
चूंकि इसे foreach
इसमें परिभाषित किया गया है।
इस टिप में, मैं पाठ में प्रत्येक गेमपैड की जानकारी प्रदर्शित करना चाहता हूं।
Gamepad
चूंकि कक्षा का उपयोग किया जाता है, जब विंडोज पर चल रहा है, केवल नियंत्रक जो "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
एक सरणी के रूप में परिभाषित किया गया है, इसलिए आप कई पाठ ऑब्जेक्ट सेट कर सकते हैं।
गेम चलाने और गेमपैड को नियंत्रित करने का प्रयास करें। यदि आपके पास कई गेमपैड जुड़े हुए हैं, तो आप जितनी चाहें उतनी जानकारी देखेंगे।