【问题标题】:How to integrate Hand Controlle HC1 in my car simulator game如何在我的汽车模拟器游戏中集成 Hand Controller HC1
【发布时间】:2022-11-28 09:35:41
【问题描述】:

我正在使用 Unity 构建汽车模拟器游戏。对于输入,我使用 Logitheck 方向盘 G29。现在我需要使用 Hand Controller 来加速或刹车。 这是我的手控器 手控器 HC1 Link

现在我可以检查他的输入了吗?我的 Windows 10 系统可以识别此设备,但如果我尝试使用此设备启动游戏,我无法加速或破坏汽车。

我在我的 Unity InputController 中配置了这个:

在我的 IRDSPlayerControls.cs 文件中,我编写了以下代码行:

if (Input.anyKey)
        {
            foreach (KeyCode kcode in Enum.GetValues(typeof(KeyCode)))
            {
                Debug.Log("Joystick pressed " + kcode);
            }
        }
        Debug.Log("Input debug acc: " + Input.GetAxis("Vertical3"));
        Debug.Log("Input debug frenata: " + Input.GetAxis("Vertical4"));

在 Unity 的控制台中,我可以显示这个:

Input debug acc: -1
Input debug frenata: -1

【问题讨论】:

  • 它可以与其他游戏一起使用吗?
  • 我知道“Forza Horizo​​n 5”游戏是否支持此设备

标签: unity3d


【解决方案1】:

您可以检测特定操纵杆上的特定按钮joystick 1 button 0, joystick 1 button 1, joystick 2 button 0…

或任何操纵杆上的特定按钮 joystick button 0, joystick button 1, joystick button 2…

查看Input Manager

我可以在这里一步一步地解释这个,但它不会像一些在线教程那样好。我推荐 this video 作为执行此操作的好教程。

【讨论】:

    【解决方案2】:

    我建议首先检查是否收到了这些输入:

    if (Input.anyKey)
     {
             foreach(KeyCode kcode in Enum.GetValues(typeof(KeyCode)))
             {
                  Debug.Log(kcode);
             }
     }
    

    这样您就可以知道游戏是否正在识别您控制器的键码,如果是,则为它们分配了哪些名称。 一旦你得到这个,你只需要像通常的键盘一样检查键码!

    【讨论】:

    • 感谢您的回答,我会尽快查看并通知您
    • 使用您的代码,我无法显示按下的按钮。我只是编辑我的问题
    【解决方案3】:

    并非每个操纵杆、转向等都将其输入映射到同一轴。

    有一个关于该主题(以及其他相关问题)的统一论坛。我发现有一些 unity 插件可以解决你的问题:

    您可以使用一些程序来列出所有输入轴并查看您当前正在影响哪一个。我用过其中一个,但不记得它的名字了。它可能会帮助您查看中断和油门映射到哪个轴。 如果这是您想要的,其中一些还允许您重新映射。

    【讨论】:

      【解决方案4】:

      最可能的原因是 Unity3D 不支持此设备。

      Unity3D 在 Windows 上混合使用 XInputGameInput? 和 USB HID processing 作为其输入。

      目前尚不清楚(闭源),如果 GameInput 在 Windows 上使用,则在现代 XBOX 上是必需的。

      我无法提供明确的答案,因为我没有要测试的控制器,而且控制器上的文档也很少。

      我能做的最好的事情就是给你指明正确的方向。

      Unity3D中是否存在该设备:

      查看输入系统是否在运行时插入时识别设备(确保游戏窗口有焦点):

      改编自https://docs.unity3d.com/Packages/com.unity.inputsystem@1.4/manual/HowDoI.html

        InputSystem.onDeviceChange +=
              (device, change) =>
              {
                  switch (change)
                  {
                      case InputDeviceChange.Added:
                          // New Device.
                          Debug.Log("New device added.");
                          break;
                      case InputDeviceChange.Disconnected:
                          // Device got unplugged.
                          break;
                      case InputDeviceChange.Connected:
                          // Plugged back in.
                          break;
                      case InputDeviceChange.Removed:
                          // Remove from Input System entirely; by default, Devices stay in the system once discovered.
                          break;
                      default:
                          // See InputDeviceChange reference for other event types.
                          break;
                  }
              }
      

      插入时缺少日志输出意味着该设备未被识别为潜在的输入设备。跳到下面的“所有其他都失败”。

      此级别的标识并不意味着支持,因为它可能会标记所有 HID 设备。

      按下按钮时查看所有低电平输入事件:(也改编自4

          var trace = new InputEventTrace(); // Can also give device ID to only
                                             // trace events for a specific device.
      
          trace.Enable();
      
          //…run stuff
      
          var current = new InputEventPtr();
          while (trace.GetNextEvent(ref current))
          {
              Debug.Log("Got some event: " + current);
          }
      
          // Trace consumes unmanaged resources. Make sure to dispose.
          trace.Dispose();
      

      获得响应(给定编辑输出)的机会很小,但如果发生这种情况,请探索输出以找到设备关联的提示并相应地修复您的映射。

      其他都失败

      通过 Unity3D.com 网站请求设备支持。强烈推荐。

      您可以使用 USB HID 编写您自己的设备支持,可能会被病毒扫描程序标记,并且文档有限或实现自定义 GameInput 接口。 Windows 游戏控制器中的包含使其成为最可能的解决方案。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-23
        • 2012-11-09
        相关资源
        最近更新 更多