正如标题所示,我将一个USB控制器连接到一个整体,可以完美地工作。我映射了要使用的特定键及其工作,没有麻烦。但是,当我构建游戏并运行它时,控制器不再起作用。我尝试在游戏的启动页面上编辑输入(可以在其中编辑图形等),我尝试通过双击在输入上分配一个按钮,无论我按什么按钮,它都不会读取控制器的输入。
我认为这不是我的控制器是错误的,因为我可以使用它来玩其他游戏。我尝试了FEZ,当我插入控制器并启动游戏时,游戏立即检测到它,并将其控件从键盘更改为控制器。它可以在Unity的编辑器上运行,但在最终版本中甚至无法检测到它。
我该如何解决?
答案 0 :(得分:0)
这里是一个简单的类,用于收集一些可用于调试输入的有趣数据,例如当前连接的操纵杆的名称,输入轴的值,并保留最近按下的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和构建的项目中)。这是运行在我的PC上的脚本的屏幕快照,该脚本用于拾取已连接的Xbox USB控制器,我对轴的移动以及我按下的键(在键盘和控制器上)。
如果引擎检测到您的USB控制器,则它至少应出现在正在输出的列表中。如果那没有发生,则可能表明Unity上存在错误或与您的特定USB控制器不兼容,在这种情况下,我建议您通过他们的论坛寻求更专业的帮助,或联系他们的支持。 / p>