操纵杆控制器适用于编辑器,但不适用于构建游戏

Posted

技术标签:

【中文标题】操纵杆控制器适用于编辑器,但不适用于构建游戏【英文标题】:Joystick Controller works on Editor but not on Builded Game 【发布时间】:2018-09-18 01:55:42 【问题描述】:

正如标题所暗示的,我已经将一个 USB 控制器连接到一个运行良好的单元中。我映射了要使用的特定键,并且它的工作没有任何麻烦。然而,当我构建我的游戏并运行它时,我的控制器不再适用于它了。我尝试在游戏的启动页面上编辑输入(您可以在其中编辑图形等),我尝试通过双击在输入上分配一个按钮,无论我按下什么按钮,它都不会读取我的控制器的输入. 这不是我的控制器,我认为这是错误的,因为我可以使用它玩其他游戏。我尝试了 FEZ,当我插入控制器并开始游戏的那一刻,游戏立即检测到它并将其控制从键盘更改为控制器。它适用于 Unity 的编辑器,但在最终构建时它甚至没有检测到它。 我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

下面是一个简单的类,用于收集一些有趣的数据,您可能会使用这些数据来调试输入,例如当前连接的操纵杆的名称、输入轴的值,并记录最后 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 编辑器和您构建的项目中)。下面是在我的电脑上运行的脚本的屏幕截图,它显示了我连接的 Xbox USB 控制器、我对轴所做的移动以及我按下的键(在我的键盘和控制器上)。

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

【讨论】:

以上是关于操纵杆控制器适用于编辑器,但不适用于构建游戏的主要内容,如果未能解决你的问题,请参考以下文章

Knockout 验证不适用于 Kendo 文本编辑器

.htaccess 适用于 Apache 服务器,但不适用于 FTP 目录

.htaccess 适用于 Apache 服务器,但不适用于 FTP 目录

如何检测哪个操纵杆按下了按钮?

Vue如何将数组复制到本地进行编辑?为啥它适用于字符串而不适用于数组? [复制]

准备好的语句适用于 INSERT 但不适用于 SELECT