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

正如标题所暗示的,我已经将一个 USB 控制器连接到一个运行良好的单元中。我映射了要使用的特定键,并且它的工作没有任何麻烦。然而,当我构建我的游戏并运行它时,我的控制器不再适用于它了。我尝试在游戏的启动页面上编辑输入(您可以在其中编辑图形等),我尝试通过双击在输入上分配一个按钮,无论我按下什么按钮,它都不会读取我的控制器的输入.

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

我该如何解决这个问题?

【问题讨论】:

    标签: unity3d controller joystick


    【解决方案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 控制器不兼容,在这种情况下,我建议您通过他们的论坛寻求更专业的帮助,或联系他们的支持。

    【讨论】:

      猜你喜欢
      • 2018-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-29
      • 1970-01-01
      • 2020-08-13
      相关资源
      最近更新 更多