fix
This commit is contained in:
parent
f6715dbfae
commit
c8bb190c2e
@ -42,7 +42,6 @@ public static class InputDeviceWatcher
|
|||||||
|
|
||||||
_anyInputAction = new InputAction("AnyDevice", InputActionType.PassThrough);
|
_anyInputAction = new InputAction("AnyDevice", InputActionType.PassThrough);
|
||||||
_anyInputAction.AddBinding("<Keyboard>/anyKey");
|
_anyInputAction.AddBinding("<Keyboard>/anyKey");
|
||||||
_anyInputAction.AddBinding("<Mouse>/*");
|
|
||||||
_anyInputAction.AddBinding("<Gamepad>/*");
|
_anyInputAction.AddBinding("<Gamepad>/*");
|
||||||
_anyInputAction.AddBinding("<Joystick>/*");
|
_anyInputAction.AddBinding("<Joystick>/*");
|
||||||
|
|
||||||
@ -88,6 +87,9 @@ public static class InputDeviceWatcher
|
|||||||
if (ctx.control == null || ctx.control.device == null) return;
|
if (ctx.control == null || ctx.control.device == null) return;
|
||||||
|
|
||||||
var device = ctx.control.device;
|
var device = ctx.control.device;
|
||||||
|
|
||||||
|
if (!IsRelevantDevice(device)) return;
|
||||||
|
|
||||||
int curId = device.deviceId;
|
int curId = device.deviceId;
|
||||||
float now = Time.realtimeSinceStartup;
|
float now = Time.realtimeSinceStartup;
|
||||||
|
|
||||||
@ -123,7 +125,9 @@ public static class InputDeviceWatcher
|
|||||||
private static InputDeviceCategory DetermineCategoryFromDevice(InputDevice device)
|
private static InputDeviceCategory DetermineCategoryFromDevice(InputDevice device)
|
||||||
{
|
{
|
||||||
if (device == null) return InputDeviceCategory.Keyboard;
|
if (device == null) return InputDeviceCategory.Keyboard;
|
||||||
if (device is Keyboard || device is Mouse) return InputDeviceCategory.Keyboard;
|
// 重要:鼠标不再被视为键盘类(避免鼠标触发时回退到 Keyboard)
|
||||||
|
if (device is Keyboard) return InputDeviceCategory.Keyboard;
|
||||||
|
if (device is Mouse) return InputDeviceCategory.Other; // 明确忽略鼠标
|
||||||
if (IsGamepadLike(device)) return GetGamepadCategory(device);
|
if (IsGamepadLike(device)) return GetGamepadCategory(device);
|
||||||
|
|
||||||
string combined = $"{device.description.interfaceName} {device.layout} {device.description.product} {device.description.manufacturer} {device.displayName}".ToLower();
|
string combined = $"{device.description.interfaceName} {device.layout} {device.description.product} {device.description.manufacturer} {device.displayName}".ToLower();
|
||||||
@ -140,9 +144,19 @@ public static class InputDeviceWatcher
|
|||||||
if (device is Joystick) return true;
|
if (device is Joystick) return true;
|
||||||
|
|
||||||
var layout = (device.layout ?? "").ToLower();
|
var layout = (device.layout ?? "").ToLower();
|
||||||
|
// 这里保留 controller/gamepad/joystick 的识别,但忽略 mouse/touch 等
|
||||||
|
if (layout.Contains("mouse") || layout.Contains("touch") || layout.Contains("pen")) return false;
|
||||||
return layout.Contains("gamepad") || layout.Contains("controller") || layout.Contains("joystick");
|
return layout.Contains("gamepad") || layout.Contains("controller") || layout.Contains("joystick");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static bool IsRelevantDevice(InputDevice device)
|
||||||
|
{
|
||||||
|
if (device == null) return false;
|
||||||
|
if (device is Keyboard) return true;
|
||||||
|
if (IsGamepadLike(device)) return true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
private static InputDeviceCategory GetGamepadCategory(InputDevice device)
|
private static InputDeviceCategory GetGamepadCategory(InputDevice device)
|
||||||
{
|
{
|
||||||
if (device == null) return InputDeviceCategory.Other;
|
if (device == null) return InputDeviceCategory.Other;
|
||||||
@ -186,7 +200,6 @@ public static class InputDeviceWatcher
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------ 输出 --------------------
|
|
||||||
private static void EmitChange()
|
private static void EmitChange()
|
||||||
{
|
{
|
||||||
if (CurrentCategory == _lastEmittedCategory)
|
if (CurrentCategory == _lastEmittedCategory)
|
||||||
@ -201,7 +214,6 @@ public static class InputDeviceWatcher
|
|||||||
Debug.Log($"输入设备变更 -> {CurrentCategory} 触发设备: {CurrentDeviceName} vid=0x{vid:X} pid=0x{pid:X}");
|
Debug.Log($"输入设备变更 -> {CurrentCategory} 触发设备: {CurrentDeviceName} vid=0x{vid:X} pid=0x{pid:X}");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// 触发事件并记录已发射的分类
|
|
||||||
OnDeviceChanged?.Invoke(CurrentCategory);
|
OnDeviceChanged?.Invoke(CurrentCategory);
|
||||||
_lastEmittedCategory = CurrentCategory;
|
_lastEmittedCategory = CurrentCategory;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user