操纵杆控制器适用于编辑器,但不适用于构建游戏
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 控制器不兼容,在这种情况下,我建议您通过他们的论坛寻求更专业的帮助,或联系他们的支持。
【讨论】:
以上是关于操纵杆控制器适用于编辑器,但不适用于构建游戏的主要内容,如果未能解决你的问题,请参考以下文章
.htaccess 适用于 Apache 服务器,但不适用于 FTP 目录
.htaccess 适用于 Apache 服务器,但不适用于 FTP 目录