Справка
Компонент
UMouseInterceptorComponent — UActorComponent, добавляется к любому актору через панель Components.
Делегаты
OnMousePressed
Срабатывает при нажатии кнопки мыши.
| Параметр | Тип | Описание |
|---|---|---|
Button | FKey | Нажатая кнопка (EKeys::LeftMouseButton, RightMouseButton, MiddleMouseButton, ThumbMouseButton, ThumbMouseButton2) |
bIsDoubleClick | bool | true, если клик попал в окно DoubleClickThreshold с предыдущего клика той же кнопкой |
OnMouseReleased
Срабатывает при отпускании кнопки мыши.
| Параметр | Тип | Описание |
|---|---|---|
Button | FKey | Отпущенная кнопка |
bIsDoubleClick | bool | Флаг двойного клика для последовательности press+release |
Функции
SetDoubleClickThreshold(float Threshold)
Устанавливает интервал (в секундах) для определения двойного клика.
MouseInterceptorComponent->SetDoubleClickThreshold(0.5f);
По умолчанию — 0.25s. Рекомендации:
0.2–0.3s— стандартный «windows-подобный» двойной клик0.15s— для быстрого геймплея10.0f— фактическое отключение определения (флаг всегдаfalse)
GetDoubleClickThreshold()
Возвращает текущий порог в секундах.
Code Modules
- MouseInterceptor
[Runtime]
Зависимости (.Build.cs)
PublicDependencyModuleNames.AddRange(new string[] {
"Core", "CoreUObject", "Engine",
"InputCore", "Slate", "SlateCore",
"UMG",
});
Поддерживаемые версии
| UE | Статус |
|---|---|
| 4.27 | ✅ CrossEngine |
| 5.0 – 5.7 | ✅ CrossEngine |
FAQ
Как отключить двойной клик?
Установи DoubleClickThreshold в очень большое значение — например 10.0f. Флаг bIsDoubleClick будет false практически всегда.
Поддерживается ли сетевая репликация?
Нет — плагин обрабатывает ввод только на клиентской стороне. Для сетевой передачи кликов оберни делегаты в RPC руками.
Работает ли перехват когда активен UI-виджет?
Да — перехват глобальный, независим от состояния фокуса ввода. Работает когда курсор вне окна? Нет — Slate получает события только пока окно активно.
Что с right-click UE-меню контекста?
Плагин получает события до стандартной обработки Slate. Если нужно сохранить дефолтное поведение (например, ПКМ в UMG-виджете), обрабатывай в своём делегате флаг bIsHandled — можно вернуть false и пустить событие дальше.
Совместим с Enhanced Input?
Да — плагин работает параллельно Enhanced Input (оба слушают Slate). Два разных слоя ввода, не конкурируют.