Unity3d 操纵杆控制器在编辑器上工作,但在构建的游戏上不工作

Unity3d 操纵杆控制器在编辑器上工作,但在构建的游戏上不工作,unity3d,controller,joystick,Unity3d,Controller,Joystick,正如标题所示,我已经将一个usb控制器连接到unity中,它工作得非常好。我映射了要使用的特定键及其工作方式,没有任何麻烦。然而,当我构建并运行游戏时,我的控制器不再工作。我试着在游戏的启动页面上编辑输入(在那里你可以编辑图形等),我试着通过双击按钮在输入上分配一个按钮,无论我按下哪个按钮,它都不会读取控制器的输入。 这不是我的控制器,我认为这是错误的,因为我可以用它玩其他游戏。我尝试了FEZ,当我插入控制器并开始游戏时,游戏立即检测到它,并将其控制从键盘切换到控制器。它在Unity的编辑器上

正如标题所示,我已经将一个usb控制器连接到unity中,它工作得非常好。我映射了要使用的特定键及其工作方式,没有任何麻烦。然而,当我构建并运行游戏时,我的控制器不再工作。我试着在游戏的启动页面上编辑输入(在那里你可以编辑图形等),我试着通过双击按钮在输入上分配一个按钮,无论我按下哪个按钮,它都不会读取控制器的输入。

这不是我的控制器,我认为这是错误的,因为我可以用它玩其他游戏。我尝试了FEZ,当我插入控制器并开始游戏时,游戏立即检测到它,并将其控制从键盘切换到控制器。它在Unity的编辑器上工作,但在最终构建时它甚至没有检测到它。


如何解决此问题?

下面是一个简单的类,用于收集一些有趣的数据,您可以使用这些数据来调试输入,例如当前连接的操纵手柄的名称、输入轴的值,并记录最近10次按下的键。所有数据都在
Update()
方法中收集,并使用
OnGUI()
绘制到屏幕的左上角

使用系统;
使用System.Collections.Generic;
使用UnityEngine;
公共类RecordControllerInput:单行为{
私人字符串[]小玩意儿;
私人浮动xAxis、yAxis;
private List lastPressedKeys=新列表();
无效更新(){
joystickNames=Input.GetJoystickNames();
xAxis=Input.GetAxis(“水平”);
yAxis=Input.GetAxis(“垂直”);
foreach(Enum.GetValues中的keycodecurkey(typeof(KeyCode)))
{
if(输入.GetKeyDown(curKey))
{
添加(curKey.ToString());
如果(上次按Keys.Count>10)
最后按的按键。移除(0);
}
}
}
私有void OnGUI()
{
标签(“操纵杆:”);
foreach(joystickNames中的变量curName)
Label(string.Format(“{0}”,curName));
Label(string.Format(“Axes:({0},{1})”,xAxis,yAxis);
GUILayout.Label(“上次按下的键:”);
foreach(最后按的键中的变量curKeyName)
Label(string.Format(“{0}”,curKeyName));
}
}
创建一个空场景,将此脚本添加到任何对象(如果需要,它可以是主摄影机),并验证输出是否符合您的期望(在Unity Editor和构建的项目中)。这是在我的电脑上运行的脚本的屏幕截图,它显示了我连接的Xbox USB控制器、我对轴所做的移动以及我按下的键(在我的键盘和控制器上)

如果引擎检测到您的usb控制器,则它至少应出现在正在输出的列表中。如果这种情况没有发生,它可能表明Unity上存在缺陷或与特定USB控制器不兼容,在这种情况下,我建议您通过他们的论坛寻求更专业的帮助,或联系他们的支持

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));
    }
}