Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Unity未读取/检测自定义HID设备_C#_Unity3d - Fatal编程技术网

C# Unity未读取/检测自定义HID设备

C# Unity未读取/检测自定义HID设备,c#,unity3d,C#,Unity3d,所以我尝试在Unity中实现一个定制的HID设备 设备正在向我的Linux PC发送信号,正如我在CMD中看到的那样 我按照本教程设置HID脚本 控制器只有几个按钮 HID是8个字节。 我能够在控制台中检测到来自HID设备的输入。 Unity的输入调试器/Unity的输入控件(侦听)功能都没有检测到任何东西。 我不确定这是否是unity的许可问题 我收到0个编译器错误 我的问题是,为什么unity根本不阅读任何东西 CMD正在完美地阅读HID,但不是unity 如果有人好奇VID和PID地址是

所以我尝试在Unity中实现一个定制的HID设备

设备正在向我的Linux PC发送信号,正如我在CMD中看到的那样

我按照本教程设置HID脚本

控制器只有几个按钮

HID是8个字节。 我能够在控制台中检测到来自HID设备的输入。 Unity的输入调试器/Unity的输入控件(侦听)功能都没有检测到任何东西。 我不确定这是否是unity的许可问题

我收到0个编译器错误

我的问题是,为什么unity根本不阅读任何东西

CMD正在完美地阅读HID,但不是unity

如果有人好奇VID和PID地址是否正确,则VID和PID地址直接来自HID手册

using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.InputSystem.Layouts;
using UnityEditor;
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using UnityEngine.InputSystem.Layouts;
using UnityEngine.InputSystem.LowLevel;
using UnityEngine.InputSystem.Utilities;

[StructLayout(LayoutKind.Explicit, Size = 8)]
public class GrayhillControllerReport2 : IInputStateTypeInfo
{
    public FourCC format => new FourCC('H', 'I', 'D');
    [FieldOffset(0)] public byte ReportID;  
    [FieldOffset(1)] public byte ScreenNumber;  
    [FieldOffset(2)] public byte Reserved; 
    [FieldOffset(3)] public byte EventID;  
    [InputControl(name = "Encoder", layout = "Button")][FieldOffset(4)] public byte Encoder;  
    [InputControl(name = "TapMask", layout = "Button")][FieldOffset(5)] public short TapMask;  
    [InputControl(name = "SwipeMask", layout = "Button")][FieldOffset(7)] public byte SwipeMask;  
}


[InputControlLayout(stateType = typeof(GrayhillControllerReport2))]
#if UNITY_EDITOR
[InitializeOnLoad]
#endif
public class GrayhillHID : InputDevice
{
    static GrayhillHID()
    {

    InputSystem.RegisterLayout<GrayhillHID>("GrayhillINFO",
    matches: new InputDeviceMatcher()
        .WithInterface("HID")
        .WithCapability("vendorId", 0x1658) // VID
        .WithCapability("productId", 0x0060)); // PID
    }
 
    [RuntimeInitializeOnLoadMethod]
    static void Init() { Debug.Log("Startup"); }
}
使用UnityEngine;
使用UnityEngine.InputSystem;
使用UnityEngine.InputSystem.Layouts;
使用UnityEditor;
使用制度;
使用System.Collections.Generic;
使用System.Runtime.InteropServices;
使用UnityEngine.InputSystem.Layouts;
使用UnityEngine.InputSystem.LowLevel;
使用UnityEngine.InputSystem.Utilities;
[StructLayout(LayoutKind.Explicit,Size=8)]
公共类GrayhillControllerReport2:IIInputStateTypeInfo
{
公共FourCC格式=>newfourcc('H','I','D');
[FieldOffset(0)]公共字节报告ID;
[FieldOffset(1)]公共字节屏幕编号;
[FieldOffset(2)]保留公共字节;
[FieldOffset(3)]公共字节事件ID;
[InputControl(name=“Encoder”,layout=“Button”)][FieldOffset(4)]公共字节编码器;
[InputControl(name=“TapMask”,layout=“Button”)][FieldOffset(5)]公共短TapMask;
[InputControl(name=“SwipeMask”,layout=“Button”)][FieldOffset(7)]公共字节SwipeMask;
}
[InputControlLayout(stateType=typeof(GrayhillControllerReport2))]
#如果统一编辑器
[初始化加载]
#恩迪夫
公共类GrayhillHID:InputDevice
{
静态灰色hillhid()
{
InputSystem.RegisterLayout(“GrayhillINFO”,
匹配:新InputDeviceMatcher()
.WithInterface(“HID”)
.WithCapability(“vendorId”,0x1658)//VID
.WithCapability(“productId”,0x0060));//PID
}
[RuntimeInitializeOnLoadMethod]
静态void Init(){Debug.Log(“启动”);}
}
我有一个简单的Gameloop脚本,可以尝试从自定义HID读取任何输入。 Gameloop.cs

 void Start()
 {
      InputSystem.AddDevice<GrayhillHID>();
 }

 // Update is called once per frame
 void Update()
 {
     if (Input.anyKey)
     {
         Debug.Log("An Input Detected");
     }
  }
void Start()
{
InputSystem.AddDevice();
}
//每帧调用一次更新
无效更新()
{
if(Input.anyKey)
{
Log(“检测到输入”);
}
}