安装环境
unity:2021.3.16f1c1
InputSystem
使用说明
设备管理器-人体学输入设备-选择你的控制器
打开事件管理,复制出设备的UID和PID
脚本配置
- 声明硬件设备
配置VID,PID指向数据接收方
InputSystem.RegisterLayout<CarJoyInput>(
matches: new InputDeviceMatcher()
.WithInterface("HID")
.WithCapability("vendorId", 0x17EF) // Sony Entertainment.
.WithCapability("productId", 0x6018)); // Wireless controller.
配置面板布局以及接收数据解析方案
[InputControlLayout(stateType = typeof(JoyInputTest))]
硬件注册脚本总体脚本
using UnityEditor;
using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.InputSystem.Controls;
using UnityEngine.InputSystem.DualShock;
using UnityEngine.InputSystem.Layouts;
[InputControlLayout(stateType = typeof(JoyInputTest))]
#if UNITY_EDITOR
[InitializeOnLoad] // Make sure static constructor is called during startup.
#endif
public class CarJoyInput : InputDevice
{
static CarJoyInput()
{
InputSystem.RegisterLayout<CarJoyInput>(
matches: new InputDeviceMatcher()
.WithInterface("HID")
.WithCapability("vendorId", 0x17EF) // Sony Entertainment.
.WithCapability("productId", 0x6018)); // Wireless controller.
}
[RuntimeInitializeOnLoadMethod]
public static void Init()
{
}
protected override void FinishSetup()
{
base.FinishSetup();
Oil = GetChildControl<AxisControl>("Oil");
}
}
硬件布局以及硬件解析方案配置
using System.Collections;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using UnityEngine;
using UnityEngine.InputSystem.Layouts;
using UnityEngine.InputSystem.LowLevel;
using UnityEngine.InputSystem.Utilities;
[StructLayout(LayoutKind.Explicit, Size = 3)]
struct CarJoyInputReport : IInputStateTypeInfo
{
public FourCC format => new FourCC('H', 'I', 'D');
[InputControl(name = "Ignite", displayName = "点火器", offset = 1, bit = 4, sizeInBits = 1, layout = "Button", format = "BIT")]
[FieldOffset(0)] public byte reportId;
}
InputControl相关参数说明:
| 参数名称 | 参数定义 |
|---|---|
| name | 元素名称 |
| displayName | 备注名称 |
| offset | byte偏移 |
| bit | byte中的位 |
| sizeInBits | 对应数据长度 |
| layout | 元素类型 |
| format | 序列化方法 |
当前按照自己的想法改造的罗技输入面板可以进行轴数据读取,按钮状态判定等,与input本身系统较为类似


该文介绍如何在Unity2021.3.16f1c1版本中使用InputSystem管理设备,特别是针对PID为0x17EF和VID为0x6018(如SonyWirelesscontroller)的HID设备进行注册和数据接收。通过声明硬件设备布局、配置控制面板和解析输入报告来实现硬件交互,包括轴数据读取和按钮状态判定。
1806

被折叠的 条评论
为什么被折叠?



