Далее следует простой класс для сбора некоторых интересных данных, которые вы можете использовать для отладки ввода, таких как имя подключенных в данный момент джойстиков, значения осей ввода, и ведение журнала последних 10 нажатых клавиш. Все данные собираются методом Update()
и выводятся в верхний левый угол экрана с помощью OnGUI()
.
using System;
using System.Collections.Generic;
using UnityEngine;
public class RecordControllerInput : MonoBehaviour {
private string[] joystickNames;
private float xAxis, yAxis;
private List<string> lastPressedKeys = new List<string>();
void Update () {
joystickNames = Input.GetJoystickNames();
xAxis = Input.GetAxis("Horizontal");
yAxis = Input.GetAxis("Vertical");
foreach ( KeyCode curKey in Enum.GetValues(typeof(KeyCode)) )
{
if (Input.GetKeyDown(curKey))
{
lastPressedKeys.Add(curKey.ToString());
if (lastPressedKeys.Count > 10)
lastPressedKeys.RemoveAt(0);
}
}
}
private void OnGUI()
{
GUILayout.Label("Joysticks:");
foreach (var curName in joystickNames)
GUILayout.Label(string.Format(" {0}", curName));
GUILayout.Label(string.Format("Axes: ({0}, {1})", xAxis, yAxis));
GUILayout.Label("Last pressed keys:");
foreach (var curKeyName in lastPressedKeys)
GUILayout.Label(string.Format(" {0}", curKeyName));
}
}
Создайте пустую сцену, добавьте этот сценарий к любому объекту (это может быть основная камера, если хотите) и проверьте, соответствуют ли выходные данные вашим ожиданиям (как в Unity Editor, так и в вашем встроенном проекте). Вот снимок экрана со скриптом, работающим на моем компьютере и собирающим подключенный USB-контроллер Xbox, движения, которые я совершил по осям, и нажатой клавишей (как на клавиатуре, так и на контроллере).
Если ваш usb-контроллер обнаружен двигателем, он должен хотя бы появиться в выводимом списке. Если этого не произойдет, это может указывать на ошибку в Unity или какую-то несовместимость с вашим конкретным контроллером USB, и в этом случае я бы посоветовал вам обратиться за более специализированной помощью к их форумам или связаться с их поддержкой.